arnaucube
arnaucube/testudoPublic Self-hosted repository
testudo/benches/nizk.rs
benches/nizk.rsRaw
 1extern crate byteorder;
 2extern crate core;
 3extern crate criterion;
 4extern crate digest;
 5extern crate libspartan;
 6extern crate merlin;
 7extern crate rand;
 8extern crate sha3;
 9
10use libspartan::r1csinstance::R1CSInstance;
11use libspartan::spartan::{NIZKGens, NIZK};
12use merlin::Transcript;
13
14use criterion::*;
15
16fn nizk_prove_benchmark(c: &mut Criterion) {
17  for &s in [10, 12, 16].iter() {
18    let plot_config = PlotConfiguration::default().summary_scale(AxisScale::Logarithmic);
19    let mut group = c.benchmark_group("NIZK_prove_benchmark");
20    group.plot_config(plot_config);
21
22    let num_vars = (2 as usize).pow(s as u32);
23    let num_cons = num_vars;
24    let num_inputs = 10;
25
26    let (inst, vars, input) = R1CSInstance::produce_synthetic_r1cs(num_cons, num_vars, num_inputs);
27    let n = inst.get_num_vars();
28
29    let gens = NIZKGens::new(num_cons, num_vars);
30
31    let name = format!("NIZK_prove_{}", n);
32    group.bench_function(&name, move |b| {
33      b.iter(|| {
34        let mut prover_transcript = Transcript::new(b"example");
35        NIZK::prove(
36          black_box(&inst),
37          black_box(vars.clone()),
38          black_box(&input),
39          black_box(&gens),
40          black_box(&mut prover_transcript),
41        );
42      });
43    });
44    group.finish();
45  }
46}
47
48fn nizk_verify_benchmark(c: &mut Criterion) {
49  for &s in [10, 12, 16].iter() {
50    let plot_config = PlotConfiguration::default().summary_scale(AxisScale::Logarithmic);
51    let mut group = c.benchmark_group("NIZK_verify_benchmark");
52    group.plot_config(plot_config);
53
54    let num_vars = (2 as usize).pow(s as u32);
55    let num_cons = num_vars;
56    let num_inputs = 10;
57    let (inst, vars, input) = R1CSInstance::produce_synthetic_r1cs(num_cons, num_vars, num_inputs);
58    let n = inst.get_num_vars();
59
60    let gens = NIZKGens::new(num_cons, num_vars);
61
62    // produce a proof of satisfiability
63    let mut prover_transcript = Transcript::new(b"example");
64    let proof = NIZK::prove(&inst, vars, &input, &gens, &mut prover_transcript);
65
66    let name = format!("NIZK_verify_{}", n);
67    group.bench_function(&name, move |b| {
68      b.iter(|| {
69        let mut verifier_transcript = Transcript::new(b"example");
70        assert!(proof
71          .verify(
72            black_box(&inst),
73            black_box(&input),
74            black_box(&mut verifier_transcript),
75            black_box(&gens)
76          )
77          .is_ok());
78      });
79    });
80    group.finish();
81  }
82}
83
84fn set_duration() -> Criterion {
85  Criterion::default().sample_size(10)
86}
87
88criterion_group! {
89name = benches_nizk;
90config = set_duration();
91targets = nizk_prove_benchmark, nizk_verify_benchmark
92}
93
94criterion_main!(benches_nizk);