arnaucube
arnaucube/go-bellman-verifierPublic Self-hosted repository
go-bellman-verifier/verifier_test.go
verifier_test.goRaw
  1package bellmanverifier
  2
  3import (
  4	"io/ioutil"
  5	"testing"
  6
  7	"github.com/stretchr/testify/assert"
  8	"github.com/stretchr/testify/require"
  9)
 10
 11func TestParsePoints(t *testing.T) {
 12	aHex := []string{"0x2cdfab288afda1ba399d60951423e76445754b7d2e7827634732988373c8e0ff", "0x1bb2e3543dfdd373610db3ea82703bc70e4d6f01b5c0e10709e27545670824f4"}
 13	a, err := hexToG1(aHex)
 14	assert.Nil(t, err)
 15	assert.Equal(t, "bn256.G1(2cdfab288afda1ba399d60951423e76445754b7d2e7827634732988373c8e0ff, 1bb2e3543dfdd373610db3ea82703bc70e4d6f01b5c0e10709e27545670824f4)", a.String())
 16
 17	bHex := [][]string{
 18		[]string{
 19			"0x0f9cd75cae408d3b6d2731035dbb6aa6f66cf900c1d64b46510cbbcd7cf94f64",
 20			"0x165997362d7c2bf5672d16206fbee620ad8eb54f609b98c49c7c6287c9979077",
 21		},
 22		[]string{
 23			"0x0392982b7cd7bdbbee79d5f808c67ead8ef3e2347810b546b419da5f738aab92",
 24			"0x0f94d6781b9de113b86abd1930accd2260d0c979d520bc1a0e79dec3c8ce76a3",
 25		},
 26	}
 27	b, err := hexToG2(bHex)
 28	assert.Nil(t, err)
 29	assert.Equal(t, "bn256.G2((165997362d7c2bf5672d16206fbee620ad8eb54f609b98c49c7c6287c9979077, 0f9cd75cae408d3b6d2731035dbb6aa6f66cf900c1d64b46510cbbcd7cf94f64), (0f94d6781b9de113b86abd1930accd2260d0c979d520bc1a0e79dec3c8ce76a3, 0392982b7cd7bdbbee79d5f808c67ead8ef3e2347810b546b419da5f738aab92))", b.String())
 30
 31	gHex := [][]string{
 32		[]string{
 33			"0x2d0c4fa1239184802aeda1f206e49104940aa3eccc1b3e0141c25b2dba8e7caf",
 34			"0x15c9b1123841897787badbe858eb00943fc8a99454666f21acf4e79e13547471",
 35		},
 36		[]string{
 37			"0x256ad09ecb0abc15fd48f20c37d28ffcf0f8eb3b23cb10cdeee7365b598963ac",
 38			"0x2bc9bc381cf68badd992338c637b36b54936b69cb8560eaf5a8cbe2c20ff8522",
 39		},
 40	}
 41	g, err := hexToG2(gHex)
 42	assert.Nil(t, err)
 43	assert.Equal(t, "bn256.G2((15c9b1123841897787badbe858eb00943fc8a99454666f21acf4e79e13547471, 2d0c4fa1239184802aeda1f206e49104940aa3eccc1b3e0141c25b2dba8e7caf), (2bc9bc381cf68badd992338c637b36b54936b69cb8560eaf5a8cbe2c20ff8522, 256ad09ecb0abc15fd48f20c37d28ffcf0f8eb3b23cb10cdeee7365b598963ac))", g.String())
 44}
 45
 46func TestParseProof(t *testing.T) {
 47	proofJson, err := ioutil.ReadFile("testdata/proof0.json")
 48	require.Nil(t, err)
 49	vkJson, err := ioutil.ReadFile("testdata/vk0.json")
 50	require.Nil(t, err)
 51
 52	proof, err := ParseProofRaw(proofJson)
 53	require.Nil(t, err)
 54	vk, err := ParseVkRaw(vkJson)
 55	require.Nil(t, err)
 56
 57	assert.Equal(t, "bn256.G1(2cdfab288afda1ba399d60951423e76445754b7d2e7827634732988373c8e0ff, 1bb2e3543dfdd373610db3ea82703bc70e4d6f01b5c0e10709e27545670824f4)", proof.A.String())
 58	assert.Equal(t, "bn256.G1(0b710c2f32925ad4576f925e8c5954c7dace91437fd6bc3ded1d15b70990a885, 2cd6ea79e38ad566aceb09113e67142d278d12a76b49031ce1bde1dedca696b4)", proof.C.String())
 59	assert.Equal(t, "bn256.G1(0c0e14d07f2281c592952c72f86a7f5df7189ab6d00b84609ad777fbf062f38d, 2f60c0e4913ec4691bdf2dd9f2b5fed9b80a3267eec107b9f1d69418a19a30a8)", vk.Alpha.String())
 60	assert.Equal(t, "bn256.G2((2275d97dce5445433ec7bc6d01c35f0afad9afcf6f3350cd15eeef1023242c01, 0b5f21c2d981916cd5e1037b446b170b6c60dd184fdbb3381b7d0880fb48300d), (2c2a08a60032f536afbcb21c079b563cdce68b7ef906e973c52f574121a95df0, 1690100372c53776b60c0ee56926debb4d0acee90f7952ecc63861e0269a098a))", vk.Beta.String())
 61	assert.Equal(t, "bn256.G2((15c9b1123841897787badbe858eb00943fc8a99454666f21acf4e79e13547471, 2d0c4fa1239184802aeda1f206e49104940aa3eccc1b3e0141c25b2dba8e7caf), (2bc9bc381cf68badd992338c637b36b54936b69cb8560eaf5a8cbe2c20ff8522, 256ad09ecb0abc15fd48f20c37d28ffcf0f8eb3b23cb10cdeee7365b598963ac))", vk.Gamma.String())
 62}
 63
 64func TestVerify0(t *testing.T) {
 65	proofJson, err := ioutil.ReadFile("testdata/proof0.json")
 66	require.Nil(t, err)
 67	vkJson, err := ioutil.ReadFile("testdata/vk0.json")
 68	require.Nil(t, err)
 69	publicJson, err := ioutil.ReadFile("testdata/public0.json")
 70	require.Nil(t, err)
 71
 72	public, err := ParsePublicRaw(publicJson)
 73	require.Nil(t, err)
 74	proof, err := ParseProofRaw(proofJson)
 75	require.Nil(t, err)
 76	vk, err := ParseVkRaw(vkJson)
 77	require.Nil(t, err)
 78
 79	v := Verify(vk, proof, public)
 80	assert.True(t, v)
 81}
 82
 83func TestVerify1(t *testing.T) {
 84	proofJson, err := ioutil.ReadFile("testdata/proof1.json")
 85	require.Nil(t, err)
 86	vkJson, err := ioutil.ReadFile("testdata/vk1.json")
 87	require.Nil(t, err)
 88	publicJson, err := ioutil.ReadFile("testdata/public1.json")
 89	require.Nil(t, err)
 90
 91	public, err := ParsePublicRaw(publicJson)
 92	require.Nil(t, err)
 93	proof, err := ParseProofRaw(proofJson)
 94	require.Nil(t, err)
 95	vk, err := ParseVkRaw(vkJson)
 96	require.Nil(t, err)
 97
 98	v := Verify(vk, proof, public)
 99	assert.True(t, v)
100}
101
102func BenchmarkVerify(b *testing.B) {
103	proofJson, err := ioutil.ReadFile("testdata/proof0.json")
104	require.Nil(b, err)
105	vkJson, err := ioutil.ReadFile("testdata/vk0.json")
106	require.Nil(b, err)
107	publicJson, err := ioutil.ReadFile("testdata/public0.json")
108	require.Nil(b, err)
109
110	public, err := ParsePublicRaw(publicJson)
111	require.Nil(b, err)
112	proof, err := ParseProofRaw(proofJson)
113	require.Nil(b, err)
114	vk, err := ParseVkRaw(vkJson)
115	require.Nil(b, err)
116
117	for i := 0; i < b.N; i++ {
118		Verify(vk, proof, public)
119	}
120}