1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 19:08:26 -06:00

Linux/MacOSX: Add missing JitterEntropy implementation

This commit is contained in:
Mounir IDRASSI
2019-10-23 22:30:44 +02:00
parent 74e14c070f
commit 478066c607
4 changed files with 39 additions and 4 deletions

View File

@@ -46,6 +46,16 @@ namespace VeraCrypt
throw_sys_sub_if (read (random, buffer, buffer.Size()) == -1 && errno != EAGAIN, L"/dev/random");
AddToPool (buffer);
/* use JitterEntropy library to get good quality random bytes based on CPU timing jitter */
if (JitterRngCtx)
{
ssize_t rndLen = jent_read_entropy (JitterRngCtx, (char*) buffer.Ptr(), buffer.Size());
if (rndLen > 0)
{
AddToPool (buffer);
}
}
}
#endif
}
@@ -80,6 +90,12 @@ namespace VeraCrypt
ScopeLock lock (AccessMutex);
size_t bufferLen = buffer.Size(), loopLen;
byte* pbBuffer = buffer.Get();
// Initialize JitterEntropy RNG for this call
if (0 == jent_entropy_init ())
{
JitterRngCtx = jent_entropy_collector_alloc (1, 0);
}
// Poll system for data
AddSystemDataToPool (fast);
@@ -127,6 +143,12 @@ namespace VeraCrypt
pbBuffer += loopLen;
}
if (JitterRngCtx)
{
jent_entropy_collector_free (JitterRngCtx);
JitterRngCtx = NULL;
}
}
shared_ptr <Hash> RandomNumberGenerator::GetHash ()
@@ -232,4 +254,5 @@ namespace VeraCrypt
size_t RandomNumberGenerator::ReadOffset;
bool RandomNumberGenerator::Running = false;
size_t RandomNumberGenerator::WriteOffset;
struct rand_data *RandomNumberGenerator::JitterRngCtx = NULL;
}