arnaucube
arnaucube/kestoPublic Self-hosted repository
kesto/rust-crypto-benchmarks/benches/bench_eddsa.rs
rust-crypto-benchmarks/benches/bench_eddsa.rsRaw
 1use criterion::{criterion_group, criterion_main, Criterion};
 2
 3// JubJub
 4use dusk_bls12_381::Scalar;
 5use eddsa::{KeyPair, Message, PublicKey};
 6extern crate rand7;
 7
 8// BabyJubJub
 9extern crate rand;
10#[macro_use]
11extern crate ff;
12use ff::*;
13extern crate num;
14extern crate num_bigint;
15use babyjubjub_rs::{utils, Point};
16use num_bigint::{BigInt, Sign, ToBigInt};
17
18fn criterion_benchmark(c: &mut Criterion) {
19    let mut m: [u8; 32] = rand::random::<[u8; 32]>();
20    m[31] = 0;
21    println!("m {:?}", m);
22
23    // JubJub
24    let keypair = KeyPair::new(&mut rand7::thread_rng()).unwrap();
25    let message = Message(Scalar::from_bytes(&m).unwrap());
26    c.bench_function("JubJub EdDSA sign", |b| b.iter(|| keypair.sign(&message)));
27    let a = keypair.sign(&message);
28    c.bench_function("JubJub EdDSA verify", |b| {
29        b.iter(|| a.verify(&message, &keypair.public_key))
30    });
31
32    // BabyJubJub
33    let sk = babyjubjub_rs::new_key();
34    let pk = sk.public().unwrap();
35    let msg = BigInt::from_bytes_le(Sign::Plus, &m);
36    c.bench_function("BabyJubJub EdDSA sign", |b| b.iter(|| sk.sign(msg.clone())));
37    let sig = sk.sign(msg.clone()).unwrap();
38    c.bench_function("BabyJubJub EdDSA verify", |b| {
39        b.iter(|| babyjubjub_rs::verify(pk.clone(), sig.clone(), msg.clone()))
40    });
41}
42
43criterion_group!(benches, criterion_benchmark);
44criterion_main!(benches);