authorgravatar for mantas@jonytis.euMantas Jonytis <mantas@jonytis.eu> 2020-08-01 16:00:22+03:00
committergravatar for mantas@jonytis.euMantas Jonytis <mantas@jonytis.eu> 2020-08-01 16:00:22+03:00
log42dd737c9e23292464f368889d7301bc82c3e648
treeeff9219f438047b1e12755c00f69e97820f82123
parent1ae40146e68720047190f3c5cbd693669bbb1d87

compute blake2 at compile time


1 files changed, 26 insertions(+), 20 deletions(-)

lib/std/crypto/blake2.zig+26-20
...@@ -123,7 +123,7 @@ fn Blake2s(comptime out_len: usize) type {...@@ -123,7 +123,7 @@ fn Blake2s(comptime out_len: usize) type {
123 const rr = d.h[0 .. out_len / 32];123 const rr = d.h[0 .. out_len / 32];
124124
125 for (rr) |s, j| {125 for (rr) |s, j| {
126 mem.writeIntLittle(u32, out[4 * j ..][0..4], s);126 mem.writeIntSliceLittle(u32, out[4 * j ..], s);
127 }127 }
128 }128 }
129129
...@@ -296,19 +296,22 @@ test "blake2s256 streaming" {...@@ -296,19 +296,22 @@ test "blake2s256 streaming" {
296 htest.assertEqual(h3, out[0..]);296 htest.assertEqual(h3, out[0..]);
297}297}
298298
299test "blake2s256 aligned final" {299test "comptime blake2s256" {
300 var block = [_]u8{0} ** Blake2s256.block_length;300 comptime {
301 var out: [Blake2s256.digest_length]u8 = undefined;301 @setEvalBranchQuota(8000);
302 var block = [_]u8{0} ** Blake2s256.block_length;
303 var out: [Blake2s256.digest_length]u8 = undefined;
302304
303 const h1 = "ae09db7cd54f42b490ef09b6bc541af688e4959bb8c53f359a6f56e38ab454a3";305 const h1 = "ae09db7cd54f42b490ef09b6bc541af688e4959bb8c53f359a6f56e38ab454a3";
304306
305 htest.assertEqualHash(Blake2s256, h1, block[0..]);307 htest.assertEqualHash(Blake2s256, h1, block[0..]);
306308
307 var h = Blake2s256.init();309 var h = Blake2s256.init();
308 h.update(&block);310 h.update(&block);
309 h.final(out[0..]);311 h.final(out[0..]);
310312
311 htest.assertEqual(h1, out[0..]);313 htest.assertEqual(h1, out[0..]);
314 }
312}315}
313316
314/////////////////////317/////////////////////
...@@ -409,7 +412,7 @@ fn Blake2b(comptime out_len: usize) type {...@@ -409,7 +412,7 @@ fn Blake2b(comptime out_len: usize) type {
409 const rr = d.h[0 .. out_len / 64];412 const rr = d.h[0 .. out_len / 64];
410413
411 for (rr) |s, j| {414 for (rr) |s, j| {
412 mem.writeIntLittle(u64, out[8 * j ..][0..8], s);415 mem.writeIntSliceLittle(u64, out[8 * j ..], s);
413 }416 }
414 }417 }
415418
...@@ -582,17 +585,20 @@ test "blake2b512 streaming" {...@@ -582,17 +585,20 @@ test "blake2b512 streaming" {
582 htest.assertEqual(h3, out[0..]);585 htest.assertEqual(h3, out[0..]);
583}586}
584587
585test "blake2b512 aligned final" {588test "comptime blake2b512" {
586 var block = [_]u8{0} ** Blake2b512.block_length;589 comptime {
587 var out: [Blake2b512.digest_length]u8 = undefined;590 @setEvalBranchQuota(8000);
591 var block = [_]u8{0} ** Blake2b512.block_length;
592 var out: [Blake2b512.digest_length]u8 = undefined;
588593
589 const h1 = "865939e120e6805438478841afb739ae4250cf372653078a065cdcfffca4caf798e6d462b65d658fc165782640eded70963449ae1500fb0f24981d7727e22c41";594 const h1 = "865939e120e6805438478841afb739ae4250cf372653078a065cdcfffca4caf798e6d462b65d658fc165782640eded70963449ae1500fb0f24981d7727e22c41";
590595
591 htest.assertEqualHash(Blake2b512, h1, block[0..]);596 htest.assertEqualHash(Blake2b512, h1, block[0..]);
592597
593 var h = Blake2b512.init();598 var h = Blake2b512.init();
594 h.update(&block);599 h.update(&block);
595 h.final(out[0..]);600 h.final(out[0..]);
596601
597 htest.assertEqual(h1, out[0..]);602 htest.assertEqual(h1, out[0..]);
603 }
598}604}