11 ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key")
12 ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key")
15 // Parse PEM encoded Elliptic Curve Private Key Structure
16 func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) {
21 if block, _ = pem.Decode(key); block == nil {
22 return nil, ErrKeyMustBePEMEncoded
26 var parsedKey interface{}
27 if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil {
31 var pkey *ecdsa.PrivateKey
33 if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok {
34 return nil, ErrNotECPrivateKey
40 // Parse PEM encoded PKCS1 or PKCS8 public key
41 func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) {
46 if block, _ = pem.Decode(key); block == nil {
47 return nil, ErrKeyMustBePEMEncoded
51 var parsedKey interface{}
52 if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {
53 if cert, err := x509.ParseCertificate(block.Bytes); err == nil {
54 parsedKey = cert.PublicKey
60 var pkey *ecdsa.PublicKey
62 if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok {
63 return nil, ErrNotECPublicKey