57 lines
1.2 KiB
C++
57 lines
1.2 KiB
C++
/*
|
|
* 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_
|