71 lines
1.6 KiB
Rust
71 lines
1.6 KiB
Rust
// Benchmarks for key generation and signing with Dilithium.
|
|
// cargo criterion --features std
|
|
|
|
extern crate core;
|
|
extern crate criterion;
|
|
extern crate dilithium;
|
|
extern crate rng256;
|
|
|
|
use core::time::Duration;
|
|
use criterion::*;
|
|
use dilithium::sign::SecKey;
|
|
use rng256::Rng256;
|
|
|
|
const SAMPLE_SIZE: usize = 1000;
|
|
const MEASUREMENT_TIME: Duration = Duration::from_secs(10);
|
|
|
|
fn bench_sk(c: &mut Criterion) {
|
|
let mut rng = rng256::ThreadRng256 {};
|
|
|
|
c.bench_function("gensk", |b| {
|
|
b.iter_batched(
|
|
|| {},
|
|
|_| {
|
|
SecKey::gensk(&mut rng);
|
|
},
|
|
BatchSize::SmallInput,
|
|
)
|
|
});
|
|
}
|
|
|
|
fn bench_pk(c: &mut Criterion) {
|
|
let mut rng = rng256::ThreadRng256 {};
|
|
|
|
c.bench_function("genpk", |b| {
|
|
b.iter_batched(
|
|
|| SecKey::gensk(&mut rng),
|
|
|sk| {
|
|
sk.genpk();
|
|
},
|
|
BatchSize::SmallInput,
|
|
)
|
|
});
|
|
}
|
|
|
|
fn bench_sign(c: &mut Criterion) {
|
|
const MESSAGE_LENGTH: usize = 64;
|
|
let mut rng = rng256::ThreadRng256 {};
|
|
|
|
c.bench_function("sign", |b| {
|
|
b.iter_batched(
|
|
|| {
|
|
let sk = SecKey::gensk(&mut rng);
|
|
let mut message = [0; MESSAGE_LENGTH];
|
|
rng.fill_bytes(&mut message);
|
|
(sk, message)
|
|
},
|
|
|(sk, message)| {
|
|
sk.sign(&message);
|
|
},
|
|
BatchSize::SmallInput,
|
|
)
|
|
});
|
|
}
|
|
|
|
criterion_group! {
|
|
name = benches;
|
|
config = Criterion::default().sample_size(SAMPLE_SIZE).measurement_time(MEASUREMENT_TIME);
|
|
targets = bench_sk, bench_pk, bench_sign
|
|
}
|
|
criterion_main!(benches);
|