mirror of
https://gitlab.redox-os.org/CoffeeCode/redox-ssh.git
synced 2025-12-29 00:22:19 +01:00
162 lines
No EOL
9 KiB
HTML
162 lines
No EOL
9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="generator" content="rustdoc">
|
||
<meta name="description" content="API documentation for the Rust `SystemRandom` struct in crate `ring`.">
|
||
<meta name="keywords" content="rust, rustlang, rust-lang, SystemRandom">
|
||
|
||
<title>ring::rand::SystemRandom - Rust</title>
|
||
|
||
<link rel="stylesheet" type="text/css" href="../../normalize.css">
|
||
<link rel="stylesheet" type="text/css" href="../../rustdoc.css">
|
||
<link rel="stylesheet" type="text/css" href="../../main.css">
|
||
|
||
|
||
|
||
|
||
</head>
|
||
<body class="rustdoc struct">
|
||
<!--[if lte IE 8]>
|
||
<div class="warning">
|
||
This old browser is unsupported and will most likely display funky
|
||
things.
|
||
</div>
|
||
<![endif]-->
|
||
|
||
|
||
|
||
<nav class="sidebar">
|
||
|
||
<p class='location'>Struct SystemRandom</p><div class="block items"><ul><li><a href="#methods">Methods</a></li><li><a href="#implementations">Trait Implementations</a></li></ul></div><p class='location'><a href='../index.html'>ring</a>::<wbr><a href='index.html'>rand</a></p><script>window.sidebarCurrent = {name: 'SystemRandom', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script>
|
||
</nav>
|
||
|
||
<nav class="sub">
|
||
<form class="search-form js-only">
|
||
<div class="search-container">
|
||
<input class="search-input" name="search"
|
||
autocomplete="off"
|
||
placeholder="Click or press ‘S’ to search, ‘?’ for more options…"
|
||
type="search">
|
||
</div>
|
||
</form>
|
||
</nav>
|
||
|
||
<section id='main' class="content">
|
||
<h1 class='fqn'><span class='in-band'>Struct <a href='../index.html'>ring</a>::<wbr><a href='index.html'>rand</a>::<wbr><a class="struct" href=''>SystemRandom</a></span><span class='out-of-band'><span id='render-detail'>
|
||
<a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">
|
||
[<span class='inner'>−</span>]
|
||
</a>
|
||
</span><a class='srclink' href='../../src/ring/rand.rs.html#82' title='goto source code'>[src]</a></span></h1>
|
||
<pre class='rust struct'>pub struct SystemRandom;</pre><div class='docblock'><p>A secure random number generator where the random values come directly
|
||
from the operating system.</p>
|
||
|
||
<p>A single <code>SystemRandom</code> may be shared across multiple threads safely.</p>
|
||
|
||
<p><code>new()</code> 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
|
||
<code>fill()</code> 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
|
||
<code>fill()</code> once at a non-latency-sensitive time to minimize latency for
|
||
future calls.</p>
|
||
|
||
<p>On Linux, <code>fill()</code> will use the <a href="http://man7.org/linux/man-pages/man2/getrandom.2.html"><code>getrandom</code></a> syscall. If the kernel is too
|
||
old to support <code>getrandom</code> then by default <code>fill()</code> falls back to reading
|
||
from <code>/dev/urandom</code>. This decision is made the first time <code>fill</code>
|
||
<em>succeeds</em>. The fallback to <code>/dev/urandom</code> can be disabled by disabling the
|
||
<code>dev_urandom_fallback</code> default feature; this should be done whenever the
|
||
target system is known to support <code>getrandom</code>. Library crates should avoid
|
||
explicitly enabling the <code>dev_urandom_fallback</code> feature.</p>
|
||
|
||
<p>On macOS and iOS, <code>fill()</code> is implemented using <code>SecRandomCopyBytes</code>.</p>
|
||
|
||
<p>On Redox, <code>fill()</code> is implemented by reading from <code>rand:</code>.</p>
|
||
|
||
<p>On Windows, <code>fill</code> is implemented using the platform's API for secure
|
||
random number generation.</p>
|
||
|
||
<p>Otherwise, <code>fill()</code> is implemented by reading from <code>/dev/urandom</code>. (This is
|
||
something that should be improved for any platform that adds something
|
||
better.)</p>
|
||
|
||
<p>When <code>/dev/urandom</code> is used, a file handle for <code>/dev/urandom</code> won't be
|
||
opened until <code>fill</code> is called. In particular, <code>SystemRandom::new()</code> will
|
||
not open <code>/dev/urandom</code> 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 <code>SystemRandom</code> will share a single file
|
||
handle.</p>
|
||
|
||
<p>On Linux, to properly implement seccomp filtering when the
|
||
<code>dev_urandom_fallback</code> default feature is disabled, allow <code>getrandom</code>
|
||
through. When the fallback is enabled, allow file opening, <code>getrandom</code>,
|
||
and <code>read</code> up until the first call to <code>fill()</code> succeeds. After that, allow
|
||
<code>getrandom</code> and <code>read</code>.</p>
|
||
</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class="struct" href="../../ring/rand/struct.SystemRandom.html" title="struct ring::rand::SystemRandom">SystemRandom</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/ring/rand.rs.html#84-88' title='goto source code'>[src]</a></span></h3>
|
||
<div class='impl-items'><h4 id='method.new' class="method"><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>() -> <a class="struct" href="../../ring/rand/struct.SystemRandom.html" title="struct ring::rand::SystemRandom">SystemRandom</a></code></span></h4>
|
||
<div class='docblock'><p>Constructs a new <code>SystemRandom</code>.</p>
|
||
</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class="trait" href="../../ring/rand/trait.SecureRandom.html" title="trait ring::rand::SecureRandom">SecureRandom</a> for <a class="struct" href="../../ring/rand/struct.SystemRandom.html" title="struct ring::rand::SystemRandom">SystemRandom</a></code></span><span class='out-of-band'><div class='ghost'></div><a class='srclink' href='../../src/ring/rand.rs.html#90-95' title='goto source code'>[src]</a></span></h3>
|
||
<div class='impl-items'><h4 id='method.fill' class="method"><span id='fill.v' class='invisible'><code>fn <a href='../../ring/rand/trait.SecureRandom.html#tymethod.fill' class='fnname'>fill</a>(&self, dest: <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">&mut [</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.u8.html">u8</a><a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.slice.html">]</a>) -> <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.tuple.html">()</a>, <a class="struct" href="../../ring/error/struct.Unspecified.html" title="struct ring::error::Unspecified">Unspecified</a>></code></span></h4>
|
||
<div class='docblock'><p>Fills <code>dest</code> with random bytes.</p>
|
||
</div></div></section>
|
||
<section id='search' class="content hidden"></section>
|
||
|
||
<section class="footer"></section>
|
||
|
||
<aside id="help" class="hidden">
|
||
<div>
|
||
<h1 class="hidden">Help</h1>
|
||
|
||
<div class="shortcuts">
|
||
<h2>Keyboard Shortcuts</h2>
|
||
|
||
<dl>
|
||
<dt>?</dt>
|
||
<dd>Show this help dialog</dd>
|
||
<dt>S</dt>
|
||
<dd>Focus the search field</dd>
|
||
<dt>⇤</dt>
|
||
<dd>Move up in search results</dd>
|
||
<dt>⇥</dt>
|
||
<dd>Move down in search results</dd>
|
||
<dt>⏎</dt>
|
||
<dd>Go to active search result</dd>
|
||
<dt>+</dt>
|
||
<dd>Collapse/expand all sections</dd>
|
||
</dl>
|
||
</div>
|
||
|
||
<div class="infos">
|
||
<h2>Search Tricks</h2>
|
||
|
||
<p>
|
||
Prefix searches with a type followed by a colon (e.g.
|
||
<code>fn:</code>) to restrict the search to a given type.
|
||
</p>
|
||
|
||
<p>
|
||
Accepted types are: <code>fn</code>, <code>mod</code>,
|
||
<code>struct</code>, <code>enum</code>,
|
||
<code>trait</code>, <code>type</code>, <code>macro</code>,
|
||
and <code>const</code>.
|
||
</p>
|
||
|
||
<p>
|
||
Search functions by type signature (e.g.
|
||
<code>vec -> usize</code> or <code>* -> vec</code>)
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</aside>
|
||
|
||
|
||
|
||
<script>
|
||
window.rootPath = "../../";
|
||
window.currentCrate = "ring";
|
||
</script>
|
||
<script src="../../jquery.js"></script>
|
||
<script src="../../main.js"></script>
|
||
<script defer src="../../search-index.js"></script>
|
||
</body>
|
||
</html> |