authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2020-08-20 12:56:42+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2020-08-20 23:02:10+02:00
log3bed749b1c1285aa340f793fadb6b5b7275529cf
treee7d153c73878d61239bf8eeaf40a8d9b42d7a222
parent6f9ea9eaef79863ebdc9bf44b2af67ec4caad031

Add truncated SHA512 variants


2 files changed, 38 insertions(+), 2 deletions(-)

lib/std/crypto/hmac.zig+2-2
...@@ -8,8 +8,8 @@ const crypto = std.crypto;...@@ -8,8 +8,8 @@ const crypto = std.crypto;
8const debug = std.debug;8const debug = std.debug;
9const mem = std.mem;9const mem = std.mem;
1010
11pub const HmacMd5 = Hmac(crypto.hash.legacy.Md5);11pub const HmacMd5 = Hmac(crypto.hash.Md5);
12pub const HmacSha1 = Hmac(crypto.hash.legacy.Sha1);12pub const HmacSha1 = Hmac(crypto.hash.Sha1);
1313
14pub const sha2 = struct {14pub const sha2 = struct {
15 pub const HmacSha224 = Hmac(crypto.hash.sha2.Sha224);15 pub const HmacSha224 = Hmac(crypto.hash.sha2.Sha224);
lib/std/crypto/sha2.zig+36
...@@ -77,7 +77,10 @@ const Sha256Params = Sha2Params32{...@@ -77,7 +77,10 @@ const Sha256Params = Sha2Params32{
77 .out_len = 256,77 .out_len = 256,
78};78};
7979
80/// SHA-224
80pub const Sha224 = Sha2_32(Sha224Params);81pub const Sha224 = Sha2_32(Sha224Params);
82
83/// SHA-256
81pub const Sha256 = Sha2_32(Sha256Params);84pub const Sha256 = Sha2_32(Sha256Params);
8285
83fn Sha2_32(comptime params: Sha2Params32) type {86fn Sha2_32(comptime params: Sha2Params32) type {
...@@ -421,9 +424,42 @@ const Sha512Params = Sha2Params64{...@@ -421,9 +424,42 @@ const Sha512Params = Sha2Params64{
421 .out_len = 512,424 .out_len = 512,
422};425};
423426
427const Sha512256Params = Sha2Params64{
428 .iv0 = 0x22312194FC2BF72C,
429 .iv1 = 0x9F555FA3C84C64C2,
430 .iv2 = 0x2393B86B6F53B151,
431 .iv3 = 0x963877195940EABD,
432 .iv4 = 0x96283EE2A88EFFE3,
433 .iv5 = 0xBE5E1E2553863992,
434 .iv6 = 0x2B0199FC2C85B8AA,
435 .iv7 = 0x0EB72DDC81C52CA2,
436 .out_len = 256,
437};
438
439const Sha512T256Params = Sha2Params64{
440 .iv0 = 0x6A09E667F3BCC908,
441 .iv1 = 0xBB67AE8584CAA73B,
442 .iv2 = 0x3C6EF372FE94F82B,
443 .iv3 = 0xA54FF53A5F1D36F1,
444 .iv4 = 0x510E527FADE682D1,
445 .iv5 = 0x9B05688C2B3E6C1F,
446 .iv6 = 0x1F83D9ABFB41BD6B,
447 .iv7 = 0x5BE0CD19137E2179,
448 .out_len = 256,
449};
450
451/// SHA-384
424pub const Sha384 = Sha2_64(Sha384Params);452pub const Sha384 = Sha2_64(Sha384Params);
453
454/// SHA-512
425pub const Sha512 = Sha2_64(Sha512Params);455pub const Sha512 = Sha2_64(Sha512Params);
426456
457/// SHA-512/256
458pub const Sha512256 = Sha2_64(Sha512256Params);
459
460/// Truncated SHA-512
461pub const Sha512T256 = Sha2_64(Sha512T256Params);
462
427fn Sha2_64(comptime params: Sha2Params64) type {463fn Sha2_64(comptime params: Sha2Params64) type {
428 return struct {464 return struct {
429 const Self = @This();465 const Self = @This();