use rand_chacha::ChaCha20Rng;
use rand_chacha::rand_core::{Rng, SeedableRng};
use sha2::{Digest, Sha256};
use std::cell::RefCell;
thread_local! {
static STREAM: RefCell<ChaCha20Rng> = RefCell::new(ChaCha20Rng::from_seed([0; 32]));
}
pub fn reseed(name: &str) {
let seed: [u8; 32] = Sha256::digest(name.as_bytes()).into();
STREAM.with(|stream| *stream.borrow_mut() = ChaCha20Rng::from_seed(seed));
}
#[unsafe(no_mangle)]
pub unsafe extern "Rust" fn __getrandom_v03_custom(
dest: *mut u8,
len: usize,
) -> Result<(), getrandom::Error> {
let buf = unsafe { std::slice::from_raw_parts_mut(dest, len) };
STREAM.with(|stream| stream.borrow_mut().fill_bytes(buf));
Ok(())
}