Struct ring::rand::SystemRandom [−][src]
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 (including Android), 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
. When
/dev/urandom
is used, a file handle for /dev/urandom
won’t be opened
until fill
is called; 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. 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
.
On macOS and iOS, fill()
is implemented using SecRandomCopyBytes
.
On wasm32-unknown-unknown (non-WASI), fill()
is implemented using
window.crypto.getRandomValues()
. It must be used in a context where the
global object is a Window
; i.e. it must not be used in a Worker or a
non-browser context.
On Windows, fill
is implemented using the platform’s API for secure
random number generation.
Implementations
Trait Implementations
impl Clone for SystemRandom
[src]
impl Clone for SystemRandom
[src]fn clone(&self) -> SystemRandom
[src]
fn clone(&self) -> SystemRandom
[src]Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]Performs copy-assignment from source
. Read more
Auto Trait Implementations
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> SecureRandom for T where
T: SecureRandom,
[src]
impl<T> SecureRandom for T where
T: SecureRandom,
[src]pub fn fill(&Self, &mut [u8]) -> Result<(), Unspecified>
[src]
pub fn fill(&Self, &mut [u8]) -> Result<(), Unspecified>
[src]Fills dest
with random bytes.
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more