package jwt
import (
"crypto/ecdsa"
"crypto/x509"
"encoding/pem"
"errors"
)
var (
ErrNotECPublicKey = errors .New ("key is not a valid ECDSA public key" )
ErrNotECPrivateKey = errors .New ("key is not a valid ECDSA private key" )
)
func ParseECPrivateKeyFromPEM (key []byte ) (*ecdsa .PrivateKey , error ) {
var err error
var block *pem .Block
if block , _ = pem .Decode (key ); block == nil {
return nil , ErrKeyMustBePEMEncoded
}
var parsedKey interface {}
if parsedKey , err = x509 .ParseECPrivateKey (block .Bytes ); err != nil {
if parsedKey , err = x509 .ParsePKCS8PrivateKey (block .Bytes ); err != nil {
return nil , err
}
}
var pkey *ecdsa .PrivateKey
var ok bool
if pkey , ok = parsedKey .(*ecdsa .PrivateKey ); !ok {
return nil , ErrNotECPrivateKey
}
return pkey , nil
}
func ParseECPublicKeyFromPEM (key []byte ) (*ecdsa .PublicKey , error ) {
var err error
var block *pem .Block
if block , _ = pem .Decode (key ); block == nil {
return nil , ErrKeyMustBePEMEncoded
}
var parsedKey interface {}
if parsedKey , err = x509 .ParsePKIXPublicKey (block .Bytes ); err != nil {
if cert , err := x509 .ParseCertificate (block .Bytes ); err == nil {
parsedKey = cert .PublicKey
} else {
return nil , err
}
}
var pkey *ecdsa .PublicKey
var ok bool
if pkey , ok = parsedKey .(*ecdsa .PublicKey ); !ok {
return nil , ErrNotECPublicKey
}
return pkey , nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .