diff options
Diffstat (limited to 'src/lib/rng/hmac_drbg/hmac_drbg.h')
-rw-r--r-- | src/lib/rng/hmac_drbg/hmac_drbg.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/lib/rng/hmac_drbg/hmac_drbg.h b/src/lib/rng/hmac_drbg/hmac_drbg.h new file mode 100644 index 000000000..43729c7fa --- /dev/null +++ b/src/lib/rng/hmac_drbg/hmac_drbg.h @@ -0,0 +1,50 @@ +/* +* HMAC_DRBG (SP800-90A) +* (C) 2014 Jack Lloyd +* +* Distributed under the terms of the Botan license +*/ + +#ifndef BOTAN_HMAC_DRBG_H__ +#define BOTAN_HMAC_DRBG_H__ + +#include <botan/rng.h> +#include <botan/mac.h> + +namespace Botan { + +/** +* HMAC_DRBG (SP800-90A) +*/ +class BOTAN_DLL HMAC_DRBG : public RandomNumberGenerator + { + public: + void randomize(byte buf[], size_t buf_len); + bool is_seeded() const; + void clear(); + std::string name() const; + + void reseed(size_t poll_bits); + + void add_entropy(const byte input[], size_t input_len); + + /** + * @param mac the underlying mac function (eg HMAC(SHA-512)) + * @param underlying_rng RNG used generating inputs (eg HMAC_RNG) + */ + HMAC_DRBG(MessageAuthenticationCode* mac, + RandomNumberGenerator* underlying_rng); + + private: + void update(const byte input[], size_t input_len); + + std::unique_ptr<MessageAuthenticationCode> m_mac; + std::unique_ptr<RandomNumberGenerator> m_prng; + + secure_vector<byte> m_K, m_V; + size_t m_reseed_counter; + }; + +} + +#endif |