6 #ifndef CRYPTOPP_OSRNG_H 7 #define CRYPTOPP_OSRNG_H 11 #if !defined(OS_NO_DEPENDENCE) && defined(OS_RNG_AVAILABLE) 30 OS_RNG_Err(
const std::string &operation);
33 #ifdef NONBLOCKING_RNG_AVAILABLE 35 #ifdef CRYPTOPP_WIN32_AVAILABLE 43 MicrosoftCryptoProvider();
44 ~MicrosoftCryptoProvider();
47 #if defined(USE_MS_CRYPTOAPI) 48 # if defined(__CYGWIN__) && defined(__x86_64__) 49 typedef unsigned long long ProviderHandle;
50 # elif defined(WIN64) || defined(_WIN64) 51 typedef unsigned __int64 ProviderHandle;
53 typedef unsigned long ProviderHandle;
55 #elif defined(USE_MS_CNGAPI) 57 typedef PVOID ProviderHandle;
58 #endif // USE_MS_CRYPTOAPI or USE_MS_CNGAPI 67 ProviderHandle GetProviderHandle()
const {
return m_hProvider;}
70 ProviderHandle m_hProvider;
73 #if defined(_MSC_VER) && defined(USE_MS_CRYPTOAPI) 74 # pragma comment(lib, "advapi32.lib") 77 #if defined(_MSC_VER) && defined(USE_MS_CNGAPI) 78 # pragma comment(lib, "bcrypt.lib") 81 #endif //CRYPTOPP_WIN32_AVAILABLE 101 #ifdef CRYPTOPP_WIN32_AVAILABLE 102 MicrosoftCryptoProvider m_Provider;
110 #if defined(BLOCKING_RNG_AVAILABLE) || defined(CRYPTOPP_DOXYGEN_PROCESSING) 159 explicit AutoSeededRandomPool(
bool blocking =
false,
unsigned int seedSize = 32)
160 {Reseed(blocking, seedSize);}
165 void Reseed(
bool blocking =
false,
unsigned int seedSize = 32);
177 template <
class BLOCK_CIPHER>
187 explicit AutoSeededX917RNG(
bool blocking =
false,
bool autoSeed =
true)
188 {
if (autoSeed) Reseed(blocking);}
197 void Reseed(
bool blocking =
false,
const byte *additionalEntropy = NULL,
size_t length = 0);
206 void Reseed(
const byte *key,
size_t keylength,
const byte *seed,
const byte *timeVector);
208 bool CanIncorporateEntropy()
const {
return true;}
209 void IncorporateEntropy(
const byte *input,
size_t length) {Reseed(
false, input, length);}
211 {m_rng->GenerateIntoBufferedTransformation(target, channel, length);}
217 template <
class BLOCK_CIPHER>
218 void AutoSeededX917RNG<BLOCK_CIPHER>::Reseed(
const byte *key,
size_t keylength,
const byte *seed,
const byte *timeVector)
220 m_rng.
reset(
new X917RNG(
new typename BLOCK_CIPHER::Encryption(key, keylength), seed, timeVector));
223 template <
class BLOCK_CIPHER>
224 void AutoSeededX917RNG<BLOCK_CIPHER>::Reseed(
bool blocking,
const byte *input,
size_t length)
226 SecByteBlock seed(BLOCK_CIPHER::BLOCKSIZE + BLOCK_CIPHER::DEFAULT_KEYLENGTH);
230 OS_GenerateRandomBlock(blocking, seed, seed.size());
234 hash.
Update(seed, seed.size());
235 hash.
Update(input, length);
238 key = seed + BLOCK_CIPHER::BLOCKSIZE;
240 while (memcmp(key, seed,
STDMIN((
unsigned int)BLOCK_CIPHER::BLOCKSIZE, (
unsigned int)BLOCK_CIPHER::DEFAULT_KEYLENGTH)) == 0);
242 Reseed(key, BLOCK_CIPHER::DEFAULT_KEYLENGTH, seed, NULL);
247 #if defined(CRYPTOPP_DOXYGEN_PROCESSING) 248 class DefaultAutoSeededRNG {}
256 #if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 257 typedef AutoSeededX917RNG<AES> DefaultAutoSeededRNG;
259 typedef AutoSeededRandomPool DefaultAutoSeededRNG;
261 #endif // CRYPTOPP_DOXYGEN_PROCESSING Base class for all exceptions thrown by the library.
Randomness Pool based on AES-256.
Class file for Randomness Pool.
virtual void GenerateBlock(byte *output, size_t size)
Generate random array of bytes.
#define NAMESPACE_BEGIN(x)
#define CRYPTOPP_DLL_TEMPLATE_CLASS
Abstract base classes that provide a uniform interface to this library.
Classes for automatic resource management.
Library configuration file.
void Update(const byte *input, size_t length)
Updates a hash with additional input.
Interface for random number generators.
Pointer that overloads operator ->
const T1 UnsignedMin(const T1 &a, const T2 &b)
Safe comparison of values that could be neagtive and incorrectly promoted.
Miscellaneous classes for RNGs.
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.
Classes and functions for the FIPS 140-2 validated library.
uint8_t const size_t const size
Ensures an object is not copyable.