go-blindsecp256k1/blindsecp256k1_test.go
blindsecp256k1_test.goRaw
1package blindsecp256k1
2
3import (
4 "encoding/json"
5 "math/big"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10)
11
12func TestFlow(t *testing.T) {
13 // signer: create new signer key pair
14 sk := NewPrivateKey()
15 signerPubK := sk.Public()
16
17 // signer: when user requests new R parameter to blind a new msg,
18 // create new signerR (public) with its secret k
19 k, signerR := NewRequestParameters()
20
21 // user: blinds the msg using signer's R
22 msg := new(big.Int).SetBytes([]byte("test"))
23 msgBlinded, userSecretData := Blind(msg, signerR)
24
25 // signer: signs the blinded message using its private key & secret k
26 sBlind := sk.BlindSign(msgBlinded, k)
27
28 // user: unblinds the blinded signature
29 sig := Unblind(sBlind, msg, userSecretData)
30
31 // signature can be verified with signer PublicKey
32 verified := Verify(msg, sig, signerPubK)
33 assert.True(t, verified)
34}
35
36func TestMarshalers(t *testing.T) {
37 // Point
38 p := G.Mul(big.NewInt(1234))
39 b, err := json.Marshal(p)
40 require.Nil(t, err)
41 assert.Equal(t,
42 `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll
43 string(b))
44
45 var p2 *Point
46 err = json.Unmarshal(b, &p2)
47 require.Nil(t, err)
48 assert.Equal(t, p, p2)
49
50 // PublicKey
51 pk := PublicKey(*p)
52 b, err = json.Marshal(pk)
53 require.Nil(t, err)
54 assert.Equal(t,
55 `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll
56 string(b))
57
58 var pk2 PublicKey
59 err = json.Unmarshal(b, &pk2)
60 require.Nil(t, err)
61 assert.Equal(t, pk, pk2)
62
63 // Signature
64 sig := Signature{
65 S: big.NewInt(9876),
66 F: p,
67 }
68 b, err = json.Marshal(sig)
69 require.Nil(t, err)
70 assert.Equal(t,
71 `{"s":"9876","f":{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}}`, //nolint:lll
72 string(b))
73
74 var sig2 Signature
75 err = json.Unmarshal(b, &sig2)
76 require.Nil(t, err)
77 assert.Equal(t, sig, sig2)
78}