diff options
Diffstat (limited to 'src/Common/Random.c')
-rw-r--r-- | src/Common/Random.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/Common/Random.c b/src/Common/Random.c index c8655b56..1c6b9530 100644 --- a/src/Common/Random.c +++ b/src/Common/Random.c @@ -15,6 +15,7 @@ #include "Crc.h" #include "Random.h" #include "Crypto\cpu.h" +#include "Crypto\jitterentropy.h" #include "Crypto\rdrand.h" #include <Strsafe.h> @@ -776,6 +777,19 @@ BOOL SlowPoll (void) return FALSE; } + /* use JitterEntropy library to get good quality random bytes based on CPU timing jitter */ + if (0 == jent_entropy_init ()) + { + struct rand_data *ec = jent_entropy_collector_alloc (1, 0); + if (ec) + { + ssize_t rndLen = jent_read_entropy (ec, (char*) buffer, sizeof (buffer)); + if (rndLen > 0) + RandaddBuf (buffer, (int) rndLen); + jent_entropy_collector_free (ec); + } + } + // use RDSEED or RDRAND from CPU as source of entropy if present if ( IsCpuRngEnabled() && ( (HasRDSEED() && RDSEED_getBytes (buffer, sizeof (buffer))) @@ -908,6 +922,19 @@ BOOL FastPoll (void) return FALSE; } + /* use JitterEntropy library to get good quality random bytes based on CPU timing jitter */ + if (0 == jent_entropy_init ()) + { + struct rand_data *ec = jent_entropy_collector_alloc (1, 0); + if (ec) + { + ssize_t rndLen = jent_read_entropy (ec, (char*) buffer, sizeof (buffer)); + if (rndLen > 0) + RandaddBuf (buffer, (int) rndLen); + jent_entropy_collector_free (ec); + } + } + // use RDSEED or RDRAND from CPU as source of entropy if enabled if ( IsCpuRngEnabled() && ( (HasRDSEED() && RDSEED_getBytes (buffer, sizeof (buffer))) |