2023-11-11 13:35:13 +01:00
|
|
|
|
|
|
|
|
import ./groth16
|
|
|
|
|
import ./witness
|
2023-11-13 19:40:15 +01:00
|
|
|
import ./r1cs
|
2023-11-11 13:35:13 +01:00
|
|
|
import ./zkey
|
|
|
|
|
import ./zkey_types
|
2023-11-13 19:40:15 +01:00
|
|
|
import ./fake_setup
|
2023-11-11 13:35:13 +01:00
|
|
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
|
|
2023-11-11 14:37:31 +01:00
|
|
|
proc testProveAndVerify*( zkey_fname, wtns_fname: string): Proof =
|
2023-11-11 13:35:13 +01:00
|
|
|
|
|
|
|
|
echo("parsing witness & zkey files...")
|
|
|
|
|
let witness = parseWitness( wtns_fname)
|
|
|
|
|
let zkey = parseZKey( zkey_fname)
|
|
|
|
|
|
2023-11-13 19:40:15 +01:00
|
|
|
# printCoeffs(zkey.coeffs)
|
|
|
|
|
|
2023-11-11 13:35:13 +01:00
|
|
|
echo("generating proof...")
|
2023-11-11 14:37:31 +01:00
|
|
|
let vkey = extractVKey( zkey)
|
|
|
|
|
let proof = generateProof( zkey, witness )
|
2023-11-11 13:35:13 +01:00
|
|
|
|
|
|
|
|
echo("verifying the proof...")
|
2023-11-13 19:40:15 +01:00
|
|
|
let ok = verifyProof( vkey, proof )
|
2023-11-11 13:35:13 +01:00
|
|
|
echo("verification succeeded = ",ok)
|
|
|
|
|
|
2023-11-11 14:37:31 +01:00
|
|
|
return proof
|
|
|
|
|
|
2023-11-11 13:35:13 +01:00
|
|
|
#-------------------------------------------------------------------------------
|
2023-11-13 19:40:15 +01:00
|
|
|
|
|
|
|
|
proc testFakeSetupAndVerify*( r1cs_fname, wtns_fname: string, flavour=Snarkjs): Proof =
|
|
|
|
|
echo("trusted setup flavour = ",flavour)
|
|
|
|
|
|
|
|
|
|
echo("parsing witness & r1cs files...")
|
|
|
|
|
let witness = parseWitness( wtns_fname)
|
|
|
|
|
let r1cs = parseR1CS( r1cs_fname)
|
|
|
|
|
|
|
|
|
|
echo("performing fake trusted setup...")
|
|
|
|
|
let zkey = createFakeCircuitSetup( r1cs, flavour=flavour )
|
|
|
|
|
|
|
|
|
|
# printCoeffs(zkey.coeffs)
|
|
|
|
|
|
|
|
|
|
echo("generating proof...")
|
|
|
|
|
let vkey = extractVKey( zkey)
|
|
|
|
|
let proof = generateProof( zkey, witness )
|
|
|
|
|
|
|
|
|
|
echo("verifying the proof...")
|
|
|
|
|
let ok = verifyProof( vkey, proof )
|
|
|
|
|
echo("verification succeeded = ",ok)
|
|
|
|
|
|
|
|
|
|
return proof
|