ziglang/zig

`std.options.crypto_always_getrandom` ignores overridden `std.options.cryptoRandomSeed`

Khitiara opened this issue · 2 comments

Zig Version

0.13.0-dev.46+3648d7df1

Steps to Reproduce and Observed Behavior

I'm using std_options.cryptoRandomSeed to provide a hardware secure random source for my hobby os, and I'd like to use crypto_always_getrandom to allow me to compile without the single_threaded flag since there is no syscall overhead on getting the random value when in kernel mode already anyway, but when i set crypto_always_getrandom = true the program fails to compile due to that branch always calling posix getrandom directly.

Expected Behavior

The program should compile and use my provided cryptoRandomSeed for all cryptographic random calls. or this behavior should be documented better if intentional.

To me, it looks like this would require a change here:

// Allow applications to decide they would prefer to have every call to
// std.crypto.random always make an OS syscall, rather than rely on an
// application implementation of a CSPRNG.
if (std.options.crypto_always_getrandom) {
return defaultRandomSeed(buffer);
}

Where the call to defaultRandomSeed has to be replaced by calling std.options.cryptoRandomSeed.

Unfortunately, I'm quite new to this, so I don't know how to install Zig from source and perform the testing :/ (I'm aware that there is a HowTo, but I'm a total noob).

@insalt-glitch Note that you can edit the standard library (in lib/std) of a built/downloaded Zig distribution and the changes will immediately take effect for all subsequent builds; no need to rebuild the compiler itself from source.