arnaucube
arnaucube/go-circom-prover-verifierPublic Self-hosted repository
Update proof sync.WaitGroup scooped variables & Add time prints in cli proof generation
arnaucube root@arnaucube.com
Sun, 26 Apr 2020 21:20:41 +0200
commit

5b77df54b7df9b16d20e2235523b87f007005f7a

parent

36917850547a4ee02b4e4583dc3ad216c226bc0a

2 files changed, 27 insertions(+), 20 deletions(-)

jump to
M cli/cli.go → cli/cli.go

@@ -5,6 +5,7 @@ "encoding/json"

"flag" "fmt" "io/ioutil" + "time" "github.com/iden3/go-circom-prover-verifier/parsers" "github.com/iden3/go-circom-prover-verifier/prover"

@@ -46,6 +47,8 @@ }

func cmdProve(provingKeyPath, witnessPath, proofPath, publicPath string) error { fmt.Println("zkSNARK Groth16 prover") + + fmt.Println("Reading proving key file:", provingKeyPath) provingKeyJson, err := ioutil.ReadFile(provingKeyPath) if err != nil { return err

@@ -55,6 +58,7 @@ if err != nil {

return err } + fmt.Println("Reading witness file:", witnessPath) witnessJson, err := ioutil.ReadFile(witnessPath) if err != nil { return err

@@ -64,10 +68,13 @@ if err != nil {

return err } + fmt.Println("Generating the proof") + beforeT := time.Now() proof, pubSignals, err := prover.GenerateProof(pk, w) if err != nil { return err } + fmt.Println("proof generation time elapsed:", time.Since(beforeT)) proofStr, err := parsers.ProofToJson(proof) if err != nil {
M prover/prover.go → prover/prover.go

@@ -73,39 +73,39 @@ proof.B = new(bn256.G2).ScalarBaseMult(big.NewInt(0))

proof.C = new(bn256.G1).ScalarBaseMult(big.NewInt(0)) proofBG1 := new(bn256.G1).ScalarBaseMult(big.NewInt(0)) - var waitGroup sync.WaitGroup - waitGroup.Add(4) - go func(wg *sync.WaitGroup) { + var wg sync.WaitGroup + wg.Add(4) + go func() { for i := 0; i < pk.NVars; i++ { proof.A = new(bn256.G1).Add(proof.A, new(bn256.G1).ScalarMult(pk.A[i], w[i])) } wg.Done() - }(&waitGroup) - go func(wg *sync.WaitGroup) { + }() + go func() { for i := 0; i < pk.NVars; i++ { proof.B = new(bn256.G2).Add(proof.B, new(bn256.G2).ScalarMult(pk.B2[i], w[i])) } wg.Done() - }(&waitGroup) - go func(wg *sync.WaitGroup) { + }() + go func() { for i := 0; i < pk.NVars; i++ { proofBG1 = new(bn256.G1).Add(proofBG1, new(bn256.G1).ScalarMult(pk.B1[i], w[i])) } wg.Done() - }(&waitGroup) - go func(wg *sync.WaitGroup) { + }() + go func() { for i := pk.NPublic + 1; i < pk.NVars; i++ { proof.C = new(bn256.G1).Add(proof.C, new(bn256.G1).ScalarMult(pk.C[i], w[i])) } wg.Done() - }(&waitGroup) - waitGroup.Wait() + }() + wg.Wait() h := calculateH(pk, w) - var waitGroup2 sync.WaitGroup - waitGroup2.Add(2) - go func(wg *sync.WaitGroup) { + var wg2 sync.WaitGroup + wg2.Add(2) + go func() { proof.A = new(bn256.G1).Add(proof.A, pk.VkAlpha1) proof.A = new(bn256.G1).Add(proof.A, new(bn256.G1).ScalarMult(pk.VkDelta1, r))

@@ -114,15 +114,15 @@ proof.B = new(bn256.G2).Add(proof.B, new(bn256.G2).ScalarMult(pk.VkDelta2, s))

proofBG1 = new(bn256.G1).Add(proofBG1, pk.VkBeta1) proofBG1 = new(bn256.G1).Add(proofBG1, new(bn256.G1).ScalarMult(pk.VkDelta1, s)) - wg.Done() - }(&waitGroup2) - go func(wg *sync.WaitGroup) { + wg2.Done() + }() + go func() { for i := 0; i < len(h); i++ { proof.C = new(bn256.G1).Add(proof.C, new(bn256.G1).ScalarMult(pk.HExps[i], h[i])) } - wg.Done() - }(&waitGroup2) - waitGroup2.Wait() + wg2.Done() + }() + wg2.Wait() proof.C = new(bn256.G1).Add(proof.C, new(bn256.G1).ScalarMult(proof.A, s)) proof.C = new(bn256.G1).Add(proof.C, new(bn256.G1).ScalarMult(proofBG1, r))