pub trait Host {
    // Required methods
    fn get_random_bytes(&mut self, len: u64) -> Result<Vec<u8>>;
    fn get_random_u64(&mut self) -> Result<u64>;
    fn insecure_random(&mut self) -> Result<(u64, u64)>;
}

Required Methods§

source

fn get_random_bytes(&mut self, len: u64) -> Result<Vec<u8>>

Return len cryptographically-secure pseudo-random bytes.

This function must produce data from an adequately seeded cryptographically-secure pseudo-random number generator (CSPRNG), so it must not block, from the perspective of the calling program, and the returned data is always unpredictable.

This function must always return fresh pseudo-random data. Deterministic environments must omit this function, rather than implementing it with deterministic data.

source

fn get_random_u64(&mut self) -> Result<u64>

Return a cryptographically-secure pseudo-random u64 value.

This function returns the same type of pseudo-random data as get-random-bytes, represented as a u64.

source

fn insecure_random(&mut self) -> Result<(u64, u64)>

Return a 128-bit value that may contain a pseudo-random value.

The returned value is not required to be computed from a CSPRNG, and may even be entirely deterministic. Host implementations are encouraged to provide pseudo-random values to any program exposed to attacker-controlled content, to enable DoS protection built into many languages’ hash-map implementations.

This function is intended to only be called once, by a source language to initialize Denial Of Service (DoS) protection in its hash-map implementation.

Expected future evolution

This will likely be changed to a value import, to prevent it from being called multiple times and potentially used for purposes other than DoS protection.

Implementors§