Skip to main content

security/
random_bytes.rs

1use crate::bridge;
2use crate::error::Result;
3
4pub struct SecureRandom;
5
6impl SecureRandom {
7    pub fn fill(buffer: &mut [u8]) -> Result<()> {
8        if buffer.is_empty() {
9            return Ok(());
10        }
11        let mut error = std::ptr::null_mut();
12        let status = unsafe {
13            bridge::security_random_fill(
14                buffer.as_mut_ptr().cast(),
15                bridge::len_to_isize(buffer.len())?,
16                &mut error,
17            )
18        };
19        bridge::status_result("security_random_fill", status, error)
20    }
21
22    pub fn bytes(length: usize) -> Result<Vec<u8>> {
23        let mut bytes = vec![0_u8; length];
24        Self::fill(&mut bytes)?;
25        Ok(bytes)
26    }
27}