OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / tendermint / go-crypto / priv_key_test.go
1 package crypto
2
3 import (
4         "fmt"
5         "testing"
6
7         "github.com/stretchr/testify/assert"
8         "github.com/stretchr/testify/require"
9
10         wire "github.com/tendermint/go-wire"
11 )
12
13 type BadKey struct {
14         PrivKeyEd25519
15 }
16
17 // Wrap fulfils interface for PrivKey struct
18 func (pk BadKey) Wrap() PrivKey {
19         return PrivKey{pk}
20 }
21
22 func (pk BadKey) Bytes() []byte {
23         return wire.BinaryBytes(pk.Wrap())
24 }
25
26 func (pk BadKey) ValidateKey() error {
27         return fmt.Errorf("fuggly key")
28 }
29
30 func init() {
31         PrivKeyMapper.
32                 RegisterImplementation(BadKey{}, "bad", 0x66)
33 }
34
35 func TestReadPrivKey(t *testing.T) {
36         assert, require := assert.New(t), require.New(t)
37
38         // garbage in, garbage out
39         garbage := []byte("hjgewugfbiewgofwgewr")
40         _, err := PrivKeyFromBytes(garbage)
41         require.Error(err)
42
43         edKey := GenPrivKeyEd25519()
44         badKey := BadKey{edKey}
45
46         cases := []struct {
47                 key   PrivKey
48                 valid bool
49         }{
50                 {edKey.Wrap(), true},
51                 {badKey.Wrap(), false},
52         }
53
54         for i, tc := range cases {
55                 data := tc.key.Bytes()
56                 key, err := PrivKeyFromBytes(data)
57                 if tc.valid {
58                         assert.NoError(err, "%d", i)
59                         assert.Equal(tc.key, key, "%d", i)
60                 } else {
61                         assert.Error(err, "%d: %#v", i, key)
62                 }
63         }
64
65 }