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 TestImportECDSApubKey(t *testing.T) {
112 // Generate an ECDSA key
113 k, err := crypto.GenerateKey()
114 assert.Nil(t, err)
115 // Import the ECDSA Public key bytes into a PublicKey type
116 pk, err := NewPublicKeyFromECDSA(crypto.FromECDSAPub(&k.PublicKey))
117 assert.Nil(t, err)
118 // Set the ECDSA Private key point as a blindsecp256k1 PrivateKey type
119 bk := PrivateKey(*k.D)
120 // Compare both public keys
121 assert.Equal(t, bk.Public().Bytes(), pk.Bytes())
122}