go-circom-prover-verifier/prover/prover_test.go
prover/prover_test.goRaw
1package prover
2
3import (
4 "encoding/json"
5 "io/ioutil"
6 "math/big"
7 "testing"
8
9 "github.com/iden3/go-circom-prover-verifier/parsers"
10 "github.com/iden3/go-circom-prover-verifier/types"
11 "github.com/iden3/go-circom-prover-verifier/verifier"
12 "github.com/stretchr/testify/assert"
13 "github.com/stretchr/testify/require"
14)
15
16func TestSmallCircuitGenerateProf(t *testing.T) {
17 provingKeyJson, err := ioutil.ReadFile("../testdata/small/proving_key.json")
18 require.Nil(t, err)
19 pk, err := parsers.ParsePk(provingKeyJson)
20 require.Nil(t, err)
21
22 witnessJson, err := ioutil.ReadFile("../testdata/small/witness.json")
23 require.Nil(t, err)
24 w, err := parsers.ParseWitness(witnessJson)
25 require.Nil(t, err)
26
27 assert.Equal(t, types.Witness{big.NewInt(1), big.NewInt(33), big.NewInt(3), big.NewInt(11)}, w)
28
29 proof, pubSignals, err := GenerateProof(pk, w)
30 assert.Nil(t, err)
31
32 proofStr, err := parsers.ProofToJson(proof)
33 assert.Nil(t, err)
34
35 err = ioutil.WriteFile("../testdata/small/proof.json", proofStr, 0644)
36 assert.Nil(t, err)
37 publicStr, err := json.Marshal(parsers.ArrayBigIntToString(pubSignals))
38 assert.Nil(t, err)
39 err = ioutil.WriteFile("../testdata/small/public.json", publicStr, 0644)
40 assert.Nil(t, err)
41
42 // verify the proof
43 vkJson, err := ioutil.ReadFile("../testdata/small/verification_key.json")
44 require.Nil(t, err)
45 vk, err := parsers.ParseVk(vkJson)
46 require.Nil(t, err)
47
48 v := verifier.Verify(vk, proof, pubSignals)
49 assert.True(t, v)
50
51 // to verify the proof with snarkjs:
52 // snarkjs verify --vk testdata/small/verification_key.json -p testdata/small/proof.json --pub testdata/small/public.json
53}
54
55func TestBigCircuitGenerateProf(t *testing.T) {
56 provingKeyJson, err := ioutil.ReadFile("../testdata/big/proving_key.json")
57 require.Nil(t, err)
58 pk, err := parsers.ParsePk(provingKeyJson)
59 require.Nil(t, err)
60
61 witnessJson, err := ioutil.ReadFile("../testdata/big/witness.json")
62 require.Nil(t, err)
63 w, err := parsers.ParseWitness(witnessJson)
64 require.Nil(t, err)
65
66 proof, pubSignals, err := GenerateProof(pk, w)
67 assert.Nil(t, err)
68
69 proofStr, err := parsers.ProofToJson(proof)
70 assert.Nil(t, err)
71
72 err = ioutil.WriteFile("../testdata/big/proof.json", proofStr, 0644)
73 assert.Nil(t, err)
74 publicStr, err := json.Marshal(parsers.ArrayBigIntToString(pubSignals))
75 assert.Nil(t, err)
76 err = ioutil.WriteFile("../testdata/big/public.json", publicStr, 0644)
77 assert.Nil(t, err)
78
79 // verify the proof
80 vkJson, err := ioutil.ReadFile("../testdata/big/verification_key.json")
81 require.Nil(t, err)
82 vk, err := parsers.ParseVk(vkJson)
83 require.Nil(t, err)
84
85 v := verifier.Verify(vk, proof, pubSignals)
86 assert.True(t, v)
87
88 // to verify the proof with snarkjs:
89 // snarkjs verify --vk testdata/big/verification_key.json -p testdata/big/proof.json --pub testdata/big/public.json
90}
91
92func BenchmarkGenerateProof(b *testing.B) {
93 provingKeyJson, err := ioutil.ReadFile("../testdata/big/proving_key.json")
94 require.Nil(b, err)
95 pk, err := parsers.ParsePk(provingKeyJson)
96 require.Nil(b, err)
97
98 witnessJson, err := ioutil.ReadFile("../testdata/big/witness.json")
99 require.Nil(b, err)
100 w, err := parsers.ParseWitness(witnessJson)
101 require.Nil(b, err)
102
103 for i := 0; i < b.N; i++ {
104 GenerateProof(pk, w)
105 }
106}