arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
go-circom-prover-verifier/README.md
README.mdRaw
 1# go-circom-prover-verifier [![GoDoc](https://godoc.org/github.com/iden3/go-circom-prover-verifier?status.svg)](https://godoc.org/github.com/iden3/go-circom-prover-verifier) [![Go Report Card](https://goreportcard.com/badge/github.com/iden3/go-circom-prover-verifier)](https://goreportcard.com/report/github.com/iden3/go-circom-prover-verifier) [![Test](https://github.com/iden3/go-circom-prover-verifier/workflows/Test/badge.svg)](https://github.com/iden3/go-circom-prover-verifier/actions?query=workflow%3ATest)
 2
 3Go implementation of the [Groth16 protocol](https://eprint.iacr.org/2016/260.pdf) zkSNARK prover & verifier compatible with [circom](https://github.com/iden3/circom).
 4
 5
 6Using [bn256](https://github.com/ethereum/go-ethereum/tree/master/crypto/bn256/cloudflare) (used by [go-ethereum](https://github.com/ethereum/go-ethereum)) for the Pairing curve operations.
 7
 8### Example
 9
10- Generate Proof
11```go
12import (
13  "github.com/iden3/go-circom-prover-verifier/parsers"
14  "github.com/iden3/go-circom-prover-verifier/prover"
15  "github.com/iden3/go-circom-prover-verifier/verifier"
16)
17
18[...]
19
20// read ProvingKey & Witness files
21provingKeyJson, _ := ioutil.ReadFile("../testdata/small/proving_key.json")
22witnessJson, _ := ioutil.ReadFile("../testdata/small/witness.json")
23
24// parse Proving Key
25pk, _ := parsers.ParsePk(provingKeyJson)
26
27// parse Witness
28w, _ := parsers.ParseWitness(witnessJson)
29
30// generate the proof
31proof, pubSignals, _ := prover.GenerateProof(pk, w)
32
33// print proof & publicSignals
34proofStr, _ := parsers.ProofToJson(proof)
35publicStr, _ := json.Marshal(parsers.ArrayBigIntToString(pubSignals))
36fmt.Println(proofStr)
37fmt.Println(publicStr)
38```
39
40- Verify Proof
41```go
42// read proof & verificationKey & publicSignals
43proofJson, _ := ioutil.ReadFile("../testdata/big/proof.json")
44vkJson, _ := ioutil.ReadFile("../testdata/big/verification_key.json")
45publicJson, _ := ioutil.ReadFile("../testdata/big/public.json")
46
47// parse proof & verificationKey & publicSignals
48public, _ := parsers.ParsePublicSignals(publicJson)
49proof, _ := parsers.ParseProof(proofJson)
50vk, _ := parsers.ParseVk(vkJson)
51
52// verify the proof with the given verificationKey & publicSignals
53v := verifier.Verify(vk, proof, public)
54fmt.Println(v)
55```
56
57## CLI
58
59From the `cli` directory:
60
61- Show options
62```
63> go run cli.go -help
64go-circom-prover-verifier
65                 v0.0.1
66Usage of /tmp/go-build620318239/b001/exe/cli:
67  -proof string
68        proof path (default "proof.json")
69  -prove
70        prover mode
71  -provingkey string
72        provingKey path (default "proving_key.json")
73  -public string
74        public signals path (default "public.json")
75  -verificationkey string
76        verificationKey path (default "verification_key.json")
77  -verify
78        verifier mode
79  -witness string
80        witness path (default "witness.json")
81```
82
83- Prove
84```
85> go run cli.go -prove -provingkey=../testdata/circuit5k/proving_key.json -witness=../testdata/circuit5k/witness.json
86```
87- Verify
88```
89> go run cli.go -verify -verificationkey=../testdata/circuit5k/verification_key.json
90```