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