1 // RandGen.h 2 3 #ifndef ZIP7_INC_CRYPTO_RAND_GEN_H 4 #define ZIP7_INC_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 MY_ALIGN (16) 35 extern CRandomGenerator g_RandomGenerator; 36 37 #define MY_RAND_GEN(data, size) g_RandomGenerator.Generate(data, size) 38 39 #endif 40 41 #endif 42