aboutsummaryrefslogtreecommitdiff
path: root/fuzz/fuzz_targets/zears_vs_aez.rs
blob: 39ccac66199932e860b98dce269974b92ecd4eba (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
#![no_main]

use libfuzzer_sys::fuzz_target;

use arbitrary::Arbitrary;
use zears::Aez;

#[derive(Debug, Arbitrary)]
struct Parameters<'a> {
    key: &'a [u8],
    nonce: &'a [u8],
    ad: &'a [u8],
    adreps: u8,
    tau: u8,
    message: &'a [u8],
}

const MAX_LEN: usize = 16 * 1024 * 1024;

fuzz_target!(|data: Parameters| {
    if data.message.len() + data.tau as usize <= MAX_LEN {
        let ad = (0..data.adreps)
            .map(|i| {
                let i = i.into();
                if i < data.ad.len() {
                    &data.ad[i..]
                } else {
                    &[]
                }
            })
            .collect::<Vec<_>>();

        let actual = Aez::new(data.key).encrypt(data.nonce, &ad, data.tau.into(), data.message);

        let mut expected = vec![0; data.message.len() + data.tau as usize];
        aezref::encrypt(data.key, data.nonce, &ad, data.message, &mut expected);

        assert_eq!(actual, expected);
    }
});