[][src]Struct ring::rand::SystemRandom

pub struct SystemRandom;

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.

Methods

impl SystemRandom[src]

pub fn new() -> SystemRandom[src]

Constructs a new SystemRandom.

Trait Implementations

impl SecureRandom for SystemRandom[src]

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]