7#ifndef BOTAN_STATEFUL_RNG_H_
8#define BOTAN_STATEFUL_RNG_H_
11#include <botan/mutex.h>
38 size_t reseed_interval) :
39 m_underlying_rng(&rng),
40 m_entropy_sources(&entropy_sources),
41 m_reseed_interval(reseed_interval)
51 m_underlying_rng(&rng),
52 m_reseed_interval(reseed_interval)
61 m_entropy_sources(&entropy_sources),
62 m_reseed_interval(reseed_interval)
75 void initialize_with(
const uint8_t input[],
size_t length);
77 bool is_seeded() const override
final;
79 bool accepts_input() const override
final {
return true; }
87 size_t poll_bits = BOTAN_RNG_RESEED_POLL_BITS)
override final;
89 void add_entropy(
const uint8_t input[],
size_t input_len)
override final;
91 void randomize(uint8_t output[],
size_t output_len)
override final;
93 void randomize_with_input(uint8_t output[],
size_t output_len,
94 const uint8_t input[],
size_t input_len)
override final;
100 void randomize_with_ts_input(uint8_t output[],
size_t output_len)
override final;
108 size_t poll_bits = BOTAN_RNG_RESEED_POLL_BITS,
109 std::chrono::milliseconds poll_timeout = BOTAN_RNG_RESEED_DEFAULT_TIMEOUT)
override;
130 void clear() override
final;
135 virtual
void generate_output(uint8_t output[],
size_t output_len,
136 const uint8_t input[],
size_t input_len) = 0;
138 virtual
void update(const uint8_t input[],
size_t input_len) = 0;
140 virtual
void clear_state() = 0;
143 void reset_reseed_counter();
153 const
size_t m_reseed_interval;
154 uint32_t m_last_pid = 0;
161 size_t m_reseed_counter = 0;
size_t reseed_interval() const
virtual size_t security_level() const =0
Stateful_RNG(RandomNumberGenerator &rng, size_t reseed_interval)
Stateful_RNG(RandomNumberGenerator &rng, Entropy_Sources &entropy_sources, size_t reseed_interval)
Stateful_RNG(Entropy_Sources &entropy_sources, size_t reseed_interval)
virtual size_t max_number_of_bytes_per_request() const =0
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)