aboutsummaryrefslogtreecommitdiff
path: root/lib/std/rand.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2020-02-05 18:13:28 -0500
committerGitHub <noreply@github.com>2020-02-05 18:13:28 -0500
commit5cf30b6791243f1df55c7730399d1a772c85305f (patch)
tree6b51cfe12e8c9e1828f91a5f142273e169a8e4bd /lib/std/rand.zig
parente1f4f44dff238918d0e4f1fa35d56de50d1c22bb (diff)
parentef4ecaa46212c34a124eca2da5dc41859a7de40a (diff)
downloadzig-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.zig26
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