void NonblockingRng::GenerateBlock(byte *output, size_t size) { #ifdef CRYPTOPP_WIN32_AVAILABLE # ifdef WORKAROUND_MS_BUG_Q258000 static MicrosoftCryptoProvider m_Provider; # endif if (!CryptGenRandom(m_Provider.GetProviderHandle(), (DWORD)size, output)) throw OS_RNG_Err("CryptGenRandom"); #else if (read(m_fd, output, size) != size) throw OS_RNG_Err("read /dev/urandom"); #endif }
void RandomNumberGenerator::generateBlock(uint8_t * output, unsigned count) { #ifdef WIN32 # ifdef WORKAROUND_MS_BUG_Q258000 static MicrosoftCryptoProvider m_provider; # endif if (!CryptGenRandom(m_provider.GetProviderHandle(), count, output)) { throw std::runtime_error("CryptGenRandom"); } #else // WIN32 if (read(m_fd, output, count) != count) { throw std::runtime_error("read /dev/urandom"); } #endif // WIN32 }