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

Fast randomness source. More...

#include <random.h>

Collaboration diagram for FastRandomContext:
[legend]

Public Types

typedef uint64_t result_type
 

Public Member Functions

 FastRandomContext (bool fDeterministic=false) noexcept
 
 FastRandomContext (const uint256 &seed) noexcept
 Initialize with explicit seed (only for testing) More...
 
 FastRandomContext (const FastRandomContext &)=delete
 
 FastRandomContext (FastRandomContext &&)=delete
 
FastRandomContextoperator= (const FastRandomContext &)=delete
 
FastRandomContextoperator= (FastRandomContext &&from) noexcept
 Move a FastRandomContext. More...
 
uint64_t rand64 () noexcept
 Generate a random 64-bit integer. More...
 
uint64_t randbits (int bits) noexcept
 Generate a random (bits)-bit integer. More...
 
uint64_t randrange (uint64_t range) noexcept
 Generate a random integer in the range [0..range). More...
 
template<typename B = unsigned char>
std::vector< Brandbytes (size_t len)
 Generate random bytes. More...
 
void fillrand (Span< std::byte > output)
 Fill a byte Span with 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...
 
template<typename Tp >
Tp rand_uniform_delay (const Tp &time, typename Tp::duration range)
 Return the time point advanced by a uniform random duration. More...
 
template<typename Chrono >
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...
 
uint64_t operator() () noexcept
 

Static Public Member Functions

static constexpr uint64_t min ()
 
static constexpr uint64_t max ()
 

Private Member Functions

void RandomSeed ()
 
void FillBitBuffer ()
 

Private Attributes

bool requires_seed
 
ChaCha20 rng
 
uint64_t bitbuf
 
int bitbuf_size
 

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 144 of file random.h.

Member Typedef Documentation

◆ result_type

Definition at line 248 of file random.h.

Constructor & Destructor Documentation

◆ FastRandomContext() [1/4]

FastRandomContext::FastRandomContext ( bool  fDeterministic = false)
explicitnoexcept

Definition at line 738 of file random.cpp.

◆ FastRandomContext() [2/4]

FastRandomContext::FastRandomContext ( const uint256 seed)
explicitnoexcept

Initialize with explicit seed (only for testing)

Definition at line 688 of file random.cpp.

◆ FastRandomContext() [3/4]

FastRandomContext::FastRandomContext ( const FastRandomContext )
delete

◆ FastRandomContext() [4/4]

FastRandomContext::FastRandomContext ( FastRandomContext &&  )
delete

Member Function Documentation

◆ FillBitBuffer()

void FastRandomContext::FillBitBuffer ( )
inlineprivate

Definition at line 155 of file random.h.

◆ fillrand()

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

Fill a byte Span with random bytes.

Definition at line 682 of file random.cpp.

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

◆ max()

static constexpr uint64_t FastRandomContext::max ( )
inlinestaticconstexpr

Definition at line 250 of file random.h.

Here is the caller graph for this function:

◆ min()

static constexpr uint64_t FastRandomContext::min ( )
inlinestaticconstexpr

Definition at line 249 of file random.h.

Here is the caller graph for this function:

◆ operator()()

uint64_t FastRandomContext::operator() ( )
inlinenoexcept

Definition at line 251 of file random.h.

◆ operator=() [1/2]

FastRandomContext& FastRandomContext::operator= ( const FastRandomContext )
delete

◆ operator=() [2/2]

FastRandomContext & FastRandomContext::operator= ( FastRandomContext &&  from)
noexcept

Move a FastRandomContext.

If the original one is used again, it will be reseeded.

Definition at line 745 of file random.cpp.

◆ rand256()

uint256 FastRandomContext::rand256 ( )
noexcept

generate a random uint256.

Definition at line 664 of file random.cpp.

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

◆ rand32()

uint32_t FastRandomContext::rand32 ( )
inlinenoexcept

Generate a random 32-bit integer.

Definition at line 222 of file random.h.

Here is the caller graph for this function:

◆ rand64()

uint64_t FastRandomContext::rand64 ( )
inlinenoexcept

Generate a random 64-bit integer.

Definition at line 176 of file random.h.

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

◆ rand_uniform_delay()

template<typename Tp >
Tp FastRandomContext::rand_uniform_delay ( const Tp &  time,
typename Tp::duration  range 
)
inline

Return the time point advanced by a uniform random duration.

Definition at line 232 of file random.h.

Here is the caller graph for this function:

◆ rand_uniform_duration()

template<typename Chrono >
Chrono::duration FastRandomContext::rand_uniform_duration ( typename Chrono::duration  range)
inlinenoexcept

Generate a uniform random duration in the range from 0 (inclusive) to range (exclusive).

Definition at line 239 of file random.h.

Here is the caller graph for this function:

◆ randbits()

uint64_t FastRandomContext::randbits ( int  bits)
inlinenoexcept

Generate a random (bits)-bit integer.

Definition at line 185 of file random.h.

Here is the caller graph for this function:

◆ randbool()

bool FastRandomContext::randbool ( )
inlinenoexcept

Generate a random boolean.

Definition at line 228 of file random.h.

Here is the caller graph for this function:

◆ randbytes()

template<typename B >
template std::vector< std::byte > FastRandomContext::randbytes ( size_t  len)

Generate random bytes.

Definition at line 673 of file random.cpp.

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

◆ RandomSeed()

void FastRandomContext::RandomSeed ( )
private

Definition at line 657 of file random.cpp.

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

◆ randrange()

uint64_t FastRandomContext::randrange ( uint64_t  range)
inlinenoexcept

Generate a random integer in the range [0..range).

Precondition: range > 0.

Definition at line 203 of file random.h.

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

Member Data Documentation

◆ bitbuf

uint64_t FastRandomContext::bitbuf
private

Definition at line 150 of file random.h.

◆ bitbuf_size

int FastRandomContext::bitbuf_size
private

Definition at line 151 of file random.h.

◆ requires_seed

bool FastRandomContext::requires_seed
private

Definition at line 147 of file random.h.

◆ rng

ChaCha20 FastRandomContext::rng
private

Definition at line 148 of file random.h.


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