circom-compat/tests/groth16.rs
tests/groth16.rsRaw
1use ark_circom::{CircomBuilder, CircuitConfig};
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 = CircuitConfig::<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, ¶ms, &mut rng)?;
31
32 let pvk = prepare_verifying_key(¶ms.vk);
33
34 let verified = verify_proof(&pvk, &proof, &inputs)?;
35
36 assert!(verified);
37
38 Ok(())
39}