go-blindsecp256k1/parsers_test.go
parsers_test.goRaw
1package blindsecp256k1
2
3import (
4 "encoding/hex"
5 "encoding/json"
6 "math/big"
7 "testing"
8
9 "github.com/ethereum/go-ethereum/crypto"
10 "github.com/stretchr/testify/assert"
11 "github.com/stretchr/testify/require"
12)
13
14func TestMarshalers(t *testing.T) {
15 // Point
16 p := G.Mul(big.NewInt(1234))
17 b, err := json.Marshal(p)
18 require.Nil(t, err)
19 assert.Equal(t,
20 `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll
21 string(b))
22
23 var p2 *Point
24 err = json.Unmarshal(b, &p2)
25 require.Nil(t, err)
26 assert.Equal(t, p, p2)
27
28 // PublicKey
29 pk := PublicKey(*p)
30 b, err = json.Marshal(pk)
31 require.Nil(t, err)
32 assert.Equal(t,
33 `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll
34 string(b))
35
36 var pk2 PublicKey
37 err = json.Unmarshal(b, &pk2)
38 require.Nil(t, err)
39 assert.Equal(t, pk, pk2)
40
41 // Signature
42 sig := Signature{
43 S: big.NewInt(9876),
44 F: p,
45 }
46 b, err = json.Marshal(sig)
47 require.Nil(t, err)
48 assert.Equal(t,
49 `{"s":"9876","f":{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}}`, //nolint:lll
50 string(b))
51
52 var sig2 Signature
53 err = json.Unmarshal(b, &sig2)
54 require.Nil(t, err)
55 assert.Equal(t, sig, sig2)
56}
57
58func TestBytes(t *testing.T) {
59 // Point
60 p := G.Mul(big.NewInt(3))
61 b := p.Bytes()
62 assert.Equal(t, "f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f900", hex.EncodeToString(b)) //nolint:lll
63 p2, err := NewPointFromBytes(b)
64 assert.Nil(t, err)
65 assert.Equal(t, p, p2)
66
67 p = G.Mul(big.NewInt(1234))
68 b = p.Bytes()
69 assert.Equal(t, "e37648435c60dcd181b3d41d50857ba5b5abebe279429aa76558f6653f1658f200", hex.EncodeToString(b)) //nolint:lll
70 p2, err = NewPointFromBytes(b)
71 assert.Nil(t, err)
72 assert.Equal(t, p, p2)
73
74 // PublicKey
75 pk := PublicKey(*p)
76 b = pk.Bytes()
77 assert.Equal(t, "e37648435c60dcd181b3d41d50857ba5b5abebe279429aa76558f6653f1658f200", hex.EncodeToString(b)) //nolint:lll
78 pk2, err := NewPublicKeyFromBytes(b)
79 assert.Nil(t, err)
80 assert.Equal(t, &pk, pk2)
81
82 // Signature
83 sig := Signature{
84 S: big.NewInt(9876),
85 F: p,
86 }
87 b = sig.Bytes()
88 assert.Equal(t, "9426000000000000000000000000000000000000000000000000000000000000e37648435c60dcd181b3d41d50857ba5b5abebe279429aa76558f6653f1658f200", hex.EncodeToString(b)) //nolint:lll
89 sig2, err := NewSignatureFromBytes(b)
90 assert.Nil(t, err)
91 assert.Equal(t, &sig, sig2)
92
93 // Signature with bigger values
94 s, ok := new(big.Int).SetString("43744879514016998261043792362491545206150700367692876136431010903034023684055", 10) //nolint:lll
95 require.True(t, ok)
96 x, ok := new(big.Int).SetString("56183217574518331862027285308947626162625485037257226169003339923450551228164", 10) //nolint:lll
97 require.True(t, ok)
98 y, ok := new(big.Int).SetString("62825693913681695979055350889339417157462875026935818721506450621762231021976", 10) //nolint:lll
99 require.True(t, ok)
100 sig = Signature{
101 S: s,
102 F: &Point{X: x, Y: y},
103 }
104 b = sig.Bytes()
105 assert.Equal(t, "d7a75050259cc06415f19bde5460a58325e3050806ba949d9ac9728b71b9b6607c369301ed99f1b2ea93f2e3083dd52a2ce8d1d3feca1ad31e78811900ba570400", hex.EncodeToString(b)) //nolint:lll
106 sig2, err = NewSignatureFromBytes(b)
107 assert.Nil(t, err)
108 assert.Equal(t, &sig, sig2)
109}
110
111func TestBytesUncompressed(t *testing.T) {
112 // Point
113 p := &Point{
114 X: big.NewInt(3),
115 Y: big.NewInt(3),
116 }
117 b := p.BytesUncompressed()
118 assert.Equal(t, "03000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000", hex.EncodeToString(b)) //nolint:lll
119 p2, err := NewPointFromBytesUncompressed(b)
120 assert.Nil(t, err)
121 assert.Equal(t, p, p2)
122
123 p = G.Mul(big.NewInt(1234))
124 b = p.BytesUncompressed()
125 assert.Equal(t, "f258163f65f65865a79a4279e2ebabb5a57b85501dd4b381d1dc605c434876e34c308bd3f18f062d5cc07f34948ced82f9a76f9c3e65ae64f158412da8e92e6d", hex.EncodeToString(b)) //nolint:lll
126 p2, err = NewPointFromBytesUncompressed(b)
127 assert.Nil(t, err)
128 assert.Equal(t, p, p2)
129
130 // PublicKey
131 pk := PublicKey(*p)
132 b = pk.BytesUncompressed()
133 assert.Equal(t, "f258163f65f65865a79a4279e2ebabb5a57b85501dd4b381d1dc605c434876e34c308bd3f18f062d5cc07f34948ced82f9a76f9c3e65ae64f158412da8e92e6d", hex.EncodeToString(b)) //nolint:lll
134 pk2, err := NewPublicKeyFromBytesUncompressed(b)
135 assert.Nil(t, err)
136 assert.Equal(t, &pk, pk2)
137
138 // Signature
139 sig := Signature{
140 S: big.NewInt(9876),
141 F: p,
142 }
143 b = sig.BytesUncompressed()
144 assert.Equal(t, "9426000000000000000000000000000000000000000000000000000000000000f258163f65f65865a79a4279e2ebabb5a57b85501dd4b381d1dc605c434876e34c308bd3f18f062d5cc07f34948ced82f9a76f9c3e65ae64f158412da8e92e6d", hex.EncodeToString(b)) //nolint:lll
145 sig2, err := NewSignatureFromBytesUncompressed(b)
146 assert.Nil(t, err)
147 assert.Equal(t, &sig, sig2)
148
149 // Signature with bigger values
150 s, ok := new(big.Int).SetString("43744879514016998261043792362491545206150700367692876136431010903034023684055", 10) //nolint:lll
151 require.True(t, ok)
152 x, ok := new(big.Int).SetString("56183217574518331862027285308947626162625485037257226169003339923450551228164", 10) //nolint:lll
153 require.True(t, ok)
154 y, ok := new(big.Int).SetString("62825693913681695979055350889339417157462875026935818721506450621762231021976", 10) //nolint:lll
155 require.True(t, ok)
156 sig = Signature{
157 S: s,
158 F: &Point{X: x, Y: y},
159 }
160 b = sig.BytesUncompressed()
161 assert.Equal(t, "d7a75050259cc06415f19bde5460a58325e3050806ba949d9ac9728b71b9b6600457ba001981781ed31acafed3d1e82c2ad53d08e3f293eab2f199ed0193367c98311f1894598c91f10fe415ba4a6d04e1351d07430631c7decdbbdb2615e68a", hex.EncodeToString(b)) //nolint:lll
162 sig2, err = NewSignatureFromBytesUncompressed(b)
163 assert.Nil(t, err)
164 assert.Equal(t, &sig, sig2)
165}
166
167func TestImportECDSApubKey(t *testing.T) {
168 // Generate an ECDSA key
169 k, err := crypto.GenerateKey()
170 assert.Nil(t, err)
171 // Import the ECDSA Public key bytes into a PublicKey type
172 pk, err := NewPublicKeyFromECDSA(crypto.FromECDSAPub(&k.PublicKey))
173 assert.Nil(t, err)
174 // Set the ECDSA Private key point as a blindsecp256k1 PrivateKey type
175 bk := PrivateKey(*k.D)
176 // Compare both public keys
177 assert.Equal(t, bk.Public().Bytes(), pk.Bytes())
178}