mirror of
https://github.com/SerenityOS/serenity
synced 2024-09-06 17:06:31 +00:00
![Andreas Kling](/assets/img/avatar_default.png)
We now have these API's in <Kernel/Random.h>: - get_fast_random_bytes(u8* buffer, size_t buffer_size) - get_good_random_bytes(u8* buffer, size_t buffer_size) - get_fast_random<T>() - get_good_random<T>() Internally they both use x86 RDRAND if available, otherwise they fall back to the same LCG we had in RandomDevice all along. The main purpose of this patch is to give kernel code a way to better express its needs for random data. Randomness is something that will require a lot more work, but this is hopefully a step in the right direction.
27 lines
590 B
C++
27 lines
590 B
C++
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
|
|
// NOTE: These API's are primarily about expressing intent/needs in the calling code.
|
|
// We don't make any guarantees about actual fastness or goodness yet.
|
|
|
|
void get_fast_random_bytes(u8*, size_t);
|
|
void get_good_random_bytes(u8*, size_t);
|
|
|
|
template<typename T>
|
|
inline T get_fast_random()
|
|
{
|
|
T value;
|
|
get_fast_random_bytes(reinterpret_cast<u8*>(&value), sizeof(T));
|
|
return value;
|
|
}
|
|
|
|
template<typename T>
|
|
inline T get_good_random()
|
|
{
|
|
T value;
|
|
get_good_random_bytes(reinterpret_cast<u8*>(&value), sizeof(T));
|
|
return value;
|
|
}
|
|
|