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}