aboutsummaryrefslogtreecommitdiff
path: root/fuzz/fuzz_targets/fuzz_target_1.rs
blob: 11b9b9008ecc4e33d3787c9a3e3e9e2368d22ebb (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
#![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<ZeroIv<ChaCha20>, KeyedHash<U16, Sha256>>;

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