github.com/cosmos/cosmos-sdk@v0.50.1/crypto/codec/cmt.go (about) 1 package codec 2 3 import ( 4 cmtcrypto "github.com/cometbft/cometbft/crypto" 5 "github.com/cometbft/cometbft/crypto/encoding" 6 cmtprotocrypto "github.com/cometbft/cometbft/proto/tendermint/crypto" 7 8 "cosmossdk.io/errors" 9 10 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" 11 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" 12 cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" 13 sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 14 ) 15 16 // FromCmtProtoPublicKey converts a CMT's cmtprotocrypto.PublicKey into our own PubKey. 17 func FromCmtProtoPublicKey(protoPk cmtprotocrypto.PublicKey) (cryptotypes.PubKey, error) { 18 switch protoPk := protoPk.Sum.(type) { 19 case *cmtprotocrypto.PublicKey_Ed25519: 20 return &ed25519.PubKey{ 21 Key: protoPk.Ed25519, 22 }, nil 23 case *cmtprotocrypto.PublicKey_Secp256K1: 24 return &secp256k1.PubKey{ 25 Key: protoPk.Secp256K1, 26 }, nil 27 default: 28 return nil, errors.Wrapf(sdkerrors.ErrInvalidType, "cannot convert %v from Tendermint public key", protoPk) 29 } 30 } 31 32 // ToCmtProtoPublicKey converts our own PubKey to Cmt's cmtprotocrypto.PublicKey. 33 func ToCmtProtoPublicKey(pk cryptotypes.PubKey) (cmtprotocrypto.PublicKey, error) { 34 switch pk := pk.(type) { 35 case *ed25519.PubKey: 36 return cmtprotocrypto.PublicKey{ 37 Sum: &cmtprotocrypto.PublicKey_Ed25519{ 38 Ed25519: pk.Key, 39 }, 40 }, nil 41 case *secp256k1.PubKey: 42 return cmtprotocrypto.PublicKey{ 43 Sum: &cmtprotocrypto.PublicKey_Secp256K1{ 44 Secp256K1: pk.Key, 45 }, 46 }, nil 47 default: 48 return cmtprotocrypto.PublicKey{}, errors.Wrapf(sdkerrors.ErrInvalidType, "cannot convert %v to Tendermint public key", pk) 49 } 50 } 51 52 // FromCmtPubKeyInterface converts CMT's cmtcrypto.PubKey to our own PubKey. 53 func FromCmtPubKeyInterface(tmPk cmtcrypto.PubKey) (cryptotypes.PubKey, error) { 54 tmProtoPk, err := encoding.PubKeyToProto(tmPk) 55 if err != nil { 56 return nil, err 57 } 58 59 return FromCmtProtoPublicKey(tmProtoPk) 60 } 61 62 // ToCmtPubKeyInterface converts our own PubKey to CMT's cmtcrypto.PubKey. 63 func ToCmtPubKeyInterface(pk cryptotypes.PubKey) (cmtcrypto.PubKey, error) { 64 tmProtoPk, err := ToCmtProtoPublicKey(pk) 65 if err != nil { 66 return nil, err 67 } 68 69 return encoding.PubKeyFromProto(tmProtoPk) 70 } 71 72 // ---------------------- 73 74 // Deprecated: use FromCmtProtoPublicKey instead. 75 func FromTmProtoPublicKey(protoPk cmtprotocrypto.PublicKey) (cryptotypes.PubKey, error) { 76 return FromCmtProtoPublicKey(protoPk) 77 } 78 79 // Deprecated: use ToCmtProtoPublicKey instead. 80 func ToTmProtoPublicKey(pk cryptotypes.PubKey) (cmtprotocrypto.PublicKey, error) { 81 return ToCmtProtoPublicKey(pk) 82 } 83 84 // Deprecated: use FromCmtPubKeyInterface instead. 85 func FromTmPubKeyInterface(tmPk cmtcrypto.PubKey) (cryptotypes.PubKey, error) { 86 return FromCmtPubKeyInterface(tmPk) 87 } 88 89 // Deprecated: use ToCmtPubKeyInterface instead. 90 func ToTmPubKeyInterface(pk cryptotypes.PubKey) (cmtcrypto.PubKey, error) { 91 return ToCmtPubKeyInterface(pk) 92 }