From f5370057bd4b6cb75724be802cee1a78192262df Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Sun, 4 Mar 2018 19:41:59 -0700 Subject: [PATCH] Test deserialization of proofs in MiMC test example. --- tests/mimc.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/mimc.rs b/tests/mimc.rs index 614e765..d6ff72b 100644 --- a/tests/mimc.rs +++ b/tests/mimc.rs @@ -28,6 +28,7 @@ use bellman::{ // We're going to use the Groth16 proving system. use bellman::groth16::{ + Proof, generate_random_parameters, prepare_verifying_key, create_random_proof, @@ -165,7 +166,8 @@ impl<'a, E: Engine> Circuit for MiMCDemo<'a, E> { } } -fn main() { +#[test] +fn test_mimc() { // This may not be cryptographically safe, use // `OsRng` (for example) in production software. let rng = &mut thread_rng(); @@ -196,14 +198,20 @@ fn main() { let mut total_proving = Duration::new(0, 0); let mut total_verifying = Duration::new(0, 0); + // Just a place to put the proof data, so we can + // benchmark deserialization. + let mut proof_vec = vec![]; + for _ in 0..SAMPLES { // Generate a random preimage and compute the image let xl = rng.gen(); let xr = rng.gen(); let image = mimc::(xl, xr, &constants); + proof_vec.truncate(0); + let start = Instant::now(); - let proof = { + { // Create an instance of our circuit (with the // witness) let c = MiMCDemo { @@ -213,11 +221,15 @@ fn main() { }; // Create a groth16 proof with our parameters. - create_random_proof(c, ¶ms, rng).unwrap() - }; + let proof = create_random_proof(c, ¶ms, rng).unwrap(); + + proof.write(&mut proof_vec).unwrap(); + } + total_proving += start.elapsed(); let start = Instant::now(); + let proof = Proof::read(&proof_vec[..]).unwrap(); // Check the proof assert!(verify_proof( &pvk,