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
  4mod affine {
  5    use algebra::ed_on_bls12_377::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(&parameters, &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(&parameters, &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(&parameters, &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(&parameters, &mut rng).unwrap();
 51        let message = [100u8; 128];
 52        let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
 53
 54        c.bench_function("SchnorrEdwardsAffine: Verify", move |b| {
 55            b.iter(|| SchnorrEdwards::verify(&parameters, &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(&parameters, &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(&parameters, &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(&parameters, &mut rng).unwrap();
 74        let randomness: [u8; 32] = rng.gen();
 75        let message = [100u8; 128];
 76        let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
 77
 78        c.bench_function("SchnorrEdwardsAffine: Randomize Signature", move |b| {
 79            b.iter(|| {
 80                SchnorrEdwards::randomize_signature(&parameters, &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::ed_on_bls12_377::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(&parameters, &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(&parameters, &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(&parameters, &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(&parameters, &mut rng).unwrap();
139        let message = [100u8; 128];
140        let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
141
142        c.bench_function("SchnorrEdwardsProjective: Verify", move |b| {
143            b.iter(|| SchnorrEdwards::verify(&parameters, &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(&parameters, &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(&parameters, &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(&parameters, &mut rng).unwrap();
162        let randomness: [u8; 32] = rng.gen();
163        let message = [100u8; 128];
164        let signature = SchnorrEdwards::sign(&parameters, &sk, &message, &mut rng).unwrap();
165
166        c.bench_function("SchnorrEdwardsProjective: Randomize Signature", move |b| {
167            b.iter(|| {
168                SchnorrEdwards::randomize_signature(&parameters, &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);