4 * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5 * See included license file for license details.
13 #define _WIN32_WINNT 0x0400
27 MicrosoftCryptoProvider::MicrosoftCryptoProvider()
29 if(!CryptAcquireContext(&m_hProvider, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
31 throw std::runtime_error("CryptAcquireContext");
35 MicrosoftCryptoProvider::~MicrosoftCryptoProvider()
37 CryptReleaseContext(m_hProvider, 0);
42 RandomNumberGenerator::RandomNumberGenerator()
45 m_fd = open("/dev/urandom",O_RDONLY);
48 throw std::runtime_error("open /dev/urandom");
53 RandomNumberGenerator::~RandomNumberGenerator()
60 uint8_t RandomNumberGenerator::generateByte()
63 generateBlock(&result, 1);
67 void RandomNumberGenerator::generateBlock(uint8_t * output, unsigned count)
70 # ifdef WORKAROUND_MS_BUG_Q258000
71 static MicrosoftCryptoProvider m_provider;
73 if (!CryptGenRandom(m_provider.GetProviderHandle(), count, output))
75 throw std::runtime_error("CryptGenRandom");
78 if (read(m_fd, output, count) != count)
80 throw std::runtime_error("read /dev/urandom");