commit 5a0e418281c05f069c7b70bfa3132b258740ece6
parent 1652633d93aa578e4d902a94c94a48f08ae78c3a
Author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Date: Wed, 30 Nov 2022 23:13:13 +0100
[feature] Support PKCS1 "RSA PUBLIC KEY" pem block type (#1179)
* ap: add support for PKCS1 "RSA PUBLIC KEY" pem block type
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
* ap: report no PEM data or unknown pem block type
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Signed-off-by: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
Diffstat:
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/internal/ap/extract.go b/internal/ap/extract.go
@@ -22,6 +22,7 @@
package ap
import (
+ "crypto"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
@@ -318,18 +319,24 @@ func ExtractPublicKeyForOwner(i WithPublicKey, forOwner *url.URL) (*rsa.PublicKe
}
block, _ := pem.Decode([]byte(pkeyPem))
- if block == nil || block.Type != "PUBLIC KEY" {
- return nil, nil, errors.New("could not decode publicKeyPem to PUBLIC KEY pem block type")
+ if block == nil {
+ return nil, nil, errors.New("could not decode publicKeyPem: no PEM data")
+ }
+ var p crypto.PublicKey
+ switch block.Type {
+ case "PUBLIC KEY":
+ p, err = x509.ParsePKIXPublicKey(block.Bytes)
+ case "RSA PUBLIC KEY":
+ p, err = x509.ParsePKCS1PublicKey(block.Bytes)
+ default:
+ return nil, nil, fmt.Errorf("could not parse public key: unknown block type: %q", block.Type)
}
-
- p, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
return nil, nil, fmt.Errorf("could not parse public key from block bytes: %s", err)
}
if p == nil {
return nil, nil, errors.New("returned public key was empty")
}
-
if publicKey, ok := p.(*rsa.PublicKey); ok {
return publicKey, pkeyID, nil
}