From 32c0bfd6e1e144cbcee60f2375582fabdf7b4833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Stro=CC=88mbergson?= Date: Fri, 6 Apr 2018 09:27:38 +0200 Subject: Added testcases for other SHA-512 versions per FIPS 180-4. --- src/model/python/sha512.py | 82 ++++++++++++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 31 deletions(-) diff --git a/src/model/python/sha512.py b/src/model/python/sha512.py index f09c99d..bfeea54 100755 --- a/src/model/python/sha512.py +++ b/src/model/python/sha512.py @@ -59,7 +59,7 @@ MAX_64BIT = 0xffffffffffffffff class SHA512(): def __init__(self, mode = 'MODE_SHA_512', verbose = 0): assert mode in ['MODE_SHA_512_224', 'MODE_SHA_512_256', - 'MODE_SHA_384', 'MODE_SHA_512'] + 'MODE_SHA_512_384', 'MODE_SHA_512'] self.mode = mode self.verbose = verbose self.mode @@ -120,7 +120,7 @@ class SHA512(): 0x96283ee2a88effe3, 0xbe5e1e2553863992, 0x2b0199fc2c85b8aa, 0x0eb72ddc81c52ca2] - elif self.mode == 'MODE_SHA_384': + elif self.mode == 'MODE_SHA_512_384': self.H = [0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, @@ -155,7 +155,7 @@ class SHA512(): elif self.mode == 'MODE_SHA_512_256': return self.H[0:4] - elif self.mode == 'MODE_SHA_384': + elif self.mode == 'MODE_SHA_512_384': return self.H[0:6] elif self.mode == 'MODE_SHA_512': @@ -302,27 +302,46 @@ def compare_digests(digest, expected): # NIST tests with dual block messages. #------------------------------------------------------------------- def double_block_tests(): - TC_BLOCK1 = [0x6162636465666768, 0x6263646566676869, 0x636465666768696A, 0x6465666768696A6B, - 0x65666768696A6B6C, 0x666768696A6B6C6D, 0x6768696A6B6C6D6E, 0x68696A6B6C6D6E6F, - 0x696A6B6C6D6E6F70, 0x6A6B6C6D6E6F7071, 0x6B6C6D6E6F707172, 0x6C6D6E6F70717273, - 0x6D6E6F7071727374, 0x6E6F707172737475, 0x8000000000000000, 0x0000000000000000] + print("Running double block message tests.") + + TC_BLOCK1 = [0x6162636465666768, 0x6263646566676869, 0x636465666768696a, 0x6465666768696a6b, + 0x65666768696a6b6c, 0x666768696a6b6c6d, 0x6768696a6b6c6d6e, 0x68696a6b6c6d6e6f, + 0x696a6b6c6d6e6f70, 0x6a6b6c6d6e6f7071, 0x6b6c6d6e6f707172, 0x6c6d6e6f70717273, + 0x6d6e6f7071727374, 0x6e6f707172737475, 0x8000000000000000, 0x0000000000000000] TC_BLOCK2 = [0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000380] - print("Running double block message tests.") - print() + print("Test case for SHA-512-256.") + TC256_expected = [0x3928e184fb8690f8, 0x40da3988121d31be, 0x65cb9d3ef83ee614, 0x6feac861e19b563a] + my_sha512 = SHA512(mode = 'MODE_SHA_512_256', verbose = 0) + my_sha512.init() + my_sha512.next(TC_BLOCK1) + my_sha512.next(TC_BLOCK2) + my_digest = my_sha512.get_digest() + compare_digests(my_digest, TC256_expected) - my_sha512 = SHA512(mode = 'MODE_SHA_512', verbose=1) - TC1_expected = [0x8E959B75DAE313DA, 0x8CF4F72814FC143F, 0x8F7779C6EB9F7FA1, 0x7299AEADB6889018, - 0x501D289E4900F7E4, 0x331B99DEC4B5433A, 0xC7D329EEB6DD2654, 0x5E96E55B874BE909] + print("Test case for SHA-512-384.") + TC384_expected = [0x09330c33f71147e8, 0x3d192fc782cd1b47, 0x53111b173b3b05d2, 0x2fa08086e3b0f712, + 0xfcc7c71a557e2db9, 0x66c3e9fa91746039] + my_sha512 = SHA512(mode = 'MODE_SHA_512_384', verbose = 0) my_sha512.init() my_sha512.next(TC_BLOCK1) my_sha512.next(TC_BLOCK2) my_digest = my_sha512.get_digest() - compare_digests(my_digest, TC1_expected) + compare_digests(my_digest, TC384_expected) + + print("Test case for SHA-512.") + TC512_expected = [0x8e959b75dae313da, 0x8cf4f72814fc143f, 0x8f7779c6eb9f7fa1, 0x7299aeadb6889018, + 0x501d289e4900f7e4, 0x331b99dec4b5433a, 0xc7d329eeb6dd2654, 0x5e96e55b874be909] + my_sha512 = SHA512(mode = 'MODE_SHA_512', verbose = 0) + my_sha512.init() + my_sha512.next(TC_BLOCK1) + my_sha512.next(TC_BLOCK2) + my_digest = my_sha512.get_digest() + compare_digests(my_digest, TC512_expected) #------------------------------------------------------------------- @@ -333,46 +352,47 @@ def double_block_tests(): #------------------------------------------------------------------- def single_block_tests(): print("Running single block message tests.") - print() TC1_block = [0x6162638000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000018] - - my_sha512 = SHA512(mode = 'MODE_SHA_512', verbose=1) - TC1_expected = [0xDDAF35A193617ABA, 0xCC417349AE204131, 0x12E6FA4E89A97EA2, 0x0A9EEEE64B55D39A, - 0x2192992A274FC1A8, 0x36BA3C23A3FEEBBD, 0x454D4423643CE80E, 0x2A9AC94FA54CA49F] + print("Test case for SHA-512-224.") + TC2_expected = [0x4634270f707b6a54, 0xdaae7530460842e2, 0x0e37ed265ceee9a4, 0x3e8924aa00000000] + my_sha512 = SHA512(mode = 'MODE_SHA_512_224', verbose = 0) my_sha512.init() my_sha512.next(TC1_block) my_digest = my_sha512.get_digest() - compare_digests(my_digest, TC1_expected) - + compare_digests(my_digest, TC2_expected) - my_sha512 = SHA512(mode = 'MODE_SHA_512_224', verbose=1) - TC2_expected = [0x4634270F707B6A54, 0xDAAE7530460842E2, 0x0E37ED265CEEE9A4, 0x3E8924AA00000000] + print("Test case for SHA-512-256.") + TC3_expected = [0x53048e2681941ef9, 0x9b2e29b76b4c7dab, 0xe4c2d0c634fc6d46, 0xe0e2f13107e7af23] + my_sha512 = SHA512(mode = 'MODE_SHA_512_256', verbose = 0) my_sha512.init() my_sha512.next(TC1_block) my_digest = my_sha512.get_digest() - compare_digests(my_digest, TC2_expected) + compare_digests(my_digest, TC3_expected) - my_sha512 = SHA512(mode = 'MODE_SHA_512_256', verbose=1) - TC3_expected = [0x53048E2681941EF9, 0x9B2E29B76B4C7DAB, 0xE4C2D0C634FC6D46, 0xE0E2F13107E7AF23] + print("Test case for SHA-512-384.") + TC4_expected = [0xcb00753f45a35e8b, 0xb5a03d699ac65007, 0x272c32ab0eded163, 0x1a8b605a43ff5bed, + 0x8086072ba1e7cc23, 0x58baeca134c825a7] + my_sha512 = SHA512(mode = 'MODE_SHA_512_384', verbose = 0) my_sha512.init() my_sha512.next(TC1_block) my_digest = my_sha512.get_digest() - compare_digests(my_digest, TC3_expected) - + compare_digests(my_digest, TC4_expected) - my_sha512 = SHA512(mode = 'MODE_SHA_384', verbose=1) - TC4_expected = [0xCB00753F45A35E8B, 0xB5A03D699AC65007, 0x272C32AB0EDED163, 0x1A8B605A43FF5BED, - 0x8086072BA1E7CC23, 0x58BAECA134C825A7] + print("Test case for SHA-512.") + TC1_expected = [0xddaf35a193617aba, 0xcc417349ae204131, 0x12e6fa4e89a97ea2, 0x0a9eeee64b55d39a, + 0x2192992a274fc1a8, 0x36ba3c23a3feebbd, 0x454d4423643ce80e, 0x2a9ac94fa54ca49f] + my_sha512 = SHA512(mode = 'MODE_SHA_512', verbose = 0) my_sha512.init() my_sha512.next(TC1_block) my_digest = my_sha512.get_digest() - compare_digests(my_digest, TC4_expected) + compare_digests(my_digest, TC1_expected) + print() #------------------------------------------------------------------- -- cgit v1.2.3