#![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::>(); 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); } });