Struct ring::rand::SystemRandom
source · [−]pub struct SystemRandom;
Expand description
A secure random number generator where the random values come directly from the operating system.
A single SystemRandom
may be shared across multiple threads safely.
new()
is guaranteed to always succeed and to have low latency; it won’t
try to open or read from a file or do similar things. The first call to
fill()
may block a substantial amount of time since any and all
initialization is deferred to it. Therefore, it may be a good idea to call
fill()
once at a non-latency-sensitive time to minimize latency for
future calls.
On Linux, fill()
will use the getrandom
syscall. If the kernel is too
old to support getrandom
then by default fill()
falls back to reading
from /dev/urandom
. This decision is made the first time fill
succeeds. The fallback to /dev/urandom
can be disabled by disabling the
dev_urandom_fallback
default feature; this should be done whenever the
target system is known to support getrandom
. Library crates should avoid
explicitly enabling the dev_urandom_fallback
feature.
On macOS and iOS, fill()
is implemented using SecRandomCopyBytes
.
On Redox, fill()
is implemented by reading from rand:
.
On Windows, fill
is implemented using the platform’s API for secure
random number generation.
Otherwise, fill()
is implemented by reading from /dev/urandom
. (This is
something that should be improved for any platform that adds something
better.)
When /dev/urandom
is used, a file handle for /dev/urandom
won’t be
opened until fill
is called. In particular, SystemRandom::new()
will
not open /dev/urandom
or do other potentially-high-latency things. The
file handle will never be closed, until the operating system closes it at
process shutdown. All instances of SystemRandom
will share a single file
handle.
On Linux, to properly implement seccomp filtering when the
dev_urandom_fallback
default feature is disabled, allow getrandom
through. When the fallback is enabled, allow file opening, getrandom
,
and read
up until the first call to fill()
succeeds. After that, allow
getrandom
and read
.
Implementations
sourceimpl SystemRandom
impl SystemRandom
sourcepub fn new() -> SystemRandom
pub fn new() -> SystemRandom
Constructs a new SystemRandom
.
Trait Implementations
sourceimpl SecureRandom for SystemRandom
impl SecureRandom for SystemRandom
Auto Trait Implementations
impl RefUnwindSafe for SystemRandom
impl Send for SystemRandom
impl Sync for SystemRandom
impl Unpin for SystemRandom
impl UnwindSafe for SystemRandom
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more