Esempio n. 1
0
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
}
Esempio n. 2
0
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
}