Botan 3.7.1
Crypto and TLS for C&
Botan::Entropy_Sources Class Referencefinal

#include <entropy_src.h>

Public Member Functions

void add_source (std::unique_ptr< Entropy_Source > src)
 
std::vector< std::string > enabled_sources () const
 
 Entropy_Sources ()=default
 
 Entropy_Sources (const Entropy_Sources &other)=delete
 
 Entropy_Sources (const std::vector< std::string > &sources)
 
 Entropy_Sources (Entropy_Sources &&other)=delete
 
Entropy_Sourcesoperator= (const Entropy_Sources &other)=delete
 
size_t poll (RandomNumberGenerator &rng, size_t bits, std::chrono::milliseconds timeout)
 
size_t poll_just (RandomNumberGenerator &rng, std::string_view src)
 

Static Public Member Functions

static Entropy_Sourcesglobal_sources ()
 

Detailed Description

Definition at line 55 of file entropy_src.h.

Constructor & Destructor Documentation

◆ Entropy_Sources() [1/4]

Botan::Entropy_Sources::Entropy_Sources ( )
default

◆ Entropy_Sources() [2/4]

Botan::Entropy_Sources::Entropy_Sources ( const std::vector< std::string > & sources)
explicit

Definition at line 199 of file entropy_srcs.cpp.

199 {
200 for(auto&& src_name : sources) {
202 }
203}
static std::unique_ptr< Entropy_Source > create(std::string_view type)
void add_source(std::unique_ptr< Entropy_Source > src)

References add_source(), and Botan::Entropy_Source::create().

◆ Entropy_Sources() [3/4]

Botan::Entropy_Sources::Entropy_Sources ( const Entropy_Sources & other)
delete

◆ Entropy_Sources() [4/4]

Botan::Entropy_Sources::Entropy_Sources ( Entropy_Sources && other)
delete

Member Function Documentation

◆ add_source()

void Botan::Entropy_Sources::add_source ( std::unique_ptr< Entropy_Source > src)

Definition at line 153 of file entropy_srcs.cpp.

153 {
154 if(src) {
155 m_srcs.push_back(std::move(src));
156 }
157}

Referenced by Entropy_Sources().

◆ enabled_sources()

std::vector< std::string > Botan::Entropy_Sources::enabled_sources ( ) const

Definition at line 159 of file entropy_srcs.cpp.

159 {
160 std::vector<std::string> sources;
161 sources.reserve(m_srcs.size());
162 for(const auto& src : m_srcs) {
163 sources.push_back(src->name());
164 }
165 return sources;
166}

◆ global_sources()

Entropy_Sources & Botan::Entropy_Sources::global_sources ( )
static

Definition at line 205 of file entropy_srcs.cpp.

205 {
206 static Entropy_Sources global_entropy_sources(BOTAN_ENTROPY_DEFAULT_SOURCES);
207
208 return global_entropy_sources;
209}
#define BOTAN_ENTROPY_DEFAULT_SOURCES
Definition build.h:525

References BOTAN_ENTROPY_DEFAULT_SOURCES.

Referenced by Botan::AutoSeeded_RNG::AutoSeeded_RNG().

◆ operator=()

Entropy_Sources & Botan::Entropy_Sources::operator= ( const Entropy_Sources & other)
delete

◆ poll()

size_t Botan::Entropy_Sources::poll ( RandomNumberGenerator & rng,
size_t bits,
std::chrono::milliseconds timeout )

Poll all sources to collect bits of entropy with a timeout. Entropy collection is aborted as soon as either the requested number of bits are obtained or the timeout runs out. If the target system does not provide a clock, the timeout is ignored.

Note that the timeout is cooperative. If the poll() method of an entropy source blocks forever, this invocation will potentially also block.

Returns
the number of bits collected from the entropy sources

Definition at line 168 of file entropy_srcs.cpp.

168 {
169#if defined(BOTAN_TARGET_OS_HAS_SYSTEM_CLOCK)
170 typedef std::chrono::system_clock clock;
171 auto timeout_expired = [to = clock::now() + timeout] { return clock::now() > to; };
172#else
173 auto timeout_expired = [] { return false; };
174#endif
175
176 size_t bits_collected = 0;
177
178 for(auto& src : m_srcs) {
179 bits_collected += src->poll(rng);
180
181 if(bits_collected >= poll_bits || timeout_expired()) {
182 break;
183 }
184 }
185
186 return bits_collected;
187}

Referenced by Botan::RandomNumberGenerator::reseed().

◆ poll_just()

size_t Botan::Entropy_Sources::poll_just ( RandomNumberGenerator & rng,
std::string_view src )

Poll just a single named source. Ordinally only used for testing

Definition at line 189 of file entropy_srcs.cpp.

189 {
190 for(auto& src : m_srcs) {
191 if(src->name() == the_src) {
192 return src->poll(rng);
193 }
194 }
195
196 return 0;
197}

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