mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-21 08:12:09 -05:00
std::random_device in libstdc++ reads RDSEED on x86 Linux. On an AMD EPYC 9V45 (Zen 5) CI runner its 32-bit results repeat about 130 times in 65536 draws, so guest_posix_random fails. libc now exports HostEntropy_nid_no_patch, which uses getentropy (rand_s on Windows) and throws when the OS cannot provide entropy. arc4random, arc4random_buf, sceRandomGetRandomNumber, /dev/random and /dev/urandom reads, std::_Random_device and sceKernelUuidCreate use it, and the arc4random and random device TechnicalDebt entries say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
499 B
C++
23 lines
499 B
C++
#include <cstdint>
|
|
#include <cstddef>
|
|
#include "SceTypes.hpp"
|
|
#include "prx/libc/include/General.hpp"
|
|
#include "prx/libc/include/HostEntropy.hpp"
|
|
|
|
namespace {
|
|
|
|
constexpr int SCE_RANDOM_ERROR_INVALID = static_cast<int>(0x817C0016);
|
|
constexpr std::size_t SCE_RANDOM_MAX_SIZE = 64;
|
|
|
|
}
|
|
|
|
extern "C" {
|
|
|
|
int APS5_VABI sceRandomGetRandomNumber(void* buf, size_t size) {
|
|
if (!buf || size > SCE_RANDOM_MAX_SIZE) return SCE_RANDOM_ERROR_INVALID;
|
|
HostEntropy_nid_no_patch(buf, size);
|
|
return 0;
|
|
}
|
|
|
|
}
|