#![no_main] use arbitrary::Arbitrary; use libfuzzer_sys::fuzz_target; use leona::{KeyedHash, Lioness, ZeroIv}; use chacha20::ChaCha20; use sha2::Sha256; use typenum::U16; type Cipher = Lioness, KeyedHash>; #[derive(Arbitrary, Debug)] struct Input<'a> { key: &'a [u8], prefix: [u8; 32], data: &'a [u8], } fuzz_target!(|data: Input| { let mut input = Vec::from(data.prefix); input.extend(data.data); let cipher = Cipher::new_dynamic(data.key); cipher.encrypt(&mut input).unwrap(); cipher.decrypt(&mut input).unwrap(); assert_eq!(&input[..32], data.prefix); assert_eq!(&input[32..], data.data); });