xref: /third_party/lzma/CPP/7zip/Crypto/RandGen.h (revision 370b324c)
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