aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim StroĢˆmbergson <joachim@secworks.se>2018-04-06 09:27:38 +0200
committerJoachim StroĢˆmbergson <joachim@secworks.se>2018-04-06 09:27:38 +0200
commit32c0bfd6e1e144cbcee60f2375582fabdf7b4833 (patch)
treeb932d9f7137b2730edf58ee639c7e1e5b6affbf1
parent5dfe3514564d7d093c414eac58b1af7b9cd8d879 (diff)
Added testcases for other SHA-512 versions per FIPS 180-4.
-rwxr-xr-xsrc/model/python/sha512.py82
1 files 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()
#-------------------------------------------------------------------