xref: /aosp_15_r20/external/lzma/CPP/7zip/Crypto/RandGen.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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