import std/strutils import std/times import std/options import std/random import std/syncio import taskpools import constantine/named/properties_fields # import groth16/bn128 import groth16/zkey_types import groth16/files/witness import groth16/misc import groth16/files/export_json import groth16/partial/types import groth16/partial/precalc import groth16/partial/finish import groth16/prover import groth16/prover/shared import groth16/verifier #------------------------------------------------------------------------------- #[ proc testProveAndVerify*( zkey_fname, wtns_fname: string): (VKey,Proof) = echo("parsing witness & zkey files...") let witness = parseWitness( wtns_fname) let zkey = parseZKey( zkey_fname) echo("generating proof...") let start = cpuTime() let proof = generateProof( zkey, witness ) let elapsed = cpuTime() - start echo("proving took ",seconds(elapsed)) echo("verifying the proof...") let vkey = extractVKey( zkey) let ok = verifyProof( vkey, proof ) echo("verification succeeded = ",ok) return (vkey,proof) ]# #------------------------------------------------------------------------------- proc sanityCheckPartialProofs*( zkey: ZKey, wtns: Witness, pool: Taskpool, printTimings: bool) = let witness = wtns.values let M = witness.len var partial_mask: seq[bool] = newSeq[bool]( M ) var partial_witness: seq[Option[Fr[BN254_Snarks]]] = newSeq[Option[Fr[BN254_Snarks]]]( M ) # generate randomized partial witness partial_mask[0] = true partial_witness[0] = some(witness[0]) var count = 0 for i in 1..