go-blindsecp256k1/v0/blindsecp256k1v0_test.go
v0/blindsecp256k1v0_test.goRaw
1package blindsecp256k1v0
2
3import (
4 "math/big"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9)
10
11func TestFlow(t *testing.T) {
12 // signer: create new signer key pair
13 sk, err := NewPrivateKey()
14 require.Nil(t, err)
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, err := NewRequestParameters()
20 require.Nil(t, err)
21
22 // user: blinds the msg using signer's R
23 msg := new(big.Int).SetBytes([]byte("test"))
24 msgBlinded, userSecretData, err := Blind(msg, signerPubK, signerR)
25 require.Nil(t, err)
26
27 // signer: signs the blinded message using its private key & secret k
28 sBlind := sk.BlindSign(msgBlinded, k)
29
30 // user: unblinds the blinded signature
31 sig := Unblind(sBlind, userSecretData)
32
33 // signature can be verified with signer PublicKey (Q)
34 verified := Verify(msg, sig, signerPubK)
35 assert.True(t, verified)
36}