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  }