use criterion::{BenchmarkId, Criterion, Throughput, criterion_group, criterion_main}; use zears::{Aez, primitives}; fn bench(c: &mut Criterion) { let mut group = c.benchmark_group("primitives"); const KB: usize = 1024; let aez = Aez::new(&[0u8; 48]); for size in [0, 16, 32, 64, KB].into_iter() { group.throughput(Throughput::Bytes(size as u64)); group.bench_function(BenchmarkId::new("aez_hash", size), |b| { let tweak = vec![0u8; size]; b.iter(|| primitives::aez_hash(&aez, [&tweak])) }); // Make sure we also hit the path for tweaks that are not exactly block sized let size = size + 8; group.throughput(Throughput::Bytes(size as u64)); group.bench_function(BenchmarkId::new("aez_hash", size), |b| { let tweak = vec![0u8; size]; b.iter(|| primitives::aez_hash(&aez, [&tweak])) }); } for size in [KB, 2 * KB, 4 * KB, 8 * KB, 16 * KB].into_iter() { group.throughput(Throughput::Bytes(size as u64)); group.bench_function(BenchmarkId::new("aez_prf", size), |b| { let mut buffer = vec![0u8; size]; let tweak: [&[u8]; 0] = []; b.iter(|| primitives::aez_prf(&aez, tweak, &mut buffer)) }); group.bench_function(BenchmarkId::new("encipher", size), |b| { let mut buffer = vec![0u8; size]; let tweak: [&[u8]; 0] = []; b.iter(|| primitives::encipher(&aez, tweak, &mut buffer)) }); group.bench_function(BenchmarkId::new("decipher", size), |b| { let mut buffer = vec![0u8; size]; let tweak: [&[u8]; 0] = []; b.iter(|| primitives::decipher(&aez, tweak, &mut buffer)) }); } group.finish(); c.bench_function("primitives/e", |b| { b.iter(|| primitives::e(1, 1, &aez, [0; 16])) }); } criterion_group!(benches, bench); criterion_main!(benches);