From f6669e2f051fa3ba4f85962e17fc6b59fe1b4bfb Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Tue, 16 Jun 2015 16:51:26 +0200 Subject: [PATCH] FixedSizeData offers generating PseudoRandom or OsRandom blocks --- data/FixedSizeData.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/data/FixedSizeData.h b/data/FixedSizeData.h index 7dc7dcba..a99a12ff 100644 --- a/data/FixedSizeData.h +++ b/data/FixedSizeData.h @@ -18,7 +18,8 @@ public: static constexpr unsigned int BINARY_LENGTH = SIZE; static constexpr unsigned int STRING_LENGTH = 2 * BINARY_LENGTH; // Hex encoding - static FixedSizeData CreateRandom(); + static FixedSizeData CreatePseudoRandom(); + static FixedSizeData CreateOSRandom(); static FixedSizeData FromString(const std::string &data); std::string ToString() const; @@ -30,7 +31,7 @@ public: private: FixedSizeData() {} - static CryptoPP::AutoSeededRandomPool &RandomPool(); + static CryptoPP::AutoSeededRandomPool &PseudoRandomPool(); unsigned char _data[BINARY_LENGTH]; }; @@ -44,15 +45,23 @@ template constexpr unsigned int FixedSizeData::BINARY_L template constexpr unsigned int FixedSizeData::STRING_LENGTH; template -CryptoPP::AutoSeededRandomPool &FixedSizeData::RandomPool() { +CryptoPP::AutoSeededRandomPool &FixedSizeData::PseudoRandomPool() { + //TODO Make seeding use blocking=true (aka /dev/random instead of /dev/urandom) or offer a configuration option? static CryptoPP::AutoSeededRandomPool singleton; return singleton; } template -FixedSizeData FixedSizeData::CreateRandom() { +FixedSizeData FixedSizeData::CreatePseudoRandom() { FixedSizeData result; - RandomPool().GenerateBlock(result._data, BINARY_LENGTH); + PseudoRandomPool().GenerateBlock(result._data, BINARY_LENGTH); + return result; +} + +template +FixedSizeData FixedSizeData::CreateOSRandom() { + FixedSizeData result; + CryptoPP::OS_GenerateRandomBlock(true, result._data, BINARY_LENGTH); return result; }