[+] AuRNG::SetSecureRNGBackendOverload
[+] AuRNG::GetSecureRNGBackendOverload [+] AuRNG::GetSecureRNGBackend
This commit is contained in:
parent
8c101cea6f
commit
e199172428
@ -13,6 +13,13 @@
|
||||
|
||||
namespace Aurora::RNG
|
||||
{
|
||||
// May return any length between 1 and uBytes
|
||||
using RngGetBytesProvider_f = AuUInt32(*)(AuUInt8 *pBuffer, AuUInt32 uBytes);
|
||||
|
||||
AUKN_SYM void SetSecureRNGBackendOverload(RngGetBytesProvider_f pSecureBackend);
|
||||
AUKN_SYM RngGetBytesProvider_f GetSecureRNGBackendOverload();
|
||||
AUKN_SYM RngGetBytesProvider_f GetSecureRNGBackend();
|
||||
|
||||
AUKN_SYM void ReadSecureRNG(Memory::MemoryViewWrite writeView);
|
||||
AUKN_SYM void ReadFastRNG (Memory::MemoryViewWrite writeView);
|
||||
|
||||
|
@ -43,6 +43,8 @@
|
||||
|
||||
namespace Aurora::RNG
|
||||
{
|
||||
static RngGetBytesProvider_f gSecureBackend;
|
||||
|
||||
#if defined(AURORA_IS_POSIX_DERIVED)
|
||||
static int gDevURand { -1 };
|
||||
|
||||
@ -232,9 +234,33 @@ namespace Aurora::RNG
|
||||
return uLen;
|
||||
}
|
||||
|
||||
AUKN_SYM void SetSecureRNGBackendOverload(RngGetBytesProvider_f pSecureBackend)
|
||||
{
|
||||
gSecureBackend = pSecureBackend;
|
||||
}
|
||||
|
||||
AUKN_SYM RngGetBytesProvider_f GetSecureRNGBackendOverload()
|
||||
{
|
||||
return gSecureBackend;
|
||||
}
|
||||
|
||||
AUKN_SYM RngGetBytesProvider_f GetSecureRNGBackend()
|
||||
{
|
||||
return gSecureBackend ? gSecureBackend : RngGetBytes;
|
||||
}
|
||||
|
||||
AuUInt32 RngGetBytes(AuUInt8 *pBuffer, AuUInt32 uBytes)
|
||||
{
|
||||
AuUInt32 x;
|
||||
|
||||
if (gSecureBackend)
|
||||
{
|
||||
x = gSecureBackend(pBuffer, uBytes);
|
||||
if (x != 0)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
}
|
||||
#if defined(AURORA_IS_MODERNNT_DERIVED)
|
||||
x = RngWin32(pBuffer, uBytes);
|
||||
if (x != 0)
|
||||
@ -242,6 +268,10 @@ namespace Aurora::RNG
|
||||
return x;
|
||||
}
|
||||
#elif defined(AURORA_IS_POSIX_DERIVED)
|
||||
#if defined(AURORA_RND_HAS_ARC4)
|
||||
arc4random_buf(pBuffer, uBytes);
|
||||
return uBytes;
|
||||
#endif
|
||||
#if defined(AURORA_IS_LINUX_DERIVED)
|
||||
x = sys_getrandom(pBuffer, uBytes);
|
||||
if (x > 0)
|
||||
@ -249,10 +279,6 @@ namespace Aurora::RNG
|
||||
return x;
|
||||
}
|
||||
#endif
|
||||
#if defined(AURORA_RND_HAS_ARC4)
|
||||
arc4random_buf(pBuffer, uBytes);
|
||||
return uBytes;
|
||||
#endif
|
||||
x = RngUnix(pBuffer, uBytes);
|
||||
if (x != 0)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user