arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
ark-r1cs-std/cp-benches/benches/crypto_primitives/signature.rs
cp-benches/benches/crypto_primitives/signature.rsRaw
 1#[macro_use]
 2extern crate criterion;
 3
 4use algebra::ed_on_bls12_377::EdwardsProjective as Edwards;
 5use blake2::Blake2s;
 6use criterion::Criterion;
 7use crypto_primitives::signature::{schnorr::*, SignatureScheme};
 8use rand::{self, Rng};
 9
10type SchnorrEdwards = Schnorr<Edwards, Blake2s>;
11fn schnorr_signature_setup(c: &mut Criterion) {
12    c.bench_function("SchnorrEdwards: Setup", move |b| {
13        b.iter(|| {
14            let mut rng = &mut rand::thread_rng();
15            SchnorrEdwards::setup(&mut rng).unwrap()
16        })
17    });
18}
19
20fn schnorr_signature_keygen(c: &mut Criterion) {
21    let mut rng = &mut rand::thread_rng();
22    let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
23
24    c.bench_function("SchnorrEdwards: KeyGen", move |b| {
25        b.iter(|| {
26            let mut rng = &mut rand::thread_rng();
27            SchnorrEdwards::keygen(&parameters, &mut rng).unwrap()
28        })
29    });
30}
31
32fn schnorr_signature_sign(c: &mut Criterion) {
33    let mut rng = &mut rand::thread_rng();
34    let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
35    let (_, sk) = SchnorrEdwards::keygen(&parameters, &mut rng).unwrap();
36    let message = [100u8; 128];
37
38    c.bench_function("SchnorrEdwards: Sign", move |b| {
39        b.iter(|| {
40            let mut rng = &mut rand::thread_rng();
41            SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap()
42        })
43    });
44}
45
46fn schnorr_signature_verify(c: &mut Criterion) {
47    let mut rng = &mut rand::thread_rng();
48    let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
49    let (pk, sk) = SchnorrEdwards::keygen(&parameters, &mut rng).unwrap();
50    let message = [100u8; 128];
51    let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
52
53    c.bench_function("SchnorrEdwards: Verify", move |b| {
54        b.iter(|| SchnorrEdwards::verify(&parameters, &pk, &message, &signature).unwrap())
55    });
56}
57
58fn schnorr_signature_randomize_pk(c: &mut Criterion) {
59    let mut rng = &mut rand::thread_rng();
60    let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
61    let (pk, _) = SchnorrEdwards::keygen(&parameters, &mut rng).unwrap();
62    let randomness: [u8; 32] = rng.gen();
63
64    c.bench_function("SchnorrEdwards: Randomize PubKey", move |b| {
65        b.iter(|| SchnorrEdwards::randomize_public_key(&parameters, &pk, &randomness).unwrap())
66    });
67}
68
69fn schnorr_signature_randomize_signature(c: &mut Criterion) {
70    let mut rng = &mut rand::thread_rng();
71    let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
72    let (_, sk) = SchnorrEdwards::keygen(&parameters, &mut rng).unwrap();
73    let randomness: [u8; 32] = rng.gen();
74    let message = [100u8; 128];
75    let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
76
77    c.bench_function("SchnorrEdwards: Randomize Signature", move |b| {
78        b.iter(|| {
79            SchnorrEdwards::randomize_signature(&parameters, &signature, &randomness).unwrap()
80        })
81    });
82}
83criterion_group! {
84    name = schnorr_sig;
85    config = Criterion::default().sample_size(20);
86    targets = schnorr_signature_setup, schnorr_signature_keygen, schnorr_signature_sign,
87                schnorr_signature_verify, schnorr_signature_randomize_pk, schnorr_signature_randomize_signature
88}
89criterion_main!(schnorr_sig);