arnaucube
arnaucube/go-blindsecp256k1Public Self-hosted repository
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}