use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion};
#[cfg(unix)]
use pprof::criterion::{Output, PProfProfiler};
fn criterion_benchmark(c: &mut Criterion) {
let pk_bytes = hex::decode("8200fc249deb0148eb918d6e213980c5d01acd7fc251900d9260136da3b54836ce125172399ddc69c4e3e11429b62c11").unwrap();
let signature = hex::decode("a4721e6c3eafcd823f138cd29c6c82e8c5149101d0bb4bafddbac1c2d1fe3738895e4e21dd4b8b41bf007046440220910bb1cdb91f50a84a0d7f33ff2e8577aa62ac64b35a291a728a9db5ac91e06d1312b48a376138d77b4d6ad27c24221afe").unwrap();
c.bench_function("lock with TLE", |b| {
b.iter_batched_ref(
|| {
let mut msg = vec![0u8; 16];
msg.fill_with(rand::random);
msg
},
|msg| {
let mut encrypted = vec![];
tlock::encrypt(
black_box(&mut encrypted),
black_box(msg.as_slice()),
black_box(&pk_bytes),
black_box(1000),
)
.unwrap();
assert_ne!(encrypted.len(), 0);
},
BatchSize::SmallInput,
)
});
c.bench_function("unlock with TLE", |b| {
b.iter_batched_ref(
|| {
let mut msg = vec![0u8; 16];
msg.fill_with(rand::random);
let mut encrypted = vec![];
tlock::encrypt(
black_box(&mut encrypted),
black_box(msg.as_slice()),
black_box(&pk_bytes),
black_box(1000),
)
.unwrap();
(msg, encrypted)
},
|(msg, encrypted)| {
let mut decrypted = vec![];
tlock::decrypt(
black_box(&mut decrypted),
black_box(encrypted.as_slice()),
black_box(&signature),
)
.unwrap();
decrypted.resize(msg.len(), 0);
assert_eq!(msg.as_slice(), decrypted);
},
BatchSize::SmallInput,
)
});
c.bench_function("lock unlock with TLE", |b| {
b.iter_batched_ref(
|| {
let mut msg = vec![0u8; 16];
msg.fill_with(rand::random);
msg
},
|msg| {
let mut encrypted = vec![];
tlock::encrypt(
black_box(&mut encrypted),
black_box(msg.as_slice()),
black_box(&pk_bytes),
black_box(1000),
)
.unwrap();
let mut decrypted = vec![];
tlock::decrypt(
black_box(&mut decrypted),
black_box(encrypted.as_slice()),
black_box(&signature),
)
.unwrap();
decrypted.resize(msg.len(), 0);
assert_eq!(msg.as_slice(), decrypted);
},
BatchSize::SmallInput,
)
});
}
#[cfg(unix)]
criterion_group!(
name = benches;
config = Criterion::default()
.with_profiler(PProfProfiler::new(100, Output::Flamegraph(None)));
targets = criterion_benchmark
);
#[cfg(not(unix))]
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);