diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-02-05 18:13:28 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-02-05 18:13:28 -0500 |
| commit | 5cf30b6791243f1df55c7730399d1a772c85305f (patch) | |
| tree | 6b51cfe12e8c9e1828f91a5f142273e169a8e4bd /lib/std/rand.zig | |
| parent | e1f4f44dff238918d0e4f1fa35d56de50d1c22bb (diff) | |
| parent | ef4ecaa46212c34a124eca2da5dc41859a7de40a (diff) | |
| download | zig-5cf30b6791243f1df55c7730399d1a772c85305f.tar.gz zig-5cf30b6791243f1df55c7730399d1a772c85305f.zip | |
Merge pull request #4369 from daurnimator/gimli
std.crypto.gimli enhancements
Diffstat (limited to 'lib/std/rand.zig')
| -rw-r--r-- | lib/std/rand.zig | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/std/rand.zig b/lib/std/rand.zig index f9fa4a2d66..0bdc593545 100644 --- a/lib/std/rand.zig +++ b/lib/std/rand.zig @@ -733,6 +733,32 @@ test "xoroshiro sequence" { } } +// Gimli +// +// CSPRNG +pub const Gimli = struct { + random: Random, + state: std.crypto.gimli.State, + + pub fn init(init_s: u64) Gimli { + var self = Gimli{ + .random = Random{ .fillFn = fill }, + .state = std.crypto.gimli.State{ + .data = [_]u32{0} ** (std.crypto.gimli.State.BLOCKBYTES / 4), + }, + }; + self.state.data[0] = @truncate(u32, init_s >> 32); + self.state.data[1] = @truncate(u32, init_s); + return self; + } + + fn fill(r: *Random, buf: []u8) void { + const self = @fieldParentPtr(Gimli, "random", r); + + self.state.squeeze(buf); + } +}; + // ISAAC64 - http://www.burtleburtle.net/bob/rand/isaacafa.html // // CSPRNG |
