diff --git a/cmd/csaf_provider/config.go b/cmd/csaf_provider/config.go index 75b006c..dd94a17 100644 --- a/cmd/csaf_provider/config.go +++ b/cmd/csaf_provider/config.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/BurntSushi/toml" + "github.com/ProtonMail/gopenpgp/v2/crypto" "github.com/csaf-poc/csaf_distribution/csaf" ) @@ -70,6 +71,15 @@ func (cfg *config) modelTLPs() []csaf.TLPLabel { return tlps } +func (cfg *config) loadCryptoKey() (*crypto.Key, error) { + f, err := os.Open(cfg.Key) + if err != nil { + return nil, err + } + defer f.Close() + return crypto.NewKeyFromArmoredReader(f) +} + func loadConfig() (*config, error) { path := os.Getenv(configEnv) if path == "" { diff --git a/cmd/csaf_provider/controller.go b/cmd/csaf_provider/controller.go index e693d93..520dca9 100644 --- a/cmd/csaf_provider/controller.go +++ b/cmd/csaf_provider/controller.go @@ -112,19 +112,10 @@ func loadCSAF(r *http.Request) (string, []byte, error) { return cleanFileName(handler.Filename), buf.Bytes(), nil } -func (c *controller) loadCryptoKey() (*crypto.Key, error) { - f, err := os.Open(c.cfg.Key) - if err != nil { - return nil, err - } - defer f.Close() - return crypto.NewKeyFromArmoredReader(f) -} - func (c *controller) handleSignature(r *http.Request, data []byte) (string, string, error) { // Either way ... we need the key. - key, err := c.loadCryptoKey() + key, err := c.cfg.loadCryptoKey() if err != nil { return "", "", err } diff --git a/cmd/csaf_provider/create.go b/cmd/csaf_provider/create.go index 3641a47..0bc9127 100644 --- a/cmd/csaf_provider/create.go +++ b/cmd/csaf_provider/create.go @@ -95,5 +95,14 @@ func createProviderMetadata(c *config, wellknownCSAF string) error { } pm := csaf.NewProviderMetadataDomain(c.Domain, c.modelTLPs()) pm.Publisher = c.Publisher + + // Set OpenPGP key. + key, err := c.loadCryptoKey() + if err != nil { + return err + } + fingerprint := key.GetFingerprint() + pm.SetPGP(fingerprint, c.GetOpenPGPURL(fingerprint)) + return saveToFile(path, pm) }