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