getrandom_runtime_seeded/
lib.rs1extern crate alloc;
2
3use std::cell::RefCell;
4
5use getrandom::Error;
6use rand_chacha::rand_core::{RngCore, SeedableRng};
7use rand_chacha::ChaChaRng;
8
9thread_local!(static CHACHA_RNG: RefCell<Option<ChaChaRng>> = RefCell::new(None));
10
11pub fn init_getrandom(rng_seed: [u8; 32]) {
12 CHACHA_RNG.with(|x| {
13 *x.borrow_mut() = Some(ChaChaRng::from_seed(rng_seed));
14 });
15}
16
17pub fn seeded_with_runtime_chacha_rng(buf: &mut [u8]) -> Result<(), Error> {
18 CHACHA_RNG.with(|rng| {
19 match rng.borrow_mut().as_mut() {
20 Some(rng) => {
21 rng.fill_bytes(buf);
23 Ok(())
24 }
25 None => Err(Error::UNEXPECTED),
26 }
27 })
28}