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}