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}