Bitcoin Core  27.99.0
P2P Digital Currency
Public Member Functions | Private Member Functions | Private Attributes | List of all members
FastRandomContext Class Reference

Fast randomness source. More...

#include <random.h>

Inheritance diagram for FastRandomContext:
[legend]
Collaboration diagram for FastRandomContext:
[legend]

Public Member Functions

 FastRandomContext (bool fDeterministic=false) noexcept
 Construct a FastRandomContext with GetRandHash()-based entropy (or zero key if fDeterministic). More...
 
 FastRandomContext (const uint256 &seed) noexcept
 Initialize with explicit seed (only for testing) More...
 
void Reseed (const uint256 &seed) noexcept
 Reseed with explicit seed (only for testing). More...
 
uint64_t rand64 () noexcept
 Generate a random 64-bit integer. More...
 
void fillrand (Span< std::byte > output) noexcept
 Fill a byte Span with random bytes. More...
 
- Public Member Functions inherited from RandomMixin< FastRandomContext >
constexpr RandomMixin () noexcept=default
 
 RandomMixin (const RandomMixin &)=delete
 
 RandomMixin (RandomMixin &&)=delete
 
RandomMixinoperator= (const RandomMixin &)=delete
 
RandomMixinoperator= (RandomMixin &&)=delete
 
uint64_t randbits (int bits) noexcept
 Generate a random (bits)-bit integer. More...
 
uint64_t randbits () noexcept
 Same as above, but with compile-time fixed bits count. More...
 
randrange (I range) noexcept
 Generate a random integer in the range [0..range), with range > 0. More...
 
Dur randrange (typename std::common_type_t< Dur > range) noexcept
 Generate a uniform random duration in the range [0..max). More...
 
void fillrand (Span< std::byte > span) noexcept
 Fill a Span with random bytes. More...
 
rand () noexcept
 Generate a random integer in its entire (non-negative) range. More...
 
std::vector< Brandbytes (size_t len) noexcept
 Generate random bytes. More...
 
uint32_t rand32 () noexcept
 Generate a random 32-bit integer. More...
 
uint256 rand256 () noexcept
 generate a random uint256. More...
 
bool randbool () noexcept
 Generate a random boolean. More...
 
Tp rand_uniform_delay (const Tp &time, typename Tp::duration range) noexcept
 Return the time point advanced by a uniform random duration. More...
 
requires StdChronoDuration< typename Chrono::duration > Chrono::duration rand_uniform_duration (typename Chrono::duration range) noexcept
 Generate a uniform random duration in the range from 0 (inclusive) to range (exclusive). More...
 
std::chrono::microseconds rand_exp_duration (std::chrono::microseconds mean) noexcept
 Return a duration sampled from an exponential distribution (https://en.wikipedia.org/wiki/Exponential_distribution). More...
 
uint64_t operator() () noexcept
 

Private Member Functions

void RandomSeed () noexcept
 

Private Attributes

bool requires_seed
 
ChaCha20 rng
 

Additional Inherited Members

- Public Types inherited from RandomMixin< FastRandomContext >
typedef uint64_t result_type
 
- Static Public Member Functions inherited from RandomMixin< FastRandomContext >
static constexpr uint64_t min () noexcept
 
static constexpr uint64_t max () noexcept
 
- Protected Member Functions inherited from RandomMixin< FastRandomContext >
constexpr void FlushCache () noexcept
 

Detailed Description

Fast randomness source.

This is seeded once with secure random data, but is completely deterministic and does not gather more entropy after that.

This class is not thread-safe.

Definition at line 376 of file random.h.

Constructor & Destructor Documentation

◆ FastRandomContext() [1/2]

FastRandomContext::FastRandomContext ( bool  fDeterministic = false)
explicitnoexcept

Construct a FastRandomContext with GetRandHash()-based entropy (or zero key if fDeterministic).

Definition at line 762 of file random.cpp.

◆ FastRandomContext() [2/2]

FastRandomContext::FastRandomContext ( const uint256 seed)
explicitnoexcept

Initialize with explicit seed (only for testing)

Definition at line 705 of file random.cpp.

Member Function Documentation

◆ fillrand()

void FastRandomContext::fillrand ( Span< std::byte >  output)
noexcept

Fill a byte Span with random bytes.

This overrides the RandomMixin version.

Definition at line 699 of file random.cpp.

Here is the caller graph for this function:

◆ rand64()

uint64_t FastRandomContext::rand64 ( )
inlinenoexcept

Generate a random 64-bit integer.

Definition at line 395 of file random.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RandomSeed()

void FastRandomContext::RandomSeed ( )
privatenoexcept

Definition at line 692 of file random.cpp.

Here is the call graph for this function:

◆ Reseed()

void FastRandomContext::Reseed ( const uint256 seed)
noexcept

Reseed with explicit seed (only for testing).

Definition at line 707 of file random.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ requires_seed

bool FastRandomContext::requires_seed
private

Definition at line 379 of file random.h.

◆ rng

ChaCha20 FastRandomContext::rng
private

Definition at line 380 of file random.h.


The documentation for this class was generated from the following files: