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 }