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  }