diff options
author | lloyd <[email protected]> | 2010-03-19 15:59:45 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2010-03-19 15:59:45 +0000 |
commit | 1418ba24b73b8d9e4af67950fee38a02e7f1ac75 (patch) | |
tree | feeb7add6cc5cd172579cb1326bfe3fcd6f4830e /src/rng/auto_rng/auto_rng.h | |
parent | 87cb43641ca7000b6d97dcb4d8a5e716a07fcf76 (diff) |
There are some nasty API problems that are caused by having to pass a
PRNG everywhere. The removal of the global PRNG was generated by a
desire to remove the global library state entirely. However the real
point of this was to remove the use of globally visible _mutable_
state; of the mutable state, the PRNG is probably the least important,
and the most useful to share. And it seems unlikely that thread
contention would be a major issue in the PRNG.
Add back a global PRNG to Library_State. Use lazy initialization, so
apps that don't ever use a PRNG don't need a seeding step. Then have
AutoSeeded_RNG call that global PRNG.
Offer once again
RandomNumberGenerator& Library_State::global_rng();
which returns a reference to the global PRNG.
This RNG object serializes access to itself with a mutex.
Remove the hack known as Blinding::choose_nonce, replace with using
the global PRNG to choose a blinding nonce
Diffstat (limited to 'src/rng/auto_rng/auto_rng.h')
-rw-r--r-- | src/rng/auto_rng/auto_rng.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/rng/auto_rng/auto_rng.h b/src/rng/auto_rng/auto_rng.h index a15b11b13..9a93fee8f 100644 --- a/src/rng/auto_rng/auto_rng.h +++ b/src/rng/auto_rng/auto_rng.h @@ -9,31 +9,32 @@ #define BOTAN_AUTO_SEEDING_RNG_H__ #include <botan/rng.h> +#include <botan/libstate.h> #include <string> namespace Botan { -/** -* RNG that attempts to seed itself -*/ class BOTAN_DLL AutoSeeded_RNG : public RandomNumberGenerator { public: void randomize(byte out[], u32bit len) { rng->randomize(out, len); } - bool is_seeded() const - { return rng->is_seeded(); } + + bool is_seeded() const { return rng->is_seeded(); } + void clear() { rng->clear(); } - std::string name() const - { return "AutoSeeded(" + rng->name() + ")"; } + + std::string name() const { return rng->name(); } void reseed(u32bit poll_bits = 256) { rng->reseed(poll_bits); } + void add_entropy_source(EntropySource* es) { rng->add_entropy_source(es); } + void add_entropy(const byte in[], u32bit len) { rng->add_entropy(in, len); } - AutoSeeded_RNG(u32bit poll_bits = 256); + AutoSeeded_RNG() { rng = &global_state().global_rng(); } ~AutoSeeded_RNG() { delete rng; } private: RandomNumberGenerator* rng; |