From f1ad94437baaae40109f388a7d44d698c10a56d3 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Wed, 30 Sep 2020 18:36:31 +0200 Subject: [PATCH] ghash & poly1305: use pointer to slices for keys and output --- lib/std/crypto/ghash.zig | 11 +++-------- lib/std/crypto/poly1305.zig | 11 +++-------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/lib/std/crypto/ghash.zig b/lib/std/crypto/ghash.zig index f05b5d7139..a7a6be9722 100644 --- a/lib/std/crypto/ghash.zig +++ b/lib/std/crypto/ghash.zig @@ -34,8 +34,7 @@ pub const Ghash = struct { leftover: usize = 0, buf: [block_size]u8 align(16) = undefined, - pub fn init(key: []const u8) Ghash { - assert(key.len >= minimum_key_length); + pub fn init(key: *const [minimum_key_length]u8) Ghash { const h1 = mem.readIntBig(u64, key[0..8]); const h0 = mem.readIntBig(u64, key[8..16]); const h1r = @bitReverse(u64, h1); @@ -150,8 +149,7 @@ pub const Ghash = struct { } } - pub fn final(st: *Ghash, out: []u8) void { - assert(out.len >= mac_length); + pub fn final(st: *Ghash, out: *[mac_length]u8) void { if (st.leftover > 0) { var i = st.leftover; while (i < block_size) : (i += 1) { @@ -165,10 +163,7 @@ pub const Ghash = struct { mem.secureZero(u8, @ptrCast([*]u8, st)[0..@sizeOf(Ghash)]); } - pub fn create(out: []u8, msg: []const u8, key: []const u8) void { - std.debug.assert(out.len >= mac_length); - std.debug.assert(key.len >= minimum_key_length); - + pub fn create(out: *[mac_length]u8, msg: []const u8, key: *const [minimum_key_length]u8) void { var st = Ghash.init(key); st.update(msg); st.final(out); diff --git a/lib/std/crypto/poly1305.zig b/lib/std/crypto/poly1305.zig index a95b9d7cb3..31d1d6ba5a 100644 --- a/lib/std/crypto/poly1305.zig +++ b/lib/std/crypto/poly1305.zig @@ -22,8 +22,7 @@ pub const Poly1305 = struct { // partial block buffer buf: [block_size]u8 align(16) = undefined, - pub fn init(key: []const u8) Poly1305 { - std.debug.assert(key.len >= minimum_key_length); + pub fn init(key: *const [minimum_key_length]u8) Poly1305 { const t0 = mem.readIntLittle(u64, key[0..8]); const t1 = mem.readIntLittle(u64, key[8..16]); return Poly1305{ @@ -115,8 +114,7 @@ pub const Poly1305 = struct { } } - pub fn final(st: *Poly1305, out: []u8) void { - std.debug.assert(out.len >= mac_length); + pub fn final(st: *Poly1305, out: *[mac_length]u8) void { if (st.leftover > 0) { var i = st.leftover; st.buf[i] = 1; @@ -187,10 +185,7 @@ pub const Poly1305 = struct { std.mem.secureZero(u8, @ptrCast([*]u8, st)[0..@sizeOf(Poly1305)]); } - pub fn create(out: []u8, msg: []const u8, key: []const u8) void { - std.debug.assert(out.len >= mac_length); - std.debug.assert(key.len >= minimum_key_length); - + pub fn create(out: *[mac_length]u8, msg: []const u8, key: *const [minimum_key_length]u8) void { var st = Poly1305.init(key); st.update(msg); st.final(out);