# # This program tests the implementations of all the known cryptographic hash functions. # Run with no arguments. # # Copyright (c) 2021 Project Nayuki. (MIT License) # https://www.nayuki.io/page/cryptographic-primitives-in-plain-python # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of # the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # - The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # - The Software is provided "as is", without warranty of any kind, express or # implied, including but not limited to the warranties of merchantability, # fitness for a particular purpose and noninfringement. In no event shall the # authors or copyright holders be liable for any claim, damages or other # liability, whether in an action of contract, tort or otherwise, arising from, # out of or in connection with the Software or the use or other dealings in the # Software. # import hashlib, random, unittest from typing import Any, Callable, List, Tuple import cryptocommon # ---- Test suite functions ---- class HashTest(unittest.TestCase): def test_md2_hash(self) -> None: import md2hash self._check_hash_function(md2hash.hash, [ ("8350E5A3E24C153DF2275C9F80692773", b""), ("32EC01EC4A6DAC72C0AB96FB34C0B5D1", b"a"), ("DA853B0D3F88D99B30283A69E6DED6BB", b"abc"), ("AB4F496BFB2A530B219FF33031FE06B0", b"message digest"), ("4E8DDFF3650292AB5A4108C3AA47940B", b"abcdefghijklmnopqrstuvwxyz"), ("DA33DEF2A42DF13975352846C30338CD", b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"), ("D5976F79D83D3A0DC9806C3C66F3EFD8", b"12345678901234567890123456789012345678901234567890123456789012345678901234567890"), ]) def test_md4_hash(self) -> None: import md4hash self._check_hash_function(md4hash.hash, [ ("31D6CFE0D16AE931B73C59D7E0C089C0", b""), ("BDE52CB31DE33E46245E05FBDBD6FB24", b"a"), ("A448017AAF21D8525FC10AE87AA6729D", b"abc"), ("D9130A8164549FE818874806E1C7014B", b"message digest"), ("D79E1C308AA5BBCDEEA8ED63DF412DA9", b"abcdefghijklmnopqrstuvwxyz"), ("043F8582F241DB351CE627E153E7F0E4", b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"), ("E33B4DDC9C38F2199C3E7B164FCC0536", b"12345678901234567890123456789012345678901234567890123456789012345678901234567890"), ]) def test_md5_hash(self) -> None: import md5hash self._check_vs_stdlib(md5hash.hash, hashlib.md5) self._check_hash_function(md5hash.hash, [ ("D41D8CD98F00B204E9800998ECF8427E", b""), ("0CC175B9C0F1B6A831C399E269772661", b"a"), ("900150983CD24FB0D6963F7D28E17F72", b"abc"), ("F96B697D7CB7938D525A2F31AAF161D0", b"message digest"), ("C3FCD3D76192E4007DFB496CCA67E13B", b"abcdefghijklmnopqrstuvwxyz"), ("D174AB98D277D9F5A5611C2C9F419D9F", b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"), ("57EDF4A22BE3C955AC49DA2E2107B67A", b"12345678901234567890123456789012345678901234567890123456789012345678901234567890"), ]) def test_sha1_hash(self) -> None: import sha1hash self._check_vs_stdlib(sha1hash.hash, hashlib.sha1) self._check_hash_function(sha1hash.hash, [ ("DA39A3EE5E6B4B0D3255BFEF95601890AFD80709", b""), ("86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8", b"a"), ("A9993E364706816ABA3E25717850C26C9CD0D89D", b"abc"), ("C12252CEDA8BE8994D5FA0290A47231C1D16AAE3", b"message digest"), ("32D10C7B8CF96570CA04CE37F2A19D84240D3A89", b"abcdefghijklmnopqrstuvwxyz"), ("84983E441C3BD26EBAAE4AA1F95129E5E54670F1", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("A49B2446A02C645BF419F995B67091253A04A259", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha256_hash(self) -> None: import sha256hash self._check_vs_stdlib(sha256hash.hash, hashlib.sha256) self._check_hash_function(sha256hash.hash, [ ("E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855", b""), ("CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB", b"a"), ("BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD", b"abc"), ("F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650", b"message digest"), ("71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73", b"abcdefghijklmnopqrstuvwxyz"), ("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("CF5B16A778AF8380036CE59E7B0492370B249B11E8F07A51AFAC45037AFEE9D1", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha512_hash(self) -> None: import sha512hash self._check_vs_stdlib(sha512hash.hash, hashlib.sha512) self._check_hash_function(sha512hash.hash, [ ("CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E", b""), ("1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F5302860C652BF08D560252AA5E74210546F369FBBBCE8C12CFC7957B2652FE9A75", b"a"), ("DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F", b"abc"), ("107DBF389D9E9F71A3A95F6C055B9251BC5268C2BE16D6C13492EA45B0199F3309E16455AB1E96118E8A905D5597B72038DDB372A89826046DE66687BB420E7C", b"message digest"), ("4DBFF86CC2CA1BAE1E16468A05CB9881C97F1753BCE3619034898FAA1AABE429955A1BF8EC483D7421FE3C1646613A59ED5441FB0F321389F77F48A879C7B1F1", b"abcdefghijklmnopqrstuvwxyz"), ("204A8FC6DDA82F0A0CED7BEB8E08A41657C16EF468B228A8279BE331A703C33596FD15C13B1B07F9AA1D3BEA57789CA031AD85C7A71DD70354EC631238CA3445", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("8E959B75DAE313DA8CF4F72814FC143F8F7779C6EB9F7FA17299AEADB6889018501D289E4900F7E4331B99DEC4B5433AC7D329EEB6DD26545E96E55B874BE909", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha3_224_hash(self) -> None: import sha3hash self._check_vs_stdlib(sha3hash.hash224, hashlib.sha3_224) self._check_hash_function(sha3hash.hash224, [ ("6B4E03423667DBB73B6E15454F0EB1ABD4597F9A1B078E3F5B5A6BC7", b""), ("E642824C3F8CF24AD09234EE7D3C766FC9A3A5168D0C94AD73B46FDF", b"abc"), ("8A24108B154ADA21C9FD5574494479BA5C7E7AB76EF264EAD0FCCE33", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("543E6868E1666C1A643630DF77367AE5A62A85070A51C14CBF665CBC", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha3_256_hash(self) -> None: import sha3hash self._check_vs_stdlib(sha3hash.hash256, hashlib.sha3_256) self._check_hash_function(sha3hash.hash256, [ ("A7FFC6F8BF1ED76651C14756A061D662F580FF4DE43B49FA82D80A4B80F8434A", b""), ("3A985DA74FE225B2045C172D6BD390BD855F086E3E9D525B46BFE24511431532", b"abc"), ("41C0DBA2A9D6240849100376A8235E2C82E1B9998A999E21DB32DD97496D3376", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("916F6061FE879741CA6469B43971DFDB28B1A32DC36CB3254E812BE27AAD1D18", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha3_384_hash(self) -> None: import sha3hash self._check_vs_stdlib(sha3hash.hash384, hashlib.sha3_384) self._check_hash_function(sha3hash.hash384, [ ("0C63A75B845E4F7D01107D852E4C2485C51A50AAAA94FC61995E71BBEE983A2AC3713831264ADB47FB6BD1E058D5F004", b""), ("EC01498288516FC926459F58E2C6AD8DF9B473CB0FC08C2596DA7CF0E49BE4B298D88CEA927AC7F539F1EDF228376D25", b"abc"), ("991C665755EB3A4B6BBDFB75C78A492E8C56A22C5C4D7E429BFDBC32B9D4AD5AA04A1F076E62FEA19EEF51ACD0657C22", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("79407D3B5916B59C3E30B09822974791C313FB9ECC849E406F23592D04F625DC8C709B98B43B3852B337216179AA7FC7", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_sha3_512_hash(self) -> None: import sha3hash self._check_vs_stdlib(sha3hash.hash512, hashlib.sha3_512) self._check_hash_function(sha3hash.hash512, [ ("A69F73CCA23A9AC5C8B567DC185A756E97C982164FE25859E0D1DCC1475C80A615B2123AF1F5F94C11E3E9402C3AC558F500199D95B6D3E301758586281DCD26", b""), ("B751850B1A57168A5693CD924B6B096E08F621827444F70D884F5D0240D2712E10E116E9192AF3C91A7EC57647E3934057340B4CF408D5A56592F8274EEC53F0", b"abc"), ("04A371E84ECFB5B8B77CB48610FCA8182DD457CE6F326A0FD3D7EC2F1E91636DEE691FBE0C985302BA1B0D8DC78C086346B533B49C030D99A27DAF1139D6E75E", b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"), ("AFEBB2EF542E6579C50CAD06D2E578F9F8DD6881D7DC824D26360FEEBF18A4FA73E3261122948EFCFD492E74E82E2189ED0FB440D187F382270CB455F21DD185", b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu"), ]) def test_skein256_160_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_160, [ ("2E693AA8CAFB42D90C808F7D2FB6C925DF618275", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("0CD491B7715704C3A15A45A1CA8D93F8F646D3A1", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("1FD30886A2C315DE86F67FFE66EDDDCF73BE4FE4", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein256_224_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_224, [ ("F4B52FCED0C88E95A3CA67B2D2D8D8D4D2DD16CAFC0DB7AECE570F53", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("AFD1E2D0F5B6CD4E1F8B3935FA2497D27EE97E72060ADAC099543487", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("FAE243AB76B414FC4883EE73102FDCF51C2D74B98DF185A0BE9045F6", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein256_256_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_256, [ ("C8877087DA56E072870DAA843F176E9453115929094C3A40C463A196C29BF7BA", b""), ("34E2B65BF0BE667CA5DEBA82C37CB253EB9F8474F3426BA622A25219FD182433", b"\x00"), ("6960426D85F4F10DAA23213DE5ADD2101F4C1B790B530BF7AA66F0930BB6B906", b"\x00\x00\x00\x00"), ("76E48CFDE0177EC9B118E7DF8F0C63E66039B76994646D327F7ADB6CEEA4D0E3", b"\x00\x00\x00\x00\x00\x00\x00\x00"), ("73EC7807DDE987D69600D138255E4AF0585C6CA90A6C7A4ADF8BC025A2FAC394", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("CBC26DE4C8212B6C7BC4E0CA43790A55FB19A6E47C64A77D8F8FB324DB126841", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("0FED47EF57B61379E4A406A8FA3F8FB9D380DAFADA318FF1491D1108D6600A50", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("FBF567B14234F140C06454EB26B83968DF8A8CFCCE69AFDE33A232EB2226137C", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("3E0CA29E4863E8BE4D9F28777A7FDC676032C4D9F6904B1CB6AABB029F33741A", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("8B0913FE583AF838E745EC9011978482FB83A3C58EDA5FA04FF70832B1AC639A", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("35DA44B91BFB020E6E85592E3310A6E6D8939A64C778913003A61BC13583EDAF", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("E00FA9CB56046CC2D2556E2ADF24E92F681AE3FE9BD8C2103780C29938D64FFE", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("088EB23CC2BCCFB8171AA64E966D4AF937325167DFCD170700FFD21F8A4CBDAC", b"\xFB"), ("0B98DCD198EA0E50A7A244C444E25C23DA30C10FC9A1F270A6637F1F34E67ED2", b"\xFF"), ("2E8B4A3613EE4EB54230E14CC0D84056C7C2E3D91AE2F9435E78FB3E93336BEC", b"\xFB\xD1\x7C\x26"), ("AFB92D1E32FA99493DE9276C6CA528CB6B33FF0AD200F339C0781002A13734BF", b"\xFF\xFE\xFD\xFC"), ("B1DD13CF629C2D7BEF08E7BD0975366DD766894EA34C793F9CD420010D25864C", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1"), ("0B5CA56712AC0D9450BD8398479E28246C329647138D2BDB45E163778F8308D4", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8"), ("E0EEA1CBEDC26AA6F6B06AA6BE839CE4B2C725CCB5BC0D7162BB1D442E582503", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9"), ("53403B16A293104A517BCCCDD136FF71F584F7FFB057A849133AF3D25002A01D", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0"), ("9D0BD975A84EE365CCA8F2E81A8290C3ECE8D5ACBAB8CC4DD3BB74C403A39C8F", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B"), ("167D17E8C206EC9A30D3B709CC51AD33D0CE4F8D0A3434E602A83F62121028F4", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8"), ("5C3002FF57A627089EA2F97A5000D5678416389019E80E45A3BBCAB118315D26", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8"), ("8D0FA4EF777FD759DFD4044E6F6A5AC3C774AEC943DCFC07927B723B5DBF408B", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0"), ("640C894A4BBA6574C83E920DDF7DD2982FC634881BBBCB9D774EAE0A285E89CE", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33"), ("8A4842D9C1E9F24E3886FC0B107555F9EDA8197707749CECC7772402B2FEA0C5", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0"), ("34BE001271314EE59A9D66F49BA801AC8D082F57AF1C091269292CF1F5B69A87", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB"), ("DF28E916630D0B44C4A849DC9A02F07A07CB30F732318256B15D865AC4AE162F", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0"), ("91B9D70C9763FF6D3649EB56C87E3A2BE805DF19CA6659782C1273CE44798957", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A"), ("66D5C6CA0F70845EF601ECCF193D1ECCC2284D03B4D24610928521448E6C4A1B", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0"), ("4DE6FE2BFDAA3717A4261030EF0E044CED9225D066354610842A24A3EAFD1DCF", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("180DE106A70401BA38F2597C25CBEFC736DFD88D90F2D3352E0EB255AFB6DB63", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ("964A3EE1BDE59B1084E64C12151D92DCF21B7A06AA3B37A50299CA8D7604CE12", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10\xE1\x14\xAA\x47\xF7\xC5\xC6\x15\x43\xC4\xD9\x59\x18\x82\x34\xF7\x97\xF4\x5A\x1D\x16\x65\xE3\x76\x46\xD8\x12\x9A\x45\xEE\x70\x78\x09\x91\xBB\x6B\x10\x02\x39\xE4\x66\xD5\x8D\x4C\xDD\x9D\x9D\x01\x90\xAB\x64\x47\x0D\xDC\x87\xF5\xE5\x09\xE9\xA8\xCF\x82\x4F\x58\xEF\x04\x73\x2E\xAB\x28\x09\x2D\x18\xA5\xAD\xA4\x5B\x6D\x49\xFB\x0F\x33\xF4\xCC\x07\xE3\x9E\xC6\x44\x9E\x8C\x0A\xBB\x17\xC6\x58\x66\x00\x9A\x3D\x9C\x31\xC0\xD7\x65\xE4\xAF\x88\xB8\x60\x23\xE9\xA0\x67\xE3\x32\x0C\x09\x24\x6A\x3F\xAE\x8A\x3F\xD9\x7C\x48\x7E"), ("A088EAC7A7256DF7255EB5733779267B5DD7F864320BAB3AB961DA5BEE23CB35", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\x7F\x7E\x7D\x7C\x7B\x7A\x79\x78\x77\x76\x75\x74\x73\x72\x71\x70\x6F\x6E\x6D\x6C\x6B\x6A\x69\x68\x67\x66\x65\x64\x63\x62\x61\x60\x5F\x5E\x5D\x5C\x5B\x5A\x59\x58\x57\x56\x55\x54\x53\x52\x51\x50\x4F\x4E\x4D\x4C\x4B\x4A\x49\x48\x47\x46\x45\x44\x43\x42\x41\x40\x3F\x3E\x3D\x3C\x3B\x3A\x39\x38\x37\x36\x35\x34\x33\x32\x31\x30\x2F\x2E\x2D\x2C\x2B\x2A\x29\x28\x27\x26\x25\x24\x23\x22\x21\x20\x1F\x1E\x1D\x1C\x1B\x1A\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0F\x0E\x0D\x0C\x0B\x0A\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00"), ]) def test_skein256_384_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_384, [ ("20ED536158C5E9B3FC04E4C44B0095744B144F11B0A731213A143402C8FDA1D6046FC3784CA3D46F3F2A9FCCACB99B35", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("954620FB31E8B782A2794C6542827026FE069D715DF04261629FCBE81D7D529B95BA021FA4239FB00AFAA75F5FD8E78B", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("9A94715F160B781545BC7FF254C97CD6C14BA20C94E0499BFCA58AB0CFE8311E0B8587014F5CF01A3BFE4CD5AEF8EB8B", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein256_512_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_512, [ ("918A1B6D20015D0BF53CF4FDD39E28D8BC5504A96C1D310AD5ADB15DCDDEA270184F9467451CD97BC624D30883A006336457815A88A9FEB449460E4B42D966AC", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("51347E27C7EABBA514959F899A6715EF6AD5CF01C23170590E6A8AF399470BF90EA7409960A708C1DBAA90E86389DF254ABC763639BB8CDF7FB663B29D9557C3", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("1AEDAB6FD28FD0ED62B82A6D22FA3C6A71AFF4920574A0D90F4D90A3B6FF96F436A0ABDF54840F336DF7D790A2185F611E463F40B340BE82110627FB25B802AF", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein256_1024_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash256_1024, [ ("73F2805CD8AACD38CE95657DFDC1F92CFFC64712238D54520C4361B2FE957091402E4021D82E552FAC5E015E793C4BD234BC248309F285CF214556AB92F3DD56308E3AD5ED9B11265FD5708A53E24564764F79CC39E8BFE2AC867D3684F2BF8E237D987E51505BFB6DD746835176B6D76963F0A62D4E57F649C0D100067DDDFB", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("6C9B6FACBAF116B538AA655E0BE0168084AA9F1BE445F7E06714585E5999A6C984FFFA9D41A316028692D4AAD18F573FBF27CF78E84DE26DA1928382B023987DCFE002B6201EA33713C54A8A5D9EB346F0365E04330D2FAAF7BC8ABA92A5D7FB6345C6FB26750BCE65AB2045C233627679AC6E9ACB33602E26FE3526063ECC8B", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("62E9A6C746E52E6EF82D9E48ECEE4B96599AA49B29F64D3A6D97EB81DCF56DBE3C7081365F7DA95C5CD0795DC86BAFA53BDA81305CD9B3AA6A76889DD86794ECFA7BD9DDF8DB9819B6D4ABD2C1E90B3312A78E06EE67A6F07DC6314463B6C9CA89790F17573D24A8B77E03CC8395ED742C80B097C3D5CDFE226E7784C9DEE52C", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein512_160_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_160, [ ("9CC1810DDFE971CF71FED0815DF862926C85CA6E", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("EF03079D61B57C6047E15FA2B35B46FA24279539", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("7D59D23FCF38FF54710F0D38D3A0ACCE7B8D64F6", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein512_224_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_224, [ ("BEC6A37A9F086BB2397AE1BDF000EC5EB87AD58039F36123A27E0EF1", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("D9E3219B214E15246A2038F76A573E018EF69B385B3BD0576B558231", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("21521B15C8A9F05D5958F997008E95C50C4EEE35FB30BA81D5831856", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein512_256_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_256, [ ("39CCC4554A8B31853B9DE7A1FE638A24CCE6B35A55F2431009E18780335D2621", b""), ("B3250457E05D3060B1A4BBC1428BC75A3F525CA389AEAB96CFA34638D96E492A", b"The quick brown fox jumps over the lazy dog"), ("41E829D7FCA71C7D7154ED8FC8A069F274DD664AE0ED29D365D919F4E575EEBB", b"The quick brown fox jumps over the lazy dog."), ("2D0E2E241972DF39BE822A8C682105C64747FAF8A10EC032881DE7DC67887CC2", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("809DD3F763A11AF90912BBB92BC0D94361CBADAB10142992000C88B4CEB88648", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("1A6A5BA08E74A864B5CB052CFB9B2FA128203230A4D9923A329F5427C477A4DB", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein512_384_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_384, [ ("E63EA4698F314AD9F8F8CBD1F336E027955F8DCE78C3210AF9B1F46BD328367D8E88D431071C4385CD8B50D74862C248", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("825F5CBD5DA8807A7B4D3E7BD9CD089CA3A256BCC064CD73A9355BF3AE67F2BF93AC7074B3B19907A0665BA3A878B262", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("EEAF4DC9B668C2A270B90CBD2E986C857E464B08903E5B6DDA1F15736F50D1BF2B6C40A398B79C67533592EFD96BD8DC", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein512_512_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_512, [ ("BC5B4C50925519C290CC634277AE3D6257212395CBA733BBAD37A4AF0FA06AF41FCA7903D06564FEA7A2D3730DBDB80C1F85562DFCC070334EA4D1D9E72CBA7A", b""), ("94C2AE036DBA8783D0B3F7D6CC111FF810702F5C77707999BE7E1C9486FF238A7044DE734293147359B4AC7E1D09CD247C351D69826B78DCDDD951F0EF912713", b"The quick brown fox jumps over the lazy dog"), ("658223CB3D69B5E76E3588CA63FEFFBA0DC2EAD38A95D0650564F2A39DA8E83FBB42C9D6AD9E03FBFDE8A25A880357D457DBD6F74CBCB5E728979577DBCE5436", b"The quick brown fox jumps over the lazy dog."), ("40285F433699A1D8C799B276CCF18010C9DC9D418B0E8A4ED987B44C61C01C5CCBCC0977B1D34A4D3665D20E12716DF934D208FEA6607F74968ED86BE3C99832", b"\x00"), ("DD01C32531E8100E470C47809BD21F84307B6B8DA616C46EA1BB4F85B5475916FB86C13FAF651788AA17216518C724A581948B42DE791596D1569EBE91648B89", b"\x00\x00\x00\x00"), ("A8C37D4ED547F6ECDCA7FF52AC34977E17B568D7E8F49F0BD06CD9C98EA807999B11681B3B390FE54D523BD0EA07CAAE6D31B226D1A7075FC3109D9859C879D8", b"\x00\x00\x00\x00\x00\x00\x00\x00"), ("FC716310CF81B8990844B195DFA76521756FB0C8F2604772056BE86E83DED36F2577A8D7D6E3D2112F4637016C75099E271DF12DDCB3257433F91BBE970B84AA", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("708B363C78F15CB39D85824EA1339897A003A792C2A0192604B389740758B3C7D2344CA8F50F493F306D8468695B18B848EAC5234952E5AC4791EC88E7184C37", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("49A7F0EE7CAEB28E35A70C68045571ED66388A6E98939C44C632EDB2CA8A1617CA950213454DA463E2DF5F32284363CF386A1EF13087A9F826EBB5C86DEAC5EC", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("E5D37D8D3DDC6A9C5F0B5DF9B840EBD7343D25EC20B84892BCA40560395D90C7C7AB8E4B95FA2D7BD183F18D8FDFFC3B1E04EE73F6E2D17E92FC9C74183A1E8F", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("33F7457DE06569E7CF5FD1EDD50CCFE1D5F166429E75DDBE54A5B7E247030DD912F0DC5AB6012F59CE9203ABD82B316DF67D5C6F009A18BA84DB030146DA99DB", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("24359E4DA39DB5B4995087C3173BD16DC73E65AB7EC1991F7FA8A3DB239397DC09C9461157D939B28FB8107A13B31A15158BD00F85433AD2AAE4A1B01B25E84D", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("FBE65B75D681B2FE354780BDDF82CCF164C5CB2827F8E4E7DE96235907443428957881C76CE46555E2BB9EE34F42F7A9B2E090B55D73C7A02506E17BBDFFA4F2", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("D74F3B946A59D16A50FED34786ACB23AEB6069A1567BDCC2442A54C74A4D41A24A62F3F1A76C6BB44BD54AEDF94B40F53D9335154530986CD4F5AA16F93D2D24", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("C49E03D50B4B2CC46BD3B7EF7014C8A45B016399FD1714467B7596C86DE98240E35BF7F9772B7D65465CD4CFFAB14E6BC154C54FC67B8BC340ABF08EFF572B9E", b"\xFB"), ("71B7BCE6FE6452227B9CED6014249E5BF9A9754C3AD618CCC4E0AAE16B316CC8CA698D864307ED3E80B6EF1570812AC5272DC409B5A012DF2A579102F340617A", b"\xFF"), ("92B729419570B22BB75B50CF72DB168B4C735694BC8AD4433C7C187B0BDD489CC3F67AE23E5018EBF4100CF6AFB2E1DB1F175DC266D92575E8D8261D6E6E276E", b"\xFB\xD1\x7C\x26"), ("19D59AAC611C22B849A77900467C2A58B5217C5B22073C95182788B4996EEBD5F923E637A295A7AD2B35E8487A7CEFF98B23CE5A5211D98554E63813C59F8406", b"\xFF\xFE\xFD\xFC"), ("B64071E68CB240FBCCEA6039F351D80E9AB3314B16B5888EC4EE829332374B1A57AEDDE7760B39099C6DADCC1F3933B9AF75582F623EB7BDCFFA33B25874447C", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1"), ("D74B9150061C93839BC3592C3A587DEC861BD6E24E5EF89288B6E99F7E0CA0D21155D4185D7FF6ACDC7106999F8219945E61F401796BECE98214059FA962B373", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8"), ("0304F6E4F2EF71C9539E95EBCE42A16B451AD8B52A34C2B69E536978F164B7C21FD52D15E3825E09835A41AE51B7F01684969361B7506274C72865B8A5AE3CEE", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9"), ("8EAF7AFC9E85A23F4E46BA4C5513066409A41779B471AE84FAC5F5C0D6648040E19337E367ADC7AB1FAC2C78D379B6369D905CD6CDFAC2B0D98E6260C47193F7", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0"), ("B42970F4C458285D36A67D9D9B3D8F13D2F47FE5E48A0374B897F47D8AE0D53B72CA9C321DF7C1FDB8F7551BDE4D3AC6275FE02BE468454BE42EFBF7C43B80AE", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B"), ("B61A891E0CCF179E4EA873E68515AFF6A5E4C2A19FED7F02B1A91C0F9781AE9DEAE4AA96968D544FF9F9D93B55CC404988EFE58F0EFF0DABB1BD2D3C8B8D467C", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8"), ("ABEFB179D52F68F86941ACBBE014CC67EC66AD78B7BA9508EB1400EE2CBDB06F9FE7C2A260A0272D0D80E8EF5E8737C0C6A5F1C02CEB00FB2746F664B85FCEF5", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8"), ("0B7FD053AE635EE8E519646EB41EA0CF7EA340152378062FB2440AA0250FF195FE32D9A0691E68A0FEB17DC285AA6756CEF19404E4DB92BF836C4AE65381504A", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0"), ("5C5B7956F9D973C0989AA40A71AA9C48A65AF2757590E9A758343C7E23EA2DF4057CE0B49F9514987FEFF97F648E1DD065926E2C371A0211CA977C213F14149F", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33"), ("8E48B8561654918A72E391976BA975DD315F251FCABF2D4E232E5950FD9E67DB6E88BE25920CB65ED0ABA5A4D31B08062C6888EB63997A176CE270D05DF39375", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0"), ("02D01535C2DF280FDE92146DF054B0609273C73056C93B94B82F5E7DCC5BE6979978C4BE24331CAA85D892D2E710C6C9B4904CD056A53547B866BEE097C0FB17", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB"), ("45863BA3BE0C4DFC27E75D358496F4AC9A736A505D9313B42B2F5EADA79FC17F63861E947AFB1D056AA199575AD3F8C9A3CC1780B5E5FA4CAE050E989876625B", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0"), ("E30E946D4398D102C2FDE56EF7611DD133D2D3066BA320F20A00E8A80219F54D099FFD5AEBE1C94E788BBC8ADAC3BA3E374E0CEB554C4FA9D4C87A79B2C649AF", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A"), ("AC8C00261D7A5A79CD69B5AF128D77EA4E600C7A8252C6CC1ADF7DBC9572C1C613C0C90CD3DD87A54953CB8796209C94C0165EE1B3CA3734FFE36DD59E3A03A4", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0"), ("1A0D5ABF4432E7C612D658F8DCFA35B0D1AB68B8D6BD4DD115C23CC57B5C5BCDDE9BFF0ECE4208596E499F211BC07594D0CB6F3C12B0E110174B2A9B4B2CB6A9", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("91CCA510C263C4DDD010530A33073309628631F308747E1BCBAA90E451CAB92E5188087AF4188773A332303E6667A7A210856F742139000071F48E8BA2A5ADB7", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ("9B29A30BD213DFC95C8678CF01875F68CC2A22350D7161FB9986159EEC3D3C850CA06A976CE695871D402823A4E82F1B21D3596BCAB8E04D69C45E9C7BEFC9E3", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10\xE1\x14\xAA\x47\xF7\xC5\xC6\x15\x43\xC4\xD9\x59\x18\x82\x34\xF7\x97\xF4\x5A\x1D\x16\x65\xE3\x76\x46\xD8\x12\x9A\x45\xEE\x70\x78\x09\x91\xBB\x6B\x10\x02\x39\xE4\x66\xD5\x8D\x4C\xDD\x9D\x9D\x01\x90\xAB\x64\x47\x0D\xDC\x87\xF5\xE5\x09\xE9\xA8\xCF\x82\x4F\x58\xEF\x04\x73\x2E\xAB\x28\x09\x2D\x18\xA5\xAD\xA4\x5B\x6D\x49\xFB\x0F\x33\xF4\xCC\x07\xE3\x9E\xC6\x44\x9E\x8C\x0A\xBB\x17\xC6\x58\x66\x00\x9A\x3D\x9C\x31\xC0\xD7\x65\xE4\xAF\x88\xB8\x60\x23\xE9\xA0\x67\xE3\x32\x0C\x09\x24\x6A\x3F\xAE\x8A\x3F\xD9\x7C\x48\x7E"), ("A55CDA09FC2DFB35CC20C1C58D8B00CC68F31D26D55385D8FC7AC2A4FCCD45221FEF7C1D18A900B75A2214EE6F07EF4E5D03A3E9D7294B1A5FA6E342EEC00558", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\x7F\x7E\x7D\x7C\x7B\x7A\x79\x78\x77\x76\x75\x74\x73\x72\x71\x70\x6F\x6E\x6D\x6C\x6B\x6A\x69\x68\x67\x66\x65\x64\x63\x62\x61\x60\x5F\x5E\x5D\x5C\x5B\x5A\x59\x58\x57\x56\x55\x54\x53\x52\x51\x50\x4F\x4E\x4D\x4C\x4B\x4A\x49\x48\x47\x46\x45\x44\x43\x42\x41\x40\x3F\x3E\x3D\x3C\x3B\x3A\x39\x38\x37\x36\x35\x34\x33\x32\x31\x30\x2F\x2E\x2D\x2C\x2B\x2A\x29\x28\x27\x26\x25\x24\x23\x22\x21\x20\x1F\x1E\x1D\x1C\x1B\x1A\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0F\x0E\x0D\x0C\x0B\x0A\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00"), ]) def test_skein512_1024_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash512_1024, [ ("4FC4315337416A601574C377205AC517235DAE3D39C8485EA51908AC86FB4355D85CE6BC6F2B6538D9BDB08B694F8FDA4E46642AEE61438428E6EE7EC1F94EADC00996F3A441AAA91C96C19167F1AB210B6C99AB3D649592166F7420A994C9BD32BCCDE26391B09CEB815E2A12E3DF80605D7078FB1B8FCAF01B1754CC271B6E", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("8C25D314110D1C0D58054C96A19D571E26A45D5362AA8F47547E53E0BE4A830A5F2C29CCD88E2185FEBAD024A4696F2DBE8307DC150E7A58B3793B1A93FAE2523E2D239C59A23A1CC127B3C481A9809162E60B4CB01C011B9630322C8FE9745D56D0F3AED54B3490578DB4692901EAFC1960C15359176A9C0990B32B8CA8F94B", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("BE71891353E157D8557007E6C4DB7742A8E94D2677B8BF138E0E747D4F7024BA5E9D531DB0B6CB412677685B9F9B0A7FCD4299C5D5085125347B59A47BEAFD6BD2D7C9DE07CCE07701C5D0CE3C3A8F75E0A8C16E1AADB29298219969DA77C52CBF8DD8CF86A9E1B0BB7D18153D70EE5C26606D922D915C05DA41D64FDEB42150", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_160_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_160, [ ("7C943C8CD2BE404E87C3A0FDB50499A395447A84", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("2E6A4CBF2EF05EA9C24B93E8D1DE732DDF2739EB", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("7991DB03ACB08BAF48271546A683677F4028949E", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_224_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_224, [ ("A7BF35943EF209C701C066DA52266970D244A58F08C27DE54BE74134", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("1D6DE19F37F7A3C265440EECB4B9FBD3300BB5AC60895CFC0D4D3C72", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("E731C7F14F2B8564992F497BEFC146B5C00C0F64F988298FCEF0FD8B", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_256_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_256, [ ("35EB69E504AF454E834AF1A473418D69B72638DD7568957539AB6A154839F4E9", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("986A4D472B123E8148731A8EAC9DB23325F0058C4CCBC44A5BB6FE3A8DB672D7", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("C04FF5A30EE10A53EF441C3982D5E2F6C7A022E2D4239E6BB24555D03F522AA3", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_384_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_384, [ ("B40D9E5110DF88376AA744D65544D26E8C5705B2D461EFF6FAED65EBCE94583FFC5399A5FAC00BFF1184523BC55BAC0A", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("9C3D0648C11F31C18395D5E6C8EBD73F43D189843FC45235E2C35E345E12D62BC21A41F65896DDC6A04969654C2E2CE9", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("A550F3071A8826044FF5F14E88AA86938087A10C155102C09D3B3E3BBF5C96B0FE9C1C705E5D0BACCDC98FED102542E5", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_512_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_512, [ ("2DF89E1021071C136CA68C020D0A670D980DC7750D23BB084D7BFF10CA2F2F51FA1E584DA858DF1FC58287B7C6F2BEC2C48DCAAFCCD35F4682E68759B62B6A70", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("5D0416F49C2D08DFD40A1446169DC6A1D516E23B8B853BE4933513051DE8D5C26BACCFFB08D3B16516BA3C6CCF3E9A6C78FFF6EF955F2DBC56E1459A7CDBA9A5", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("57E3DE8CA38A69C9405ABF2A4063B4855C775B6D6C464725D325FAF27EB6F15F086B11DA99E252ACFCF3BBE62E08BC10252850C40BB4766C32C10D998DB27B10", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ]) def test_skein1024_1024_hash(self) -> None: import skeinhash self._check_hash_function(skeinhash.hash1024_1024, [ ("0FFF9563BB3279289227AC77D319B6FFF8D7E9F09DA1247B72A0A265CD6D2A62645AD547ED8193DB48CFF847C06494A03F55666D3B47EB4C20456C9373C86297D630D5578EBD34CB40991578F9F52B18003EFA35D3DA6553FF35DB91B81AB890BEC1B189B7F52CB2A783EBB7D823D725B0B4A71F6824E88F68F982EEFC6D19C6", b""), ("CC666DD82A8D4DA48800265F75ED5C0894E597122F6B5547A9392F2D25AD5562C1F90561E70284E19EC0D1FD20B37FD097823E2890915BD09A4CE473AB9FA380F32CF864F972CA1203D52375AEB071F7159FC9EAD7548B52B01F4A0B377046BD6FE9DCD692312A5B6030BDDEC5A4EDB93C568167490AC546B4A6AEA3F6303191", b"\x00"), ("B4C6A5C23108573B3A4F0E0692B9BE53E6E01644C5152148FE93B3B281E3450D5DD0FE3F6216096D4897B0E865F6AFCE1C131709153099CB1E86286B15C42E8365C451B8E97F046D2A7A4128ADA3BC68AEB8D59D604B1275C89FD3F6351188BF82EDE1BF4FB4B22FA458AE8ED3419466B6EE2153920112ABBD6A660FE8C949E0", b"\x00\x00\x00\x00"), ("BB8034F441A82D5A143D19FFE552B79625134E9DBE14DC514FECFE7C3312F30C633B361C686EFC4607FE816399EEAEF39D4E9E81F0FEABF673F0D7798846FBDC4DD77E75FF8D977043031BF80839063E4A0303E11938FB2F5B289C58981774A57A516E0F47E90A08D82FD3A2D0DC287C6DC722B6FFA7E5950C65892B551E187F", b"\x00\x00\x00\x00\x00\x00\x00\x00"), ("B690A309B7AC0EF468F9C47D4A50F7AA3A782426DA68F96A2AE7FBA5E889206A5DE0D61A4C6840EB14FD1F505811B6C14EB2F00A81C61E31C79C023D75924C6E52ED482B9B9B5B4B2BDD5FC44F7A429F51D095413C9E780EC692A8DB581DD1585B6A67BE35B40E7D4D496A94E47387F61EDB27FC6E8E32860C5B8B046E0A7511", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("567D7DE94379FA5F83266FFFC20945FD84B3D7965D56B6A2AC843B2C7A24E492E2C498411BBC1E38E6A3D15BD13A192D7BACF2885EABD6C19BA13FAF26B7300D1C2BD5282FA059A4C2C4B69BD60320BF0E1C48285F84F4A2A63806AB4BC4617C60F731AC9B3FDF91043F75C293C8B543AB49C42D185FEF4F25F2479FCDE2295F", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("3273087467488578330FF2DEC29F691089BC95C770F5AC37571AF40C092AE6E124D1F3AC8017EA443D67209678C2694A628F223BBE4B76A2BEB63C6117287F782E7DDFE3FAC3A9A3582591CC1F9C57A6C181D1369AB3AD2340606BAEF11C3CCD6E090B6954A5E1102392B2781E9869C51ED9338A3D32C9F706C028E2DAA87BCA", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("1802D705C24181EAA31BA8B46AE81806C1F3E92DAE65AAB9254A1F99C2F310891CFCEF5F221A6EAA995890B9A95720C6F6D97307BA4F62D3DC7B85FBF98FBB702D64E511FACD98EBD5994A6FC881FA5A640FC1BDFBEEBC954EF173E899454B3B1CA5AA871A1209AF836F2D5DAA54BB98268C1BD6E84B0E997EC99348A6ABA7E2", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("B001536BA6C8FB700049B2E8F62F933194F13AC3E96E9942F854C959510D417AE0D436B02A7ECCB1EC3F17C7E8BC278A23A6690EBFACADA08F266E28D602513A8F06729A91B9D0E067E6CE4B3F9542F004B73A6AE3210EEB1A41F76BD0D7FAE2FB0355E73758B3D1FCE02E8C1300CB69DB99FAF95A7BD91C42FA6F6525A52B34", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("F855173813D124CE9966142DF64DC4F2F882B59FAC63AD512E2A6F69F0BEF5C25C28BECCDAA9D72067F88866474DEBB59A4226D2BD6D0352C755B6E09A77EE981B5D1D29D936527C1B943A2588420AB81C93B459BCF4ADE1D26F6EBDC192710E7090D23C1A189C7CEEA30A6FD6D3A3A6A6C963BBEE9AA648997B2C599069FC74", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("8118D174A0BC09505A2F677C6DCBC1B8C5A7C6720F6C59D60AFBC7CD6F64E20A92B64095C39EDB56A2F47C2683C5116FF358FD969E76D44C1F50C92B26171A33FA9EEBAF0D1F320D4144BC97EA00D59F00598643439CC13BBDADDDE6671A89E9A40D3002A29300E7C665B606D8B7167254787C867BE8141A56E8D1145865CCB9", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("4AC1251B3D816488C78171D93318F144C6962615297FDD337AC22880791C419099F5F7A5FC8FF3805C3981027327CD8C633F39A6FE2B5AEEE5153976A36C9099F600AE874E9C07E57E1560B8D8ED9135263E27C2027B5F7120A62DC32667E10B10E6FD230B5BA1A4E04E92F5182BBB5700800BC2684A439A78E0F925ECE3DE86", b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"), ("6426BDC57B2771A6EF1B0DD39F8096A9A07554565743AC3DE851D28258FCFF229993E11C4E6BEBC8B6ECB0AD1B140276081AA390EC38759603361194278274734770671B79F076771E2CFDAAF5ADC9B10CBAE43D8E6CD2B1C1F5D6C82DC9661800DDC476F25865B8748253173187D81DA971C027D91D32FB390301C2110D2DB2", b"\xFB"), ("E62C05802EA0152407CDD8787FDA9E35703DE862A4FBC119CFF8590AFE79250BCCC8B3FAF1BD2422AB5C0D263FB2F8AFB3F796F048000381531B6F00D85161BC0FFF4BEF2486B1EBCD3773FABF50AD4AD5639AF9040E3F29C6C931301BF79832E9DA09857E831E82EF8B4691C235656515D437D2BDA33BCEC001C67FFDE15BA8", b"\xFF"), ("8E34DDD70713DDE244A6E32BBAE2966C557B643159E479D11A219D8736B62E868029923107484AEAE0F28814A210CFCE03CEEF890E448FC58FB75CD2769AF2877A03865DADA0F21DDB802E4290245024E3D61FF2ACFA083988827ACBCB21917ED96C0F20D62B281D0DB2E47FCBEB465E4223125F760ADDBF89CDC346696D5B48", b"\xFB\xD1\x7C\x26"), ("F87717086D37BE00FA045048F1BFECC8CE7859EEA850B06D381148949D82ACD7A36F5EF5FD41E4068B7CD5CE870E4B589D2BDA4BB20ADF828E93E53FBB3EF486D2D0ACCC3E1C94F736EEAD1A2EA2E1A04D081D5458C3FED10C8DB4A23982C31673F0CB37595F164BC13E976100236B0345F1E162D17561F205B7E6D2E4FD9BF0", b"\xFF\xFE\xFD\xFC"), ("5AFA09A948A732FCBFEA7C05CD52469B5EA3D72CEF6749827FDFA1BE85AEF4D3F0F934218FEA7D4195A76FA9CFADE410758B4E936807FDA5BBCC760127C8BC384A0756CCED8234F4A298B9DFC9D16A0048CC171F3249527D2061AC93C55DBF80726A79123516DE07744E79A2FDE1A64521B4175FF68BF3AA2ACC43A7DD285094", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1"), ("AFCAE632CBCDDE0F98E6E0C02F97AA129033042D557766E8319D0F1E48839C38BC4364E234E78BC97BC58D11036ECB894090093FA348C7350A78B8A40C2281533C8AA8E4EBF73A2E5D98AD058CBD8A18FE4E05564B0002D9B0672D238843D64F2491C02C5DA26049B0BD43677ABE402B5C239657F6B76CB84A5B30C09D85D8BB", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8"), ("1B47DBA3B971451805DC69D2A40B3DA942CEAD2A9637F7AFD43F902AE94466D1CC82A4C7F35DFAF00F32BA46B8FD16BC2A8524B0D76BDBE32EB137B9721C78D13267EEF0CE7A9BF98A9688840CDEC67F3E61589B63B08529D4331FE22F50105A44A36ED654CA2E6113C2EDE4CC7002A79EB31FCD65FE5856C7307612EECDDF6B", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9"), ("D736BD0E3A4EDAEFF13D263CF2784A25AAB0CD6A1EFE453206D728FFFD93AE8D1E0E4634FFDEBE567CAEDE2B25346F621A3869A40F7C68A79F2F82B6378518544140DC2F1E5DE3074DE74DA43538A81D711715B2D21662332B33C94CC5F4E7A0E9CF94D0F51D1FC33317340D2E4D2D1AB2E75A815E6F0BEE1994B7608F432E2E", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0"), ("304995062FEC834F07A7B3CB78AF73E27BA095611C01DE2EA86D7E735318C2FAB24E6459447B197C95EA843E8C97B75EB131CBCB0054CA50F967698544D1A135462B315F7279C1FA0B58D6D0478A48168007B39D7F90D8041F5BE82B0272FEC0F2272B61C4498D5A2EB84C16243BE96E1984E94723E4766368C658FD3BCC1E0A", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B"), ("92E1A3B1D8A30E359A93810068B210727C5A9246C2DAE37519A263266B23D7E7BFEF811689DEE75E937ED4D3E897D92A3C4623904BF904FE658D618382671A06E838C42E2C87B8E1D12F7073CF02C95CB49BC0BE2B4FA06BC2775E62C44876C730EFD80598509F6DBA833DB1D17D1F03E8E5F48C33B3257E5C0893EA8A83CE0C", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8"), ("140E93726AB0B0467C0B8A834AD8CDA4D1769D273661902B70DB0DCB5EE692ACB3F852D03B11F857850F2428432811309C1DCBE5724F00267EA3667E89FADB4E4911DA6B0BA8A7EDDF87C1C67152EF0F07B7FEAD3557318478BDEF5AD1E5926D7071FDD4BFA5076D4B3253F8DE479EBDF5357676F1641B2F097E9B785E9E528E", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8"), ("D9F381EAADA57D8F407A01D876E6B3C2093418A486045F7CE23A90150D9316013BB54E5638B372E375597289CF7450EB4789B5553E2B2947D2AA81097F4A8E84D39E0FCA2F30B5EE7A8ED73C31F78B5804B6EF79F57FE443AFBA1151CC48E0191AC625E9D5F72B843D7710B29E7F989D8D3FC21BBA49D46B9F75A07B2208673C", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0"), ("31105E1EF042C30B95B16E0F6E6A1A19172BB7D54A0597DD0C711194888EFE1DBCE82D47416DF9577CA387219F06E45CD10964FF36F6711EDBBEA0E9595B0F66F72B755D70A46857E0AEC98561A743D49370D8E572E212811273125F66CC30BF117D3221894C48012BF6E2219DE91E064B01523517420A1E00F71C4CC04BAB62", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33"), ("B5F8F1CE3E04D0907D64ADE641D6F4E7915AD7745824021F7C68F99258B8425022B699485A0E7C405D6F5A8F4D871B2115E674AED07E19D6428FA2F05A4687F71FB5A492C63341DCEDD7CA9E669D95749DB75FE02CBFCD0E7E0BE54B3AFAAD5A283C35634151AFAEA1F0859FD03B2A4C659E2FD216CED258DD3CD3781C7CFAA2", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0"), ("50432DD001D0A024D80A0BB36947B70386AFF05FBB8872466DC7DF34B31B09C4D5E68C72968307F6C343AF2EDB0F25DC643123C345D35C544696E5D542796E9291E71BE59ED2F9050D51733A44FA2106C7F9873BC3C2B26CDD8BF77F9AF306F11BF3923270CA255B268F5892546CD75154BC20738E8BB072F3A37D9CDB30D080", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB"), ("0E10EFDC945EBE7D7CF0073A902D9A5BC0D99566F7FEAED86584C653B50F71CA8BFC501E3D26E0140588DE50E9FB2B0199BFB41895D7E33386B2CCEE46CF320E384EABB08CF416221D2288C58D343FA3BA66F4DEEDEE933FA89A584DEEA3228411AEEB7F564BBBDB31D1FB61F2DA95A7432BB5214E4A95EB160F9ADF20A5E806", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0"), ("14E985664C421E0F90CB2E6A3EBB95A6EDA9C22B5F0E3FD12412AAD250DBD6680115AFDF38BAF20BE455012B85F5B6DC06417868913E4953E3D3545B956039EF63D56C07FA0BEAFA33B2062D219B93498F1524EEA764CB6A5F9843D451A4123981DB524EB6371FB86310A467CF6962D6E42904578AD18461CFA07DD2BED32A0B", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A"), ("DE3E113A97F083BF738A888B974D11DEBCF110C0A7EEB6C110B3D816B89250B32D1AC2156008927D4EE8B7E1A183317B2EEB850F05BC8682A032D4288508A48D6B170A819B14CBA98D865BA7919E2C27F4627AD5412F524B9DE6D70AC79F5C3EFBB2A2ABA4AC9EEECDEFD337E2EC9E5D3A170273BB4766FB3ED01479F78D63AC", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0"), ("96CA81F586C825D0360AEF5ACAEC49AD55289E1797072EEE198B64F349CE65B6E6ED804FE38F05135FE769CC56240DDDA5098F620865CE4A4278C77FA2EC6BC31C0F354CA78C7CA81665BFCC5DC54258C3B8310ED421D9157F36C093814D9B25103D83E0DDD89C52D0050E13A64C6140E6388431961685734B1F138FE2243086", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10"), ("1F3E02C46FB80A3FCD2DFBBC7C173800B40C60C2354AF551189EBF433C3D85F9FF1803E6D920493179ED7AE7FCE69C3581A5A2F82D3E0C7A295574D0CD7D217C484D2F6313D59A7718EAD07D0729C24851D7E7D2491B902D489194E6B7D369DB0AB7AA106F0EE0A39A42EFC54F18D93776080985F907574F995EC6A37153A578", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80"), ("9AC01B498255E8B28DBBB9EF721782FFA9A2A95CA6D8E347263088C44D0F9626F91BA45673D02EEF8AC5EC6B33EEB8F526A91CBCE2913D67C27525FCFDB79B626BC0D6B6E94956DFF286F49D31520C3A9E39D6281E94414F17897B18D055364837FBDEB6006A192DBCAB725D80D3B00B50CD02CAF65D7ED655AEFB283B033FC5", b"\xFB\xD1\x7C\x26\xB6\x1A\x82\xE1\x2E\x12\x5F\x0D\x45\x9B\x96\xC9\x1A\xB4\x83\x7D\xFF\x22\xB3\x9B\x78\x43\x94\x30\xCD\xFC\x5D\xC8\x78\xBB\x39\x3A\x1A\x5F\x79\xBE\xF3\x09\x95\xA8\x5A\x12\x92\x33\x39\xBA\x8A\xB7\xD8\xFC\x6D\xC5\xFE\xC6\xF4\xED\x22\xC1\x22\xBB\xE7\xEB\x61\x98\x18\x92\x96\x6D\xE5\xCE\xF5\x76\xF7\x1F\xC7\xA8\x0D\x14\xDA\xB2\xD0\xC0\x39\x40\xB9\x5B\x9F\xB3\xA7\x27\xC6\x6A\x6E\x1F\xF0\xDC\x31\x1B\x9A\xA2\x1A\x30\x54\x48\x48\x02\x15\x4C\x18\x26\xC2\xA2\x7A\x09\x14\x15\x2A\xEB\x76\xF1\x16\x8D\x44\x10\xE1\x14\xAA\x47\xF7\xC5\xC6\x15\x43\xC4\xD9\x59\x18\x82\x34\xF7\x97\xF4\x5A\x1D\x16\x65\xE3\x76\x46\xD8\x12\x9A\x45\xEE\x70\x78\x09\x91\xBB\x6B\x10\x02\x39\xE4\x66\xD5\x8D\x4C\xDD\x9D\x9D\x01\x90\xAB\x64\x47\x0D\xDC\x87\xF5\xE5\x09\xE9\xA8\xCF\x82\x4F\x58\xEF\x04\x73\x2E\xAB\x28\x09\x2D\x18\xA5\xAD\xA4\x5B\x6D\x49\xFB\x0F\x33\xF4\xCC\x07\xE3\x9E\xC6\x44\x9E\x8C\x0A\xBB\x17\xC6\x58\x66\x00\x9A\x3D\x9C\x31\xC0\xD7\x65\xE4\xAF\x88\xB8\x60\x23\xE9\xA0\x67\xE3\x32\x0C\x09\x24\x6A\x3F\xAE\x8A\x3F\xD9\x7C\x48\x7E"), ("842A53C99C12B0CF80CF69491BE5E2F7515DE8733B6EA9422DFD676665B5FA42FFB3A9C48C217777950848CECDB48F640F81FB92BEF6F88F7A85C1F7CD1446C9161C0AFE8F25AE444F40D3680081C35AA43F640FD5FA3C3C030BCC06ABAC01D098BCC984EBD8322712921E00B1BA07D6D01F26907050255EF2C8E24F716C52A5", b"\xFF\xFE\xFD\xFC\xFB\xFA\xF9\xF8\xF7\xF6\xF5\xF4\xF3\xF2\xF1\xF0\xEF\xEE\xED\xEC\xEB\xEA\xE9\xE8\xE7\xE6\xE5\xE4\xE3\xE2\xE1\xE0\xDF\xDE\xDD\xDC\xDB\xDA\xD9\xD8\xD7\xD6\xD5\xD4\xD3\xD2\xD1\xD0\xCF\xCE\xCD\xCC\xCB\xCA\xC9\xC8\xC7\xC6\xC5\xC4\xC3\xC2\xC1\xC0\xBF\xBE\xBD\xBC\xBB\xBA\xB9\xB8\xB7\xB6\xB5\xB4\xB3\xB2\xB1\xB0\xAF\xAE\xAD\xAC\xAB\xAA\xA9\xA8\xA7\xA6\xA5\xA4\xA3\xA2\xA1\xA0\x9F\x9E\x9D\x9C\x9B\x9A\x99\x98\x97\x96\x95\x94\x93\x92\x91\x90\x8F\x8E\x8D\x8C\x8B\x8A\x89\x88\x87\x86\x85\x84\x83\x82\x81\x80\x7F\x7E\x7D\x7C\x7B\x7A\x79\x78\x77\x76\x75\x74\x73\x72\x71\x70\x6F\x6E\x6D\x6C\x6B\x6A\x69\x68\x67\x66\x65\x64\x63\x62\x61\x60\x5F\x5E\x5D\x5C\x5B\x5A\x59\x58\x57\x56\x55\x54\x53\x52\x51\x50\x4F\x4E\x4D\x4C\x4B\x4A\x49\x48\x47\x46\x45\x44\x43\x42\x41\x40\x3F\x3E\x3D\x3C\x3B\x3A\x39\x38\x37\x36\x35\x34\x33\x32\x31\x30\x2F\x2E\x2D\x2C\x2B\x2A\x29\x28\x27\x26\x25\x24\x23\x22\x21\x20\x1F\x1E\x1D\x1C\x1B\x1A\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0F\x0E\x0D\x0C\x0B\x0A\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00"), ]) def test_whirlpool_hash(self) -> None: import whirlpoolhash self._check_hash_function(whirlpoolhash.hash, [ ("19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A73E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3", b""), ("B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725FD2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35", b"The quick brown fox jumps over the lazy dog"), ("C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC50900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C", b"The quick brown fox jumps over the lazy eog"), ]) # Private utilities def _check_hash_function(self, func: Callable[[bytes],bytes], cases: List[Tuple[str,bytes]]) -> None: global num_test_cases for (expecthash_hex, message_bin) in cases: actualhash_bin: bytes = func(message_bin) expecthash_bin: bytes = bytes.fromhex(expecthash_hex) self.assertEqual(actualhash_bin, expecthash_bin) num_test_cases += 1 def _check_vs_stdlib(self, ourfunc: Callable[[bytes],bytes], stdfunc: Callable[[bytes],Any]) -> None: global num_test_cases TRIALS = 300 for _ in range(TRIALS): msglen: int = random.randrange(1000) msglist = bytes(random.randrange(256) for _ in range(msglen)) msgstr = bytes(msglist) actualhash: bytes = ourfunc(msglist) expecthash: bytes = stdfunc(msgstr).digest() self.assertEqual(actualhash, expecthash) num_test_cases += 1 # ---- Main runner ---- if __name__ == "__main__": num_test_cases: int = 0 unittest.main(exit=False) print(f"Tested {num_test_cases} vectors")