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