| ... | @@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void { | ... | @@ -15101,6 +15101,7 @@ fn randomMainThread(t: *Threaded, buffer: []u8) void { |
| 15101 | std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native); | 15101 | std.mem.writeInt(usize, seed[seed.len - @sizeOf(usize) ..][0..@sizeOf(usize)], aslr_addr, .native); |
| 15102 | switch (native_os) { | 15102 | switch (native_os) { |
| 15103 | .windows => fallbackSeedWindows(&seed), | 15103 | .windows => fallbackSeedWindows(&seed), |
| | 15104 | .wasi => if (builtin.link_libc) fallbackSeedPosix(&seed) else fallbackSeedWasi(&seed), |
| 15104 | else => fallbackSeedPosix(&seed), | 15105 | else => fallbackSeedPosix(&seed), |
| 15105 | } | 15106 | } |
| 15106 | }, | 15107 | }, |
| ... | @@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void { | ... | @@ -15135,6 +15136,13 @@ fn fallbackSeedWindows(seed: *[Csprng.seed_len]u8) void { |
| 15135 | std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native); | 15136 | std.mem.writeInt(windows.LARGE_INTEGER, seed[0..@sizeOf(windows.LARGE_INTEGER)], pc, .native); |
| 15136 | } | 15137 | } |
| 15137 | | 15138 | |
| | 15139 | fn fallbackSeedWasi(seed: *[Csprng.seed_len]u8) void { |
| | 15140 | var ts: std.os.wasi.timestamp_t = undefined; |
| | 15141 | if (std.os.wasi.clock_time_get(.REALTIME, 1, &ts) == .SUCCESS) { |
| | 15142 | std.mem.writeInt(std.os.wasi.timestamp_t, seed[0..@sizeOf(std.os.wasi.timestamp_t)], ts, .native); |
| | 15143 | } |
| | 15144 | } |
| | 15145 | |
| 15138 | fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void { | 15146 | fn randomSecure(userdata: ?*anyopaque, buffer: []u8) Io.RandomSecureError!void { |
| 15139 | const t: *Threaded = @ptrCast(@alignCast(userdata)); | 15147 | const t: *Threaded = @ptrCast(@alignCast(userdata)); |
| 15140 | | 15148 | |