aboutsummaryrefslogtreecommitdiff
path: root/benches/primitives.rs
blob: 09f926ad91ad50fc81f2a72c702b92166db8a3ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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);