aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/rng/auto_rng.h
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2016-06-30 13:15:30 -0400
committerJack Lloyd <[email protected]>2016-07-17 10:43:40 -0400
commit93922f20f04058ec624f7db3c74d8aa5a3d06440 (patch)
tree81144cfacced43c68c4385683ee0c123a1987042 /src/lib/rng/auto_rng.h
parent4c5847412d41756aab738a3746666cfaffe5d4af (diff)
Add Stateful_RNG
Handles fork checking for HMAC_RNG and HMAC_DRBG AutoSeeded_RNG change - switch to HMAC_DRBG as default. Start removing the io buffer from entropy poller. Update default RNG poll bits to 256. Fix McEliece test, was using wrong RNG API. Update docs.
Diffstat (limited to 'src/lib/rng/auto_rng.h')
-rw-r--r--src/lib/rng/auto_rng.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/lib/rng/auto_rng.h b/src/lib/rng/auto_rng.h
new file mode 100644
index 000000000..b51390ae2
--- /dev/null
+++ b/src/lib/rng/auto_rng.h
@@ -0,0 +1,47 @@
+/*
+* Auto Seeded RNG
+* (C) 2008 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 <botan/rng.h>
+
+namespace Botan {
+
+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 { return m_rng->is_seeded(); }
+
+ void clear() override { m_rng->clear(); m_counter = 0; }
+
+ std::string name() const override { return m_rng->name(); }
+
+ size_t reseed_with_sources(Entropy_Sources& srcs,
+ size_t poll_bits,
+ std::chrono::milliseconds poll_timeout) override
+ {
+ return m_rng->reseed_with_sources(srcs, poll_bits, poll_timeout);
+ }
+
+ void add_entropy(const byte in[], size_t len) override
+ { m_rng->add_entropy(in, len); }
+
+ AutoSeeded_RNG(size_t bytes_before_reseed = BOTAN_RNG_MAX_OUTPUT_BEFORE_RESEED);
+ private:
+ std::unique_ptr<RandomNumberGenerator> m_rng;
+ uint32_t m_counter = 0;
+ };
+
+}
+
+#endif