|
|
use criterion::{criterion_group, criterion_main, Criterion};
// JubJub
use dusk_bls12_381::Scalar;
use eddsa::{KeyPair, Message, PublicKey};
extern crate rand7;
// BabyJubJub
extern crate rand;
#[macro_use]
extern crate ff;
use ff::*;
extern crate num;
extern crate num_bigint;
use babyjubjub_rs::{utils, Point};
use num_bigint::{BigInt, Sign, ToBigInt};
fn criterion_benchmark(c: &mut Criterion) {
let mut m: [u8; 32] = rand::random::<[u8; 32]>();
m[31] = 0;
println!("m {:?}", m);
// JubJub
let keypair = KeyPair::new(&mut rand7::thread_rng()).unwrap();
let message = Message(Scalar::from_bytes(&m).unwrap());
c.bench_function("JubJub EdDSA sign", |b| b.iter(|| keypair.sign(&message)));
let a = keypair.sign(&message);
c.bench_function("JubJub EdDSA verify", |b| {
b.iter(|| a.verify(&message, &keypair.public_key))
});
// BabyJubJub
let sk = babyjubjub_rs::new_key();
let pk = sk.public().unwrap();
let msg = BigInt::from_bytes_le(Sign::Plus, &m);
c.bench_function("BabyJubJub EdDSA sign", |b| b.iter(|| sk.sign(msg.clone())));
let sig = sk.sign(msg.clone()).unwrap();
c.bench_function("BabyJubJub EdDSA verify", |b| {
b.iter(|| babyjubjub_rs::verify(pk.clone(), sig.clone(), msg.clone()))
});
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
|