From 86f0fde6e7914f055c5872bf7f2f565cc09977fc Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Tue, 12 Feb 2019 18:49:12 +0100 Subject: Windows: Use Hardware RNG based on CPU timing jitter "Jitterentropy" by Stephan Mueller as a good alternative to RDRAND (http://www.chronox.de/jent.html, smueller@chronox.de) --- src/Common/Random.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/Common') 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 @@ -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))) -- cgit v1.2.3