arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
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}