1370b324cSopenharmony_ci// RandGen.h 2370b324cSopenharmony_ci 3370b324cSopenharmony_ci#ifndef ZIP7_INC_CRYPTO_RAND_GEN_H 4370b324cSopenharmony_ci#define ZIP7_INC_CRYPTO_RAND_GEN_H 5370b324cSopenharmony_ci 6370b324cSopenharmony_ci#include "../../../C/Sha256.h" 7370b324cSopenharmony_ci 8370b324cSopenharmony_ci#ifdef _WIN64 9370b324cSopenharmony_ci// #define USE_STATIC_SYSTEM_RAND 10370b324cSopenharmony_ci#endif 11370b324cSopenharmony_ci 12370b324cSopenharmony_ci#ifdef USE_STATIC_SYSTEM_RAND 13370b324cSopenharmony_ci 14370b324cSopenharmony_ci#ifdef _WIN32 15370b324cSopenharmony_ci#include <ntsecapi.h> 16370b324cSopenharmony_ci#define MY_RAND_GEN(data, size) RtlGenRandom(data, size) 17370b324cSopenharmony_ci#else 18370b324cSopenharmony_ci#define MY_RAND_GEN(data, size) getrandom(data, size, 0) 19370b324cSopenharmony_ci#endif 20370b324cSopenharmony_ci 21370b324cSopenharmony_ci#else 22370b324cSopenharmony_ci 23370b324cSopenharmony_ciclass CRandomGenerator 24370b324cSopenharmony_ci{ 25370b324cSopenharmony_ci Byte _buff[SHA256_DIGEST_SIZE]; 26370b324cSopenharmony_ci bool _needInit; 27370b324cSopenharmony_ci 28370b324cSopenharmony_ci void Init(); 29370b324cSopenharmony_cipublic: 30370b324cSopenharmony_ci CRandomGenerator(): _needInit(true) {} 31370b324cSopenharmony_ci void Generate(Byte *data, unsigned size); 32370b324cSopenharmony_ci}; 33370b324cSopenharmony_ci 34370b324cSopenharmony_ciMY_ALIGN (16) 35370b324cSopenharmony_ciextern CRandomGenerator g_RandomGenerator; 36370b324cSopenharmony_ci 37370b324cSopenharmony_ci#define MY_RAND_GEN(data, size) g_RandomGenerator.Generate(data, size) 38370b324cSopenharmony_ci 39370b324cSopenharmony_ci#endif 40370b324cSopenharmony_ci 41370b324cSopenharmony_ci#endif 42