Skip to main content

veilid_tools/
random.rs

1use rand::prelude::*;
2
3#[derive(Clone, Copy, Debug, Default)]
4pub struct VeilidRng;
5
6impl CryptoRng for VeilidRng {}
7
8impl RngCore for VeilidRng {
9    fn next_u32(&mut self) -> u32 {
10        get_random_u32()
11    }
12
13    fn next_u64(&mut self) -> u64 {
14        get_random_u64()
15    }
16
17    fn fill_bytes(&mut self, dest: &mut [u8]) {
18        random_bytes(dest);
19    }
20
21    fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), rand::Error> {
22        random_bytes(dest);
23        Ok(())
24    }
25}
26
27pub fn random_bytes(dest: &mut [u8]) {
28    let mut rng = rand::thread_rng();
29    rng.fill_bytes(dest);
30}
31
32#[must_use]
33pub fn get_random_u32() -> u32 {
34    let mut rng = rand::thread_rng();
35    rng.next_u32()
36}
37
38#[must_use]
39pub fn get_random_u64() -> u64 {
40    let mut rng = rand::thread_rng();
41    rng.next_u64()
42}