#[cfg(feature = "fuzztarget")]
mod fuzzy_rng {
use bitcoin::util::uint::Uint256;
+ use util::byte_utils;
+
+ static mut RNG_ITER: u64 = 0;
pub fn fill_bytes(data: &mut [u8]) {
- for i in 0..data.len() {
- data[i] = 0x42;
+ let rng = unsafe { RNG_ITER += 1; RNG_ITER -1 };
+ for i in 0..data.len() / 8 {
+ data[i*8..(i+1)*8].copy_from_slice(&byte_utils::be64_to_array(rng));
}
+ let rem = data.len() % 8;
+ let off = data.len() - rem;
+ data[off..].copy_from_slice(&byte_utils::be64_to_array(rng)[0..rem]);
}
pub fn rand_uint256() -> Uint256 {
- Uint256([0xdeadbeef, 0x1badcafe, 0xbadbeef, 0xdeadcafe])
+ let rng = unsafe { RNG_ITER += 1; RNG_ITER - 1 };
+ Uint256([rng, rng, rng, rng])
}
pub fn rand_f32() -> f32 {
- 0.42
+ let rng = unsafe { RNG_ITER += 1; RNG_ITER - 1 };
+ f64::from_bits(rng) as f32
+ }
+
+ pub fn reset_rng_state() {
+ unsafe { RNG_ITER = 0; }
}
}
#[cfg(feature = "fuzztarget")]