7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 "github.com/tendermint/ed25519"
10 data "github.com/tendermint/go-wire/data"
13 func TestSignAndValidateEd25519(t *testing.T) {
15 privKey := GenPrivKeyEd25519()
16 pubKey := privKey.PubKey()
18 msg := CRandBytes(128)
19 sig := privKey.Sign(msg)
22 assert.True(t, pubKey.VerifyBytes(msg, sig))
24 // Mutate the signature, just one bit.
25 sigEd := sig.Unwrap().(SignatureEd25519)
26 sigEd[7] ^= byte(0x01)
29 assert.False(t, pubKey.VerifyBytes(msg, sig))
32 func TestSignAndValidateSecp256k1(t *testing.T) {
33 privKey := GenPrivKeySecp256k1()
34 pubKey := privKey.PubKey()
36 msg := CRandBytes(128)
37 sig := privKey.Sign(msg)
39 assert.True(t, pubKey.VerifyBytes(msg, sig))
41 // Mutate the signature, just one bit.
42 sigEd := sig.Unwrap().(SignatureSecp256k1)
43 sigEd[3] ^= byte(0x01)
46 assert.False(t, pubKey.VerifyBytes(msg, sig))
49 func TestSignatureEncodings(t *testing.T) {
57 privKey: GenPrivKeyEd25519().Wrap(),
58 sigSize: ed25519.SignatureSize,
63 privKey: GenPrivKeySecp256k1().Wrap(),
64 sigSize: 0, // unknown
65 sigType: TypeSecp256k1,
66 sigName: NameSecp256k1,
70 for _, tc := range cases {
71 // note we embed them from the beginning....
72 pubKey := tc.privKey.PubKey()
74 msg := CRandBytes(128)
75 sig := tc.privKey.Sign(msg)
78 bin, err := data.ToWire(sig)
79 require.Nil(t, err, "%+v", err)
81 assert.Equal(t, tc.sigSize+1, len(bin))
83 assert.Equal(t, tc.sigType, bin[0])
87 err = data.FromWire(bin, &sig2)
88 require.Nil(t, err, "%+v", err)
89 assert.EqualValues(t, sig, sig2)
90 assert.True(t, pubKey.VerifyBytes(msg, sig2))
93 js, err := data.ToJSON(sig)
94 require.Nil(t, err, "%+v", err)
95 assert.True(t, strings.Contains(string(js), tc.sigName))
99 err = data.FromJSON(js, &sig3)
100 require.Nil(t, err, "%+v", err)
101 assert.EqualValues(t, sig, sig3)
102 assert.True(t, pubKey.VerifyBytes(msg, sig3))
104 // and make sure we can textify it
105 text, err := data.ToText(sig)
106 require.Nil(t, err, "%+v", err)
107 assert.True(t, strings.HasPrefix(text, tc.sigName))
111 func TestWrapping(t *testing.T) {
112 assert := assert.New(t)
114 // construct some basic constructs
115 msg := CRandBytes(128)
116 priv := GenPrivKeyEd25519()
118 sig := priv.Sign(msg)
124 pub.Wrap().Wrap().Wrap(),
125 PubKey{PubKey{PubKey{pub}}}.Wrap(),
127 for _, p := range pubs {
128 _, ok := p.PubKeyInner.(PubKey)
135 sig.Wrap().Wrap().Wrap(),
136 Signature{Signature{Signature{sig}}}.Wrap(),
138 for _, s := range sigs {
139 _, ok := s.SignatureInner.(Signature)