Skip to main content

aha_misc/common/
rand.rs

1//! Some Random tools
2//!
3
4use libafl_bolts::rands::Rand;
5
6/// Trait RandExt
7pub trait RandExt: Rand {
8    /// Generate random bytes
9    fn generate_bytes(&mut self, len: usize) -> Vec<u8> {
10        let mut data = vec![0u8; len];
11        self.fill_bytes(&mut data);
12        data
13    }
14
15    /// Fill bytes
16    fn fill_bytes(&mut self, dest: &mut [u8]) {
17        let mut chunks = dest.chunks_exact_mut(8);
18        for chunk in chunks.by_ref() {
19            let r = self.next();
20            chunk.copy_from_slice(&r.to_le_bytes());
21        }
22        let remainder = chunks.into_remainder();
23        if !remainder.is_empty() {
24            let r = self.next();
25            remainder.copy_from_slice(&r.to_le_bytes()[..remainder.len()]);
26        }
27    }
28}
29
30/// Implement RandExt for all Rand
31impl<T: Rand + ?Sized> RandExt for T {}