xref: /netbsd-src/external/bsd/elftosb/dist/common/Random.h (revision 993229b6fea628ff8b1fa09146c80b0cfb2768eb)
1 /*
2  * File:	Random.h
3  *
4  * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
5  * See included license file for license details.
6  */
7 #if !defined(_Random_h_)
8 #define _Random_h_
9 
10 #include "stdafx.h"
11 
12 #ifdef WIN32
13 /*!
14  * This class is from the crypto++ library.
15  */
16 class MicrosoftCryptoProvider
17 {
18 public:
19 	MicrosoftCryptoProvider();
20 	~MicrosoftCryptoProvider();
21 #if defined(_WIN64)
22 	typedef unsigned __int64 ProviderHandle;	// type HCRYPTPROV, avoid #include <windows.h>
23 #else
24 	typedef unsigned long ProviderHandle;
25 #endif
GetProviderHandle()26 	ProviderHandle GetProviderHandle() const {return m_hProvider;}
27 private:
28 	ProviderHandle m_hProvider;
29 };
30 
31 #pragma comment(lib, "advapi32.lib")
32 #endif	// WIN32
33 
34 /*!
35  * Encapsulates the Windows CryptoAPI's CryptGenRandom or /dev/urandom on Unix systems.
36  */
37 class RandomNumberGenerator
38 {
39 public:
40 	RandomNumberGenerator();
41 	~RandomNumberGenerator();
42 
43 	uint8_t generateByte();
44 	void generateBlock(uint8_t * output, unsigned count);
45 
46 protected:
47 #ifdef WIN32
48 #	ifndef WORKAROUND_MS_BUG_Q258000
49 		MicrosoftCryptoProvider m_provider;
50 #	endif
51 #else	// WIN32
52 	int m_fd;
53 #endif	// WIN32
54 };
55 
56 
57 #endif // _Random_h_
58