arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
go-circom-prover-verifier/verifier/verifier_test.go
verifier/verifier_test.goRaw
 1package verifier
 2
 3import (
 4	"io/ioutil"
 5	"testing"
 6
 7	"github.com/iden3/go-circom-prover-verifier/parsers"
 8
 9	"github.com/stretchr/testify/assert"
10	"github.com/stretchr/testify/require"
11)
12
13func TestVerify(t *testing.T) {
14	testVerifyCircuit(t, "circuit1k")
15	testVerifyCircuit(t, "circuit5k")
16	// testVerifyCircuit(t, "circuit10k")
17	// testVerifyCircuit(t, "circuit20k")
18}
19
20func testVerifyCircuit(t *testing.T, circuit string) {
21	proofJson, err := ioutil.ReadFile("../testdata/" + circuit + "/proof.json")
22	require.Nil(t, err)
23	vkJson, err := ioutil.ReadFile("../testdata/" + circuit + "/verification_key.json")
24	require.Nil(t, err)
25	publicJson, err := ioutil.ReadFile("../testdata/" + circuit + "/public.json")
26	require.Nil(t, err)
27
28	public, err := parsers.ParsePublicSignals(publicJson)
29	require.Nil(t, err)
30	proof, err := parsers.ParseProof(proofJson)
31	require.Nil(t, err)
32	vk, err := parsers.ParseVk(vkJson)
33	require.Nil(t, err)
34
35	v := Verify(vk, proof, public)
36	assert.True(t, v)
37
38	// Verify again to check that `Verify` hasn't mutated the inputs
39	v = Verify(vk, proof, public)
40	assert.True(t, v)
41}
42
43func BenchmarkVerify(b *testing.B) {
44	// benchmark with circuit2 (10000 constraints)
45	proofJson, err := ioutil.ReadFile("../testdata/circuit2/proof.json")
46	require.Nil(b, err)
47	vkJson, err := ioutil.ReadFile("../testdata/circuit2/verification_key.json")
48	require.Nil(b, err)
49	publicJson, err := ioutil.ReadFile("../testdata/circuit2/public.json")
50	require.Nil(b, err)
51
52	public, err := parsers.ParsePublicSignals(publicJson)
53	require.Nil(b, err)
54	proof, err := parsers.ParseProof(proofJson)
55	require.Nil(b, err)
56	vk, err := parsers.ParseVk(vkJson)
57	require.Nil(b, err)
58
59	for i := 0; i < b.N; i++ {
60		Verify(vk, proof, public)
61	}
62}