go-blindsecp256k1/blindsecp256k1_test.go
blindsecp256k1_test.goRaw
1package blindsecp256k1
2
3import (
4 "math/big"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10func TestFlow(t *testing.T) {
11 // signer: create new signer key pair
12 sk := NewPrivateKey()
13 signerPubK := sk.Public()
14
15 // signer: when user requests new R parameter to blind a new msg,
16 // create new signerR (public) with its secret k
17 k, signerR := NewRequestParameters()
18
19 // user: blinds the msg using signer's R
20 msg := new(big.Int).SetBytes([]byte("test"))
21 msgBlinded, userSecretData := Blind(msg, signerR)
22
23 // signer: signs the blinded message using its private key & secret k
24 sBlind := sk.BlindSign(msgBlinded, k)
25
26 // user: unblinds the blinded signature
27 sig := Unblind(sBlind, userSecretData)
28 sigB := sig.Bytes()
29 sig2, err := NewSignatureFromBytes(sigB)
30 assert.Nil(t, err)
31 assert.Equal(t, sig, sig2)
32
33 // signature can be verified with signer PublicKey
34 verified := Verify(msg, sig, signerPubK)
35 assert.True(t, verified)
36}