ark-r1cs-std/crypto-primitives/benches/crypto_primitives/signature.rs
crypto-primitives/benches/crypto_primitives/signature.rsRaw
1#[macro_use]
2extern crate criterion;
3
4mod affine {
5 use algebra::curves::edwards_bls12::EdwardsAffine as Edwards;
6 use blake2::Blake2s;
7 use criterion::Criterion;
8 use crypto_primitives::signature::{schnorr::*, SignatureScheme};
9 use rand::{self, Rng};
10
11 type SchnorrEdwards = SchnorrSignature<Edwards, Blake2s>;
12 fn schnorr_signature_setup(c: &mut Criterion) {
13 c.bench_function("SchnorrEdwardsAffine: Setup", move |b| {
14 b.iter(|| {
15 let mut rng = &mut rand::thread_rng();
16 SchnorrEdwards::setup(&mut rng).unwrap()
17 })
18 });
19 }
20
21 fn schnorr_signature_keygen(c: &mut Criterion) {
22 let mut rng = &mut rand::thread_rng();
23 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
24
25 c.bench_function("SchnorrEdwardsAffine: KeyGen", move |b| {
26 b.iter(|| {
27 let mut rng = &mut rand::thread_rng();
28 SchnorrEdwards::keygen(¶meters, &mut rng).unwrap()
29 })
30 });
31 }
32
33 fn schnorr_signature_sign(c: &mut Criterion) {
34 let mut rng = &mut rand::thread_rng();
35 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
36 let (_, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
37 let message = [100u8; 128];
38
39 c.bench_function("SchnorrEdwardsAffine: Sign", move |b| {
40 b.iter(|| {
41 let mut rng = &mut rand::thread_rng();
42 SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap()
43 })
44 });
45 }
46
47 fn schnorr_signature_verify(c: &mut Criterion) {
48 let mut rng = &mut rand::thread_rng();
49 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
50 let (pk, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
51 let message = [100u8; 128];
52 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
53
54 c.bench_function("SchnorrEdwardsAffine: Verify", move |b| {
55 b.iter(|| SchnorrEdwards::verify(¶meters, &pk, &message, &signature).unwrap())
56 });
57 }
58
59 fn schnorr_signature_randomize_pk(c: &mut Criterion) {
60 let mut rng = &mut rand::thread_rng();
61 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
62 let (pk, _) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
63 let randomness: [u8; 32] = rng.gen();
64
65 c.bench_function("SchnorrEdwardsAffine: Randomize PubKey", move |b| {
66 b.iter(|| SchnorrEdwards::randomize_public_key(¶meters, &pk, &randomness).unwrap())
67 });
68 }
69
70 fn schnorr_signature_randomize_signature(c: &mut Criterion) {
71 let mut rng = &mut rand::thread_rng();
72 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
73 let (_, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
74 let randomness: [u8; 32] = rng.gen();
75 let message = [100u8; 128];
76 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
77
78 c.bench_function("SchnorrEdwardsAffine: Randomize Signature", move |b| {
79 b.iter(|| {
80 SchnorrEdwards::randomize_signature(¶meters, &signature, &randomness).unwrap()
81 })
82 });
83 }
84 criterion_group! {
85 name = schnorr_sig_affine;
86 config = Criterion::default().sample_size(20);
87 targets = schnorr_signature_setup, schnorr_signature_keygen, schnorr_signature_sign,
88 schnorr_signature_verify, schnorr_signature_randomize_pk, schnorr_signature_randomize_signature
89 }
90}
91
92mod projective {
93 use algebra::curves::edwards_bls12::EdwardsProjective as Edwards;
94 use blake2::Blake2s;
95 use criterion::Criterion;
96 use crypto_primitives::signature::{schnorr::*, SignatureScheme};
97 use rand::{self, Rng};
98
99 type SchnorrEdwards = SchnorrSignature<Edwards, Blake2s>;
100 fn schnorr_signature_setup(c: &mut Criterion) {
101 c.bench_function("SchnorrEdwardsProjective: Setup", move |b| {
102 b.iter(|| {
103 let mut rng = &mut rand::thread_rng();
104 SchnorrEdwards::setup(&mut rng).unwrap()
105 })
106 });
107 }
108
109 fn schnorr_signature_keygen(c: &mut Criterion) {
110 let mut rng = &mut rand::thread_rng();
111 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
112
113 c.bench_function("SchnorrEdwardsProjective: KeyGen", move |b| {
114 b.iter(|| {
115 let mut rng = &mut rand::thread_rng();
116 SchnorrEdwards::keygen(¶meters, &mut rng).unwrap()
117 })
118 });
119 }
120
121 fn schnorr_signature_sign(c: &mut Criterion) {
122 let mut rng = &mut rand::thread_rng();
123 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
124 let (_, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
125 let message = [100u8; 128];
126
127 c.bench_function("SchnorrEdwardsProjective: Sign", move |b| {
128 b.iter(|| {
129 let mut rng = &mut rand::thread_rng();
130 SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap()
131 })
132 });
133 }
134
135 fn schnorr_signature_verify(c: &mut Criterion) {
136 let mut rng = &mut rand::thread_rng();
137 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
138 let (pk, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
139 let message = [100u8; 128];
140 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
141
142 c.bench_function("SchnorrEdwardsProjective: Verify", move |b| {
143 b.iter(|| SchnorrEdwards::verify(¶meters, &pk, &message, &signature).unwrap())
144 });
145 }
146
147 fn schnorr_signature_randomize_pk(c: &mut Criterion) {
148 let mut rng = &mut rand::thread_rng();
149 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
150 let (pk, _) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
151 let randomness: [u8; 32] = rng.gen();
152
153 c.bench_function("SchnorrEdwardsProjective: Randomize PubKey", move |b| {
154 b.iter(|| SchnorrEdwards::randomize_public_key(¶meters, &pk, &randomness).unwrap())
155 });
156 }
157
158 fn schnorr_signature_randomize_signature(c: &mut Criterion) {
159 let mut rng = &mut rand::thread_rng();
160 let parameters = SchnorrEdwards::setup(&mut rng).unwrap();
161 let (_, sk) = SchnorrEdwards::keygen(¶meters, &mut rng).unwrap();
162 let randomness: [u8; 32] = rng.gen();
163 let message = [100u8; 128];
164 let signature = SchnorrEdwards::sign(¶meters, &sk, &message, &mut rng).unwrap();
165
166 c.bench_function("SchnorrEdwardsProjective: Randomize Signature", move |b| {
167 b.iter(|| {
168 SchnorrEdwards::randomize_signature(¶meters, &signature, &randomness).unwrap()
169 })
170 });
171 }
172 criterion_group! {
173 name = schnorr_sig_projective;
174 config = Criterion::default().sample_size(20);
175 targets = schnorr_signature_setup, schnorr_signature_keygen, schnorr_signature_sign,
176 schnorr_signature_verify, schnorr_signature_randomize_pk, schnorr_signature_randomize_signature
177 }
178}
179use crate::{affine::schnorr_sig_affine, projective::schnorr_sig_projective};
180criterion_main!(schnorr_sig_affine, schnorr_sig_projective);