mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-23 21:42:23 -05:00
30 lines
643 B
Go
30 lines
643 B
Go
package keyfunc
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"fmt"
|
|
)
|
|
|
|
const (
|
|
// ktyEC is the key type (kty) in the JWT header for EdDSA.
|
|
ktyOKP = "OKP"
|
|
)
|
|
|
|
// EdDSA parses a jsonWebKey and turns it into a EdDSA public key.
|
|
func (j *jsonWebKey) EdDSA() (publicKey ed25519.PublicKey, err error) {
|
|
if j.X == "" {
|
|
return nil, fmt.Errorf("%w: %s", ErrMissingAssets, ktyOKP)
|
|
}
|
|
|
|
// Decode the public key from Base64.
|
|
//
|
|
// According to RFC 8037, this is from Base64 URL bytes.
|
|
// https://datatracker.ietf.org/doc/html/rfc8037#appendix-A.2
|
|
publicBytes, err := base64urlTrailingPadding(j.X)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return publicBytes, nil
|
|
}
|