getrandom_runtime_seeded/
lib.rs

1extern 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                // Generate random data
22                rng.fill_bytes(buf);
23                Ok(())
24            }
25            None => Err(Error::UNEXPECTED),
26        }
27    })
28}