gitee.com/lh-her-team/common@v1.5.1/helper/libp2pcrypto/key_not_openssl.go (about)

     1  //go:build !openssl
     2  // +build !openssl
     3  
     4  package libp2pcrypto
     5  
     6  import (
     7  	"crypto"
     8  	"crypto/ecdsa"
     9  	"crypto/ed25519"
    10  	"crypto/rsa"
    11  
    12  	"github.com/tjfoc/gmsm/sm2"
    13  
    14  	btcec "github.com/btcsuite/btcd/btcec"
    15  )
    16  
    17  // KeyPairFromStdKey wraps standard library (and secp256k1) private keys in libp2p/go-libp2p-core/crypto keys
    18  func KeyPairFromStdKey(priv crypto.PrivateKey) (PrivKey, PubKey, error) {
    19  	if priv == nil {
    20  		return nil, nil, ErrNilPrivateKey
    21  	}
    22  	switch p := priv.(type) {
    23  	case *rsa.PrivateKey:
    24  		return &RsaPrivateKey{*p}, &RsaPublicKey{k: p.PublicKey}, nil
    25  	case *ecdsa.PrivateKey:
    26  		return &ECDSAPrivateKey{p}, &ECDSAPublicKey{&p.PublicKey}, nil
    27  	case *ed25519.PrivateKey:
    28  		pubIfc := p.Public()
    29  		pub, _ := pubIfc.(ed25519.PublicKey)
    30  		return &Ed25519PrivateKey{*p}, &Ed25519PublicKey{pub}, nil
    31  	case *btcec.PrivateKey:
    32  		sPriv := Secp256k1PrivateKey(*p)
    33  		sPub := Secp256k1PublicKey(*p.PubKey())
    34  		return &sPriv, &sPub, nil
    35  	case *sm2.PrivateKey:
    36  		return &SM2PrivateKey{p}, &SM2PublicKey{&p.PublicKey}, nil
    37  	default:
    38  		return nil, nil, ErrBadKeyType
    39  	}
    40  }
    41  
    42  // PrivKeyToStdKey converts libp2p/go-libp2p-core/crypto private keys to standard library (and secp256k1) private keys
    43  func PrivKeyToStdKey(priv PrivKey) (crypto.PrivateKey, error) {
    44  	if priv == nil {
    45  		return nil, ErrNilPrivateKey
    46  	}
    47  	switch p := priv.(type) {
    48  	case *RsaPrivateKey:
    49  		return &p.sk, nil
    50  	case *ECDSAPrivateKey:
    51  		return p.priv, nil
    52  	case *Ed25519PrivateKey:
    53  		return &p.k, nil
    54  	case *Secp256k1PrivateKey:
    55  		return p, nil
    56  	case *SM2PrivateKey:
    57  		return p.priv, nil
    58  	default:
    59  		return nil, ErrBadKeyType
    60  	}
    61  }
    62  
    63  // PubKeyToStdKey converts libp2p/go-libp2p-core/crypto private keys to standard library (and secp256k1) public keys
    64  func PubKeyToStdKey(pub PubKey) (crypto.PublicKey, error) {
    65  	if pub == nil {
    66  		return nil, ErrNilPublicKey
    67  	}
    68  	switch p := pub.(type) {
    69  	case *RsaPublicKey:
    70  		return &p.k, nil
    71  	case *ECDSAPublicKey:
    72  		return p.pub, nil
    73  	case *Ed25519PublicKey:
    74  		return p.k, nil
    75  	case *Secp256k1PublicKey:
    76  		return p, nil
    77  	case *SM2PublicKey:
    78  		return p.pub, nil
    79  	default:
    80  		return nil, ErrBadKeyType
    81  	}
    82  }