package blindsecp256k1 import ( "encoding/json" "math/big" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestFlow(t *testing.T) { // signer: create new signer key pair sk := NewPrivateKey() signerPubK := sk.Public() // signer: when user requests new R parameter to blind a new msg, // create new signerR (public) with its secret k k, signerR := NewRequestParameters() // user: blinds the msg using signer's R msg := new(big.Int).SetBytes([]byte("test")) msgBlinded, userSecretData := Blind(msg, signerR) // signer: signs the blinded message using its private key & secret k sBlind := sk.BlindSign(msgBlinded, k) // user: unblinds the blinded signature sig := Unblind(sBlind, msg, userSecretData) // signature can be verified with signer PublicKey verified := Verify(msg, sig, signerPubK) assert.True(t, verified) } func TestMarshalers(t *testing.T) { // Point p := G.Mul(big.NewInt(1234)) b, err := json.Marshal(p) require.Nil(t, err) assert.Equal(t, `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll string(b)) var p2 *Point err = json.Unmarshal(b, &p2) require.Nil(t, err) assert.Equal(t, p, p2) // PublicKey pk := PublicKey(*p) b, err = json.Marshal(pk) require.Nil(t, err) assert.Equal(t, `{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}`, //nolint:lll string(b)) var pk2 PublicKey err = json.Unmarshal(b, &pk2) require.Nil(t, err) assert.Equal(t, pk, pk2) // Signature sig := Signature{ S: big.NewInt(9876), F: p, } b, err = json.Marshal(sig) require.Nil(t, err) assert.Equal(t, `{"s":"9876","f":{"x":"102884003323827292915668239759940053105992008087520207150474896054185180420338","y":"49384988101491619794462775601349526588349137780292274540231125201115197157452"}}`, //nolint:lll string(b)) var sig2 Signature err = json.Unmarshal(b, &sig2) require.Nil(t, err) assert.Equal(t, sig, sig2) }