authorgravatar for boards@gmail.comMatt Sicker <boards@gmail.com> 2020-12-22 22:32:01-06:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-12-23 10:59:14+02:00
logd9fe7ea81592e0978166a2fcfb5edb01ee7d48ef
treeae74b2b961f590b1d6826c3a244dd68ba65396b7
parent55b998c98d574a4fba11cc25760671b6a3bac0cf

Fix Gimli hash on 16n byte inputs


1 files changed, 21 insertions(+), 6 deletions(-)

lib/std/crypto/gimli.zig+21-6
......@@ -229,18 +229,17 @@ pub const Hash = struct {
229229 const buf = self.state.toSlice();
230230 var in = data;
231231 while (in.len > 0) {
232 var left = State.RATE - self.buf_off;
233 if (left == 0) {
234 self.state.permute();
235 self.buf_off = 0;
236 left = State.RATE;
237 }
232 const left = State.RATE - self.buf_off;
238233 const ps = math.min(in.len, left);
239234 for (buf[self.buf_off .. self.buf_off + ps]) |*p, i| {
240235 p.* ^= in[i];
241236 }
242237 self.buf_off += ps;
243238 in = in[ps..];
239 if (self.buf_off == State.RATE) {
240 self.state.permute();
241 self.buf_off = 0;
242 }
244243 }
245244 }
246245
......@@ -277,6 +276,22 @@ test "hash" {
277276 htest.assertEqual("1C9A03DC6A5DDC5444CFC6F4B154CFF5CF081633B2CEA4D7D0AE7CCFED5AAA44", &md);
278277}
279278
279test "hash test vector 17" {
280 var msg: [32 / 2]u8 = undefined;
281 try std.fmt.hexToBytes(&msg, "000102030405060708090A0B0C0D0E0F");
282 var md: [32]u8 = undefined;
283 hash(&md, &msg, .{});
284 htest.assertEqual("404C130AF1B9023A7908200919F690FFBB756D5176E056FFDE320016A37C7282", &md);
285}
286
287test "hash test vector 33" {
288 var msg: [32]u8 = undefined;
289 try std.fmt.hexToBytes(&msg, "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F");
290 var md: [32]u8 = undefined;
291 hash(&md, &msg, .{});
292 htest.assertEqual("A8F4FA28708BDA7EFB4C1914CA4AFA9E475B82D588D36504F87DBB0ED9AB3C4B", &md);
293}
294
280295pub const Aead = struct {
281296 pub const tag_length = State.RATE;
282297 pub const nonce_length = 16;