aboutsummaryrefslogtreecommitdiff
path: root/benches/primitives.rs
diff options
context:
space:
mode:
Diffstat (limited to 'benches/primitives.rs')
-rw-r--r--benches/primitives.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/benches/primitives.rs b/benches/primitives.rs
new file mode 100644
index 0000000..09f926a
--- /dev/null
+++ b/benches/primitives.rs
@@ -0,0 +1,60 @@
+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);