github.com/cosmos/cosmos-sdk@v0.50.1/crypto/keys/secp256r1/pubkey_internal_test.go (about) 1 package secp256r1 2 3 import ( 4 "testing" 5 6 proto "github.com/cosmos/gogoproto/proto" 7 "github.com/stretchr/testify/suite" 8 9 "github.com/cosmos/cosmos-sdk/codec" 10 "github.com/cosmos/cosmos-sdk/codec/types" 11 cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" 12 ) 13 14 var _ cryptotypes.PubKey = (*PubKey)(nil) 15 16 func TestPKSuite(t *testing.T) { 17 suite.Run(t, new(PKSuite)) 18 } 19 20 type CommonSuite struct { 21 suite.Suite 22 pk *PubKey // cryptotypes.PubKey 23 sk cryptotypes.PrivKey 24 } 25 26 func (suite *CommonSuite) SetupSuite() { 27 sk, err := GenPrivKey() 28 suite.Require().NoError(err) 29 suite.sk = sk 30 suite.pk = sk.PubKey().(*PubKey) 31 } 32 33 type PKSuite struct{ CommonSuite } 34 35 func (suite *PKSuite) TestString() { 36 require := suite.Require() 37 38 pkStr := suite.pk.String() 39 prefix := "secp256r1{" 40 require.Equal(prefix, pkStr[:len(prefix)]) 41 } 42 43 func (suite *PKSuite) TestType() { 44 suite.Require().Equal(name, suite.pk.Type()) 45 } 46 47 func (suite *PKSuite) TestBytes() { 48 bz := suite.pk.Bytes() 49 suite.Len(bz, fieldSize+1) 50 var pk *PubKey 51 suite.Nil(pk.Bytes()) 52 } 53 54 func (suite *PKSuite) TestEquals() { 55 require := suite.Require() 56 57 skOther, err := GenPrivKey() 58 require.NoError(err) 59 pkOther := skOther.PubKey() 60 pkOther2 := &PubKey{&ecdsaPK{skOther.Secret.PubKey()}} 61 62 require.False(suite.pk.Equals(pkOther)) 63 require.True(pkOther.Equals(pkOther2)) 64 require.True(pkOther2.Equals(pkOther)) 65 require.True(pkOther.Equals(pkOther), "Equals must be reflexive") //nolint:gocritic // false positive 66 } 67 68 func (suite *PKSuite) TestMarshalProto() { 69 require := suite.Require() 70 71 /**** test structure marshaling ****/ 72 73 var pk PubKey 74 bz, err := proto.Marshal(suite.pk) 75 require.NoError(err) 76 require.NoError(proto.Unmarshal(bz, &pk)) 77 require.True(pk.Equals(suite.pk)) 78 79 /**** test structure marshaling with codec ****/ 80 81 pk = PubKey{} 82 emptyRegistry := types.NewInterfaceRegistry() 83 emptyCodec := codec.NewProtoCodec(emptyRegistry) 84 registry := types.NewInterfaceRegistry() 85 RegisterInterfaces(registry) 86 pubkeyCodec := codec.NewProtoCodec(registry) 87 88 bz, err = emptyCodec.Marshal(suite.pk) 89 require.NoError(err) 90 require.NoError(emptyCodec.Unmarshal(bz, &pk)) 91 require.True(pk.Equals(suite.pk)) 92 93 const bufSize = 100 94 bz2 := make([]byte, bufSize) 95 pkCpy := suite.pk 96 _, err = pkCpy.MarshalTo(bz2) 97 require.NoError(err) 98 require.Len(bz2, bufSize) 99 require.Equal(bz, bz2[:pk.Size()]) 100 101 bz2 = make([]byte, bufSize) 102 _, err = pkCpy.MarshalToSizedBuffer(bz2) 103 require.NoError(err) 104 require.Len(bz2, bufSize) 105 require.Equal(bz, bz2[(bufSize-pk.Size()):]) 106 107 /**** test interface marshaling ****/ 108 bz, err = pubkeyCodec.MarshalInterface(suite.pk) 109 require.NoError(err) 110 var pkI cryptotypes.PubKey 111 err = emptyCodec.UnmarshalInterface(bz, &pkI) 112 require.EqualError(err, "no registered implementations of type types.PubKey") 113 114 RegisterInterfaces(emptyRegistry) 115 require.NoError(emptyCodec.UnmarshalInterface(bz, &pkI)) 116 require.True(pkI.Equals(suite.pk)) 117 118 require.Error(emptyCodec.UnmarshalInterface(bz, nil), "nil should fail") 119 } 120 121 func (suite *PKSuite) TestSize() { 122 require := suite.Require() 123 var pk ecdsaPK 124 require.Equal(pk.Size(), len(suite.pk.Bytes())) 125 126 var nilPk *ecdsaPK 127 require.Equal(0, nilPk.Size(), "nil value must have zero size") 128 }