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