1 // RandGen.h 2 3 #ifndef __CRYPTO_RAND_GEN_H 4 #define __CRYPTO_RAND_GEN_H 5 6 #include "../../../C/Sha256.h" 7 8 #ifdef _WIN64 9 // #define USE_STATIC_SYSTEM_RAND 10 #endif 11 12 #ifdef USE_STATIC_SYSTEM_RAND 13 14 #ifdef _WIN32 15 #include <ntsecapi.h> 16 #define MY_RAND_GEN(data, size) RtlGenRandom(data, size) 17 #else 18 #define MY_RAND_GEN(data, size) getrandom(data, size, 0) 19 #endif 20 21 #else 22 23 class CRandomGenerator 24 { 25 Byte _buff[SHA256_DIGEST_SIZE]; 26 bool _needInit; 27 28 void Init(); 29 public: CRandomGenerator()30 CRandomGenerator(): _needInit(true) {}; 31 void Generate(Byte *data, unsigned size); 32 }; 33 34 extern CRandomGenerator g_RandomGenerator; 35 36 #define MY_RAND_GEN(data, size) g_RandomGenerator.Generate(data, size) 37 38 #endif 39 40 #endif 41