Add internal method to add new random data to our internal RNG state

This commit is contained in:
Matt Corallo 2017-05-22 16:01:29 -04:00
parent daf3e7def7
commit 399fb8f2d0

View File

@ -207,6 +207,22 @@ static std::mutex cs_rng_state;
static unsigned char rng_state[32] = {0}; static unsigned char rng_state[32] = {0};
static uint64_t rng_counter = 0; static uint64_t rng_counter = 0;
static void AddDataToRng(void* data, size_t len) {
CSHA512 hasher;
hasher.Write((const unsigned char*)&len, sizeof(len));
hasher.Write((const unsigned char*)data, len);
unsigned char buf[64];
{
std::unique_lock<std::mutex> lock(cs_rng_state);
hasher.Write(rng_state, sizeof(rng_state));
hasher.Write((const unsigned char*)&rng_counter, sizeof(rng_counter));
++rng_counter;
hasher.Finalize(buf);
memcpy(rng_state, buf + 32, 32);
}
memory_cleanse(buf, 64);
}
void GetStrongRandBytes(unsigned char* out, int num) void GetStrongRandBytes(unsigned char* out, int num)
{ {
assert(num <= 32); assert(num <= 32);