github.com/Finschia/finschia-sdk@v0.48.1/crypto/keys/secp256r1/pubkey_internal_test.go (about) 1 package secp256r1 2 3 import ( 4 "testing" 5 6 proto "github.com/gogo/protobuf/proto" 7 "github.com/stretchr/testify/suite" 8 9 "github.com/Finschia/finschia-sdk/codec" 10 "github.com/Finschia/finschia-sdk/codec/types" 11 cryptotypes "github.com/Finschia/finschia-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") 66 } 67 68 func (suite *PKSuite) TestMarshalProto() { 69 require := suite.Require() 70 71 /**** test structure marshalling ****/ 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 marshalling with codec ****/ 80 81 pk = PubKey{} 82 registry := types.NewInterfaceRegistry() 83 cdc := codec.NewProtoCodec(registry) 84 bz, err = cdc.Marshal(suite.pk) 85 require.NoError(err) 86 require.NoError(cdc.Unmarshal(bz, &pk)) 87 require.True(pk.Equals(suite.pk)) 88 89 const bufSize = 100 90 bz2 := make([]byte, bufSize) 91 pkCpy := suite.pk 92 _, err = pkCpy.MarshalTo(bz2) 93 require.NoError(err) 94 require.Len(bz2, bufSize) 95 require.Equal(bz, bz2[:pk.Size()]) 96 97 bz2 = make([]byte, bufSize) 98 _, err = pkCpy.MarshalToSizedBuffer(bz2) 99 require.NoError(err) 100 require.Len(bz2, bufSize) 101 require.Equal(bz, bz2[(bufSize-pk.Size()):]) 102 103 /**** test interface marshalling ****/ 104 bz, err = cdc.MarshalInterface(suite.pk) 105 require.NoError(err) 106 var pkI cryptotypes.PubKey 107 err = cdc.UnmarshalInterface(bz, &pkI) 108 require.EqualError(err, "no registered implementations of type types.PubKey") 109 110 RegisterInterfaces(registry) 111 require.NoError(cdc.UnmarshalInterface(bz, &pkI)) 112 require.True(pkI.Equals(suite.pk)) 113 114 cdc.UnmarshalInterface(bz, nil) 115 require.Error(err, "nil should fail") 116 } 117 118 func (suite *PKSuite) TestSize() { 119 require := suite.Require() 120 var pk ecdsaPK 121 require.Equal(pk.Size(), len(suite.pk.Bytes())) 122 123 var nilPk *ecdsaPK 124 require.Equal(0, nilPk.Size(), "nil value must have zero size") 125 }