gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Minternal/ap/extract.go | 17++++++++++++-----
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 }