From 61ee28cb7da58d2aae96f9536e8bb869b13b7351 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sun, 31 Mar 2019 14:38:06 +0200 Subject: [PATCH] Use RDRAND to initialize blk_shred Mix jitterentropy with RDRAND when initializing psuedo-random number generator. --- src/app/blk_shred/main.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/app/blk_shred/main.cc b/src/app/blk_shred/main.cc index 2846884..b990218 100644 --- a/src/app/blk_shred/main.cc +++ b/src/app/blk_shred/main.cc @@ -26,6 +26,9 @@ /* Jitterentropy includes */ #include +/* RDRAND utility */ +#include + /* PCG includes */ #include @@ -80,7 +83,22 @@ struct Blk_shred::Main void seed_noise() { /* read entropy into initialization variables */ - jent_read_entropy(jent, (char*)&pcg_init, sizeof(pcg_init)); + + { + /* XOR in jitter entropy */ + uint64_t buf[2] { 0 }; + jent_read_entropy(jent, (char*)&buf, sizeof(buf)); + pcg_init[0] ^= buf[0]; + pcg_init[1] ^= buf[1]; + } + + if (Genode::Rdrand::supported()) { + /* XOR in RDRAND */ + pcg_init[0] ^= Genode::Rdrand::random64(); + pcg_init[1] ^= Genode::Rdrand::random64(); + } + + /* low bit must be set */ pcg_init[1] |= 1; pcg32_srandom_r(&pcg, pcg_init[0], pcg_init[1]);