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);
}
});
|