15 lines
785 B
Rust
15 lines
785 B
Rust
//! Random data on Apple platforms.
|
|
//!
|
|
//! `CCRandomGenerateBytes` calls into `CCRandomCopyBytes` with `kCCRandomDefault`.
|
|
//! `CCRandomCopyBytes` manages a CSPRNG which is seeded from the kernel's CSPRNG.
|
|
//! We use `CCRandomGenerateBytes` instead of `SecCopyBytes` because it is accessible via
|
|
//! `libSystem` (libc) while the other needs to link to `Security.framework`.
|
|
//!
|
|
//! Note that technically, `arc4random_buf` is available as well, but that calls
|
|
//! into the same system service anyway, and `CCRandomGenerateBytes` has been
|
|
//! proven to be App Store-compatible.
|
|
|
|
pub fn fill_bytes(bytes: &mut [u8]) {
|
|
let ret = unsafe { libc::CCRandomGenerateBytes(bytes.as_mut_ptr().cast(), bytes.len()) };
|
|
assert_eq!(ret, libc::kCCSuccess, "failed to generate random data");
|
|
}
|