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

    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 instance 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]

#### `fn new() -> SystemRandom`

Constructs a new `SystemRandom`.

## Trait Implementations

### `impl SecureRandom for SystemRandom`
[src]

#### `fn fill(&self, dest: &mut [u8]) -> Result<(), Unspecified>`

Fills `dest` with random bytes.

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)