forked from iost-official/go-iost
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalgorithm_test.go
111 lines (99 loc) · 2.95 KB
/
algorithm_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
package crypto
import (
"crypto/rand"
"reflect"
"testing"
"github.com/iost-official/go-iost/v3/common"
"github.com/stretchr/testify/assert"
)
var algos = []Algorithm{
Secp256k1,
Ed25519,
}
func TestCheckSeckey(t *testing.T) {
assert.Nil(t, Ed25519.CheckSeckey(common.Base58Decode("2yquS3ySrGWPEKywCPzX4RTJugqRh7kJSo5aehsLYPEWkUxBWA39oMrZ7ZxuM4fgyXYs2cPwh5n8aNNpH5x2VyK1")))
assert.NotNil(t, Ed25519.CheckSeckey(common.Base58Decode("65Rznad6Ko7gPha1Vnbsgu1bS7hYATdtdVp191jwVrMhW3SynSR6R7qzBgM6cFL74spAQnCWXuqze2YME8UfUFiL")))
}
func TestSecp256k1(t *testing.T) {
secKey := common.Base58Decode("3W7YGWd2XjuMVSP2wEhTnGaPs6S5A9UpHpDSyLMc2xYb")
pubkey := Secp256k1.GetPubkey(secKey)
assert.Equal(t, "mN6t6fLnSW2iYx7QkCVFZMDseCU2BjednbfCF7NeXcPj", common.Base58Encode(pubkey))
msg := common.Sha3([]byte("hello world"))
sig := Secp256k1.Sign(msg, secKey)
assert.Equal(t, "41cAgE8u93ha5zDp5aqPyxvVSHN7G5mocZMgkyedpg1WdaNqN72KAndw8Bv7SpGGmxYy28XXiF28WyCHDn8AFDzv", common.Base58Encode(sig))
assert.True(t, Secp256k1.Verify(msg, pubkey, sig))
}
func TestVerify(t *testing.T) {
for _, algo := range algos {
seckey := algo.GenSeckey()
pubkey := algo.GetPubkey(seckey)
msg := make([]byte, 32)
rand.Read(msg)
sig := algo.Sign(msg, seckey)
assert.True(t, algo.Verify(msg, pubkey, sig))
assert.False(t, algo.Verify(msg, pubkey[:31], sig))
sig[0]++
assert.False(t, algo.Verify(msg, pubkey, sig))
}
}
func BenchmarkSign(b *testing.B) {
for _, algo := range algos {
b.Run(reflect.TypeOf(algo.getBackend()).String(), func(b *testing.B) {
seckeys := make([][]byte, 0)
msgs := make([][]byte, 0)
for i := 0; i < b.N; i++ {
msg := make([]byte, 32)
rand.Read(msg)
msgs = append(msgs, msg)
seckeys = append(seckeys, algo.GenSeckey())
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
algo.Sign(msgs[i], seckeys[i])
}
})
}
}
func BenchmarkVerify(b *testing.B) {
for _, algo := range algos {
b.Run(reflect.TypeOf(algo.getBackend()).String(), func(b *testing.B) {
seckeys := make([][]byte, 0)
pubkeys := make([][]byte, 0)
sigs := make([][]byte, 0)
msgs := make([][]byte, 0)
for i := 0; i < b.N; i++ {
msg := make([]byte, 32)
rand.Read(msg)
msgs = append(msgs, msg)
seckeys = append(seckeys, algo.GenSeckey())
pubkeys = append(pubkeys, algo.GetPubkey(seckeys[i]))
sigs = append(sigs, algo.Sign(msgs[i], seckeys[i]))
}
b.ResetTimer()
for i := 0; i < b.N; i++ {
algo.Verify(msgs[i], pubkeys[i], sigs[i])
}
})
}
}
func BenchmarkGetPubkey(b *testing.B) {
for _, algo := range algos {
b.Run(reflect.TypeOf(algo.getBackend()).String(), func(b *testing.B) {
seckey := algo.GenSeckey()
b.ResetTimer()
for i := 0; i < b.N; i++ {
algo.GetPubkey(seckey)
}
})
}
}
func BenchmarkGenSeckey(b *testing.B) {
for _, algo := range algos {
b.Run(reflect.TypeOf(algo.getBackend()).String(), func(b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
algo.GenSeckey()
}
})
}
}