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