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(¶meters, &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(¶meters, &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(¶meters, &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(¶meters, &mut rng).unwrap();
50 let message = [100u8; 128];
51 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
52
53 c.bench_function("SchnorrEdwards: Verify", move |b| {
54 b.iter(|| SchnorrEdwards::verify(¶meters, &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(¶meters, &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(¶meters, &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(¶meters, &mut rng).unwrap();
73 let randomness: [u8; 32] = rng.gen();
74 let message = [100u8; 128];
75 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
76
77 c.bench_function("SchnorrEdwards: Randomize Signature", move |b| {
78 b.iter(|| {
79 SchnorrEdwards::randomize_signature(¶meters, &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);