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