mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:48:10 +00:00
Kernel: Harvest randomness from various drivers
Random now gets entropy from the following drivers: - KeyboardDevice - PATAChannel - PS2MouseDevice - E1000NetworkAdapter - RTL8139NetworkAdapter Of these devices, PS2MouseDevice and PATAChannel provide the vast majority of the entropy.
This commit is contained in:
parent
2e8cfe5435
commit
af0b2d1d86
12 changed files with 71 additions and 7 deletions
|
@ -28,6 +28,7 @@
|
|||
#include <Kernel/Arch/i386/CPU.h>
|
||||
#include <Kernel/Devices/RandomDevice.h>
|
||||
#include <Kernel/Random.h>
|
||||
#include <Kernel/Time/TimeManagement.h>
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
|
@ -44,7 +45,7 @@ KernelRng& KernelRng::the()
|
|||
KernelRng::KernelRng()
|
||||
{
|
||||
if (g_cpu_supports_rdrand) {
|
||||
for (size_t i = 0; i < KernelRng::pool_count * KernelRng::reseed_threshold; ++i) {
|
||||
for (size_t i = 0; i < resource().pool_count * resource().reseed_threshold; ++i) {
|
||||
u32 value = 0;
|
||||
asm volatile(
|
||||
"1:\n"
|
||||
|
@ -52,14 +53,22 @@ KernelRng::KernelRng()
|
|||
"jnc 1b\n"
|
||||
: "=r"(value));
|
||||
|
||||
this->add_random_event(value, i % 32);
|
||||
this->resource().add_random_event(value, i % 32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t EntropySource::next_source { 0 };
|
||||
|
||||
void get_good_random_bytes(u8* buffer, size_t buffer_size)
|
||||
{
|
||||
KernelRng::the().get_random_bytes(buffer, buffer_size);
|
||||
// FIXME: What if interrupts are disabled because we're in an interrupt?
|
||||
if (are_interrupts_enabled()) {
|
||||
LOCKER(KernelRng::the().lock());
|
||||
KernelRng::the().resource().get_random_bytes(buffer, buffer_size);
|
||||
} else {
|
||||
KernelRng::the().resource().get_random_bytes(buffer, buffer_size);
|
||||
}
|
||||
}
|
||||
|
||||
void get_fast_random_bytes(u8* buffer, size_t buffer_size)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue