arnaucube
arnaucube/circom-compatPublic Self-hosted repository
circom-compat/tests/groth16.rs
tests/groth16.rsRaw
 1use ark_circom::{CircomBuilder, CircomConfig};
 2use ark_std::rand::thread_rng;
 3use color_eyre::Result;
 4
 5use ark_bn254::Bn254;
 6use ark_groth16::{
 7    create_random_proof as prove, generate_random_parameters, prepare_verifying_key, verify_proof,
 8};
 9
10#[test]
11fn groth16_proof() -> Result<()> {
12    let cfg = CircomConfig::<Bn254>::new(
13        "./test-vectors/mycircuit.wasm",
14        "./test-vectors/mycircuit.r1cs",
15    )?;
16    let mut builder = CircomBuilder::new(cfg);
17    builder.push_input("a", 3);
18    builder.push_input("b", 11);
19
20    // create an empty instance for setting it up
21    let circom = builder.setup();
22
23    let mut rng = thread_rng();
24    let params = generate_random_parameters::<Bn254, _, _>(circom, &mut rng)?;
25
26    let circom = builder.build()?;
27
28    let inputs = circom.get_public_inputs().unwrap();
29
30    let proof = prove(circom, &params, &mut rng)?;
31
32    let pvk = prepare_verifying_key(&params.vk);
33
34    let verified = verify_proof(&pvk, &proof, &inputs)?;
35
36    assert!(verified);
37
38    Ok(())
39}