/* * Auto Seeded RNG * (C) 2008,2016 Jack Lloyd * * Botan is released under the Simplified BSD License (see license.txt) */ #ifndef BOTAN_AUTO_SEEDING_RNG_H__ #define BOTAN_AUTO_SEEDING_RNG_H__ #include namespace Botan { class Stateful_RNG; /** * A userspace PRNG */ class BOTAN_DLL AutoSeeded_RNG final : public RandomNumberGenerator { public: void randomize(byte out[], size_t len) override; void randomize_with_input(byte output[], size_t output_len, const byte input[], size_t input_len) override; bool is_seeded() const override; void force_reseed(); size_t reseed(Entropy_Sources& srcs, size_t poll_bits = BOTAN_RNG_RESEED_POLL_BITS, std::chrono::milliseconds poll_timeout = BOTAN_RNG_RESEED_DEFAULT_TIMEOUT) override; void add_entropy(const byte in[], size_t len) override; std::string name() const override; void clear() override; /** * If no RNG or entropy sources are provided to AutoSeeded_RNG, it uses the system RNG * (if available) or else a default group of entropy sources (all other systems) to * gather seed material. */ AutoSeeded_RNG(size_t reseed_interval = BOTAN_RNG_DEFAULT_RESEED_INTERVAL); AutoSeeded_RNG(RandomNumberGenerator& underlying_rng, size_t reseed_interval = BOTAN_RNG_DEFAULT_RESEED_INTERVAL); AutoSeeded_RNG(Entropy_Sources& entropy_sources, size_t reseed_interval = BOTAN_RNG_DEFAULT_RESEED_INTERVAL); AutoSeeded_RNG(RandomNumberGenerator& underlying_rng, Entropy_Sources& entropy_sources, size_t reseed_interval = BOTAN_RNG_DEFAULT_RESEED_INTERVAL); ~AutoSeeded_RNG(); private: std::unique_ptr m_rng; }; } #endif