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
32pub fn get_random_u32() -> u32 {
33    let mut rng = rand::thread_rng();
34    rng.next_u32()
35}
36
37pub fn get_random_u64() -> u64 {
38    let mut rng = rand::thread_rng();
39    rng.next_u64()
40}