/* * File: Random.h * * Copyright (c) Freescale Semiconductor, Inc. All rights reserved. * See included license file for license details. */ #if !defined(_Random_h_) #define _Random_h_ #include "stdafx.h" #ifdef WIN32 /*! * This class is from the crypto++ library. */ class MicrosoftCryptoProvider { public: MicrosoftCryptoProvider(); ~MicrosoftCryptoProvider(); #if defined(_WIN64) typedef unsigned __int64 ProviderHandle; // type HCRYPTPROV, avoid #include <windows.h> #else typedef unsigned long ProviderHandle; #endif ProviderHandle GetProviderHandle() const {return m_hProvider;} private: ProviderHandle m_hProvider; }; #pragma comment(lib, "advapi32.lib") #endif // WIN32 /*! * Encapsulates the Windows CryptoAPI's CryptGenRandom or /dev/urandom on Unix systems. */ class RandomNumberGenerator { public: RandomNumberGenerator(); ~RandomNumberGenerator(); uint8_t generateByte(); void generateBlock(uint8_t * output, unsigned count); protected: #ifdef WIN32 # ifndef WORKAROUND_MS_BUG_Q258000 MicrosoftCryptoProvider m_provider; # endif #else // WIN32 int m_fd; #endif // WIN32 }; #endif // _Random_h_ |