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