6 #ifndef CRYPTOPP_OSRNG_H 7 #define CRYPTOPP_OSRNG_H 11 #if !defined(NO_OS_DEPENDENCE) && defined(OS_RNG_AVAILABLE) 32 #ifdef NONBLOCKING_RNG_AVAILABLE 34 #ifdef CRYPTOPP_WIN32_AVAILABLE 45 #if defined(USE_MS_CRYPTOAPI) 46 # if defined(__CYGWIN__) && defined(__x86_64__) 47 typedef unsigned long long ProviderHandle;
48 # elif defined(WIN64) || defined(_WIN64) 49 typedef unsigned __int64 ProviderHandle;
51 typedef unsigned long ProviderHandle;
53 #elif defined(USE_MS_CNGAPI) 55 typedef PVOID ProviderHandle;
56 #endif // USE_MS_CRYPTOAPI or USE_MS_CNGAPI 68 ProviderHandle m_hProvider;
71 #if defined(_MSC_VER) && defined(USE_MS_CRYPTOAPI) 72 # pragma comment(lib, "advapi32.lib") 75 #if defined(_MSC_VER) && defined(USE_MS_CNGAPI) 76 # pragma comment(lib, "bcrypt.lib") 79 #endif // CRYPTOPP_WIN32_AVAILABLE 87 CRYPTOPP_STATIC_CONSTEXPR
const char* StaticAlgorithmName() {
return "NonblockingRng"; }
101 #ifdef CRYPTOPP_WIN32_AVAILABLE 110 #if defined(BLOCKING_RNG_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) 121 CRYPTOPP_STATIC_CONSTEXPR
const char* StaticAlgorithmName() {
return "BlockingRng"; }
158 CRYPTOPP_STATIC_CONSTEXPR
const char* StaticAlgorithmName() {
return "AutoSeededRandomPool"; }
168 {Reseed(blocking, seedSize);}
173 void Reseed(
bool blocking =
false,
unsigned int seedSize = 32);
184 template <
class BLOCK_CIPHER>
188 static std::string StaticAlgorithmName() {
return std::string(
"AutoSeededX917RNG(") + BLOCK_CIPHER::StaticAlgorithmName() + std::string(
")"); }
199 {
if (autoSeed)
Reseed(blocking);}
208 void Reseed(
bool blocking =
false,
const byte *additionalEntropy = NULLPTR,
size_t length = 0);
217 void Reseed(
const byte *key,
size_t keylength,
const byte *seed,
const byte *timeVector);
230 template <
class BLOCK_CIPHER>
233 m_rng.reset(
new X917RNG(
new typename BLOCK_CIPHER::Encryption(key, keylength), seed, timeVector));
236 template <
class BLOCK_CIPHER>
239 SecByteBlock seed(BLOCK_CIPHER::BLOCKSIZE + BLOCK_CIPHER::DEFAULT_KEYLENGTH);
248 hash.
Update(input, length);
251 key = seed + BLOCK_CIPHER::BLOCKSIZE;
253 while (memcmp(key, seed,
STDMIN((
unsigned int)BLOCK_CIPHER::BLOCKSIZE, (
unsigned int)BLOCK_CIPHER::DEFAULT_KEYLENGTH)) == 0);
255 Reseed(key, BLOCK_CIPHER::DEFAULT_KEYLENGTH, seed, NULLPTR);
258 template <
class BLOCK_CIPHER>
262 typename BLOCK_CIPHER::Encryption bc;
263 return bc.AlgorithmProvider();
268 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) 276 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 281 #endif // CRYPTOPP_DOXYGEN_PROCESSING Base class for all exceptions thrown by the library.
AutoSeededRandomPool(bool blocking=false, unsigned int seedSize=32)
Construct an AutoSeededRandomPool.
Randomness Pool based on AES-256.
Wrapper class for /dev/random and /dev/srandom.
Class file for Randomness Pool.
void Reseed(bool blocking=false, const byte *additionalEntropy=NULL, size_t length=0)
Reseed an AutoSeededX917RNG.
virtual void GenerateBlock(byte *output, size_t size)
Generate random array of bytes.
bool CanIncorporateEntropy() const
Determines if a generator can accept additional entropy.
Abstract base classes that provide a uniform interface to this library.
Classes for automatic resource management.
std::string AlgorithmProvider() const
Retrieve the provider of this algorithm.
Library configuration file.
void Update(const byte *input, size_t length)
Updates a hash with additional input.
Interface for random number generators.
void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword length)
Generate random bytes into a BufferedTransformation.
Exception thrown when an operating system error is encountered.
Automatically Seeded Randomness Pool.
Class file for the AES cipher (Rijndael)
const T1 UnsignedMin(const T1 &a, const T2 &b)
Safe comparison of values that could be neagtive and incorrectly promoted.
Miscellaneous classes for RNGs.
Automatically Seeded X9.17 RNG.
void TruncatedFinal(byte *digest, size_t digestSize)
Computes the hash of the current message.
const T & STDMIN(const T &a, const T &b)
Replacement function for std::min.
Classes for SHA-1 and SHA-2 family of message digests.
Wrapper class for /dev/random and /dev/srandom.
Classes and functions for the FIPS 140-2 validated library.
void OS_GenerateRandomBlock(bool blocking, byte *output, size_t size)
OS_GenerateRandomBlock.
AutoSeededX917RNG(bool blocking=false, bool autoSeed=true)
Construct an AutoSeededX917RNG.
Crypto++ library namespace.
ProviderHandle GetProviderHandle() const
Retrieves the provider handle.
Ensures an object is not copyable.
size_type size() const
Provides the count of elements in the SecBlock.
virtual void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword length)
Generate random bytes into a BufferedTransformation.
void IncorporateEntropy(const byte *input, size_t length)
Update RNG state with additional unpredictable values.
A typedef providing a default generator.