This allows Strict Provenance to work properly, fixing #262. It also now matches what `libstd` does: https://github.com/rust-lang/rust/blob/9f7e997c8bc3cacd2ab4eb75e63cb5fa9279c7b0/library/std/src/sys/unix/weak.rs#L85-L141 Also, while reading the `libstd` code, I noticed that they use an `Acquire` fence and `Release` store as the returned pointer should have "consume" semantics. As this doesn't yet exist in Rust, we instead do exactly what `libstd` does, which means: - Relaxed Load - Release Store - Acquire fence when returning pointer Signed-off-by: Joe Richey <joerichey@google.com> Co-authored-by: Joe ST <joe@fbstj.net>
getrandom
A Rust library for retrieving random data from (operating) system source. It is
assumed that system always provides high-quality cryptographically secure random
data, ideally backed by hardware entropy sources. This crate derives its name
from Linux's getrandom function, but is cross platform, roughly supporting
the same set of platforms as Rust's std lib.
This is a low-level API. Most users should prefer using high-level random-number
library like rand.
Usage
Add this to your Cargo.toml:
[dependencies]
getrandom = "0.2"
Then invoke the getrandom function:
fn get_random_buf() -> Result<[u8; 32], getrandom::Error> {
let mut buf = [0u8; 32];
getrandom::getrandom(&mut buf)?;
Ok(buf)
}
For more information about supported targets, entropy sources, no_std targets,
crate features, WASM support and Custom RNGs see the
getrandom documentation and
getrandom::Error documentation.
Minimum Supported Rust Version
This crate requires Rust 1.34.0 or later.
License
The getrandom library is distributed under either of
at your option.