go-circom-prover-verifier/README.md
README.mdRaw
1# go-circom-prover-verifier [](https://godoc.org/github.com/iden3/go-circom-prover-verifier) [](https://goreportcard.com/report/github.com/iden3/go-circom-prover-verifier) [](https://github.com/iden3/go-circom-prover-verifier/actions?query=workflow%3ATest)
2
3Experimental Go 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
12// read ProvingKey & Witness files
13provingKeyJson, _ := ioutil.ReadFile("../testdata/small/proving_key.json")
14witnessJson, _ := ioutil.ReadFile("../testdata/small/witness.json")
15
16// parse Proving Key
17pk, _ := parsers.ParsePk(provingKeyJson)
18
19// parse Witness
20w, _ := parsers.ParseWitness(witnessJson)
21
22// generate the proof
23proof, pubSignals, _ := GenerateProof(pk, w)
24
25// print proof & publicSignals
26proofStr, _ := parsers.ProofToJson(proof)
27publicStr, _ := json.Marshal(parsers.ArrayBigIntToString(pubSignals))
28fmt.Println(proofStr)
29fmt.Println(publicStr)
30```
31
32- Verify Proof
33```go
34// read proof & verificationKey & publicSignals
35proofJson, _ := ioutil.ReadFile("../testdata/big/proof.json")
36vkJson, _ := ioutil.ReadFile("../testdata/big/verification_key.json")
37publicJson, _ := ioutil.ReadFile("../testdata/big/public.json")
38
39// parse proof & verificationKey & publicSignals
40public, _ := parsers.ParsePublicSignals(publicJson)
41proof, _ := parsers.ParseProof(proofJson)
42vk, _ := parsers.ParseVk(vkJson)
43
44// verify the proof with the given verificationKey & publicSignals
45v := Verify(vk, proof, public)
46fmt.Println(v)
47```
48
49## CLI
50
51From the `cli` directory:
52
53- Show options
54```
55> go run cli.go -help
56go-circom-prover-verifier
57 v0.0.1
58Usage of /tmp/go-build620318239/b001/exe/cli:
59 -proof string
60 proof path (default "proof.json")
61 -prove
62 prover mode
63 -provingkey string
64 provingKey path (default "proving_key.json")
65 -public string
66 public signals path (default "public.json")
67 -verificationkey string
68 verificationKey path (default "verification_key.json")
69 -verify
70 verifier mode
71 -witness string
72 witness path (default "witness.json")
73```
74
75- Prove
76```
77> go run cli.go -prove -provingkey=../testdata/small/proving_key.json -witness=../testdata/small/witness.json
78```
79- Verify
80```
81> go run cli.go -verify -verificationkey=../testdata/small/verification_key.json
82```