github.com/hellobchain/third_party@v0.0.0-20230331131523-deb0478a2e52/cloudflare/cfssl/helpers/derhelpers/derhelpers.go (about) 1 // Package derhelpers implements common functionality 2 // on DER encoded data 3 package derhelpers 4 5 import ( 6 "crypto" 7 "crypto/rsa" 8 "github.com/hellobchain/newcryptosm/ecdsa" 9 "github.com/hellobchain/newcryptosm/x509" 10 11 cferr "github.com/hellobchain/third_party/cloudflare/cfssl/errors" 12 ) 13 14 // ParsePrivateKeyDER parses a PKCS #1, PKCS #8, or elliptic curve 15 // DER-encoded private key. The key must not be in PEM format. 16 func ParsePrivateKeyDER(keyDER []byte) (key crypto.Signer, err error) { 17 generalKey, err := x509.ParsePKCS8PrivateKey(keyDER) 18 if err != nil { 19 generalKey, err = x509.ParsePKCS1PrivateKey(keyDER) 20 if err != nil { 21 generalKey, err = x509.ParseECPrivateKey(keyDER) 22 if err != nil { 23 // We don't include the actual error into 24 // the final error. The reason might be 25 // we don't want to leak any info about 26 // the private key. 27 return nil, cferr.New(cferr.PrivateKeyError, 28 cferr.ParseFailed) 29 } 30 } 31 } 32 33 switch generalKey.(type) { 34 case *rsa.PrivateKey: 35 return generalKey.(*rsa.PrivateKey), nil 36 case *ecdsa.PrivateKey: 37 return generalKey.(*ecdsa.PrivateKey), nil 38 } 39 40 // should never reach here 41 return nil, cferr.New(cferr.PrivateKeyError, cferr.ParseFailed) 42 }