# # This program tests the implementations of all the known cryptographic ciphers. # 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 random, unittest from typing import Callable, List, Tuple import cryptocommon # ---- Test suite functions ---- class CipherTest(unittest.TestCase): def test_aes_cipher(self) -> None: import aescipher self._check_invertibility(aescipher.encrypt, aescipher.decrypt, 16, 16) self._check_invertibility(aescipher.encrypt, aescipher.decrypt, 16, 24) self._check_invertibility(aescipher.encrypt, aescipher.decrypt, 16, 32) self._check_cipher(aescipher.encrypt, aescipher.decrypt, [ # AES-128 ("00000000000000000000000000000000", "00000000000000000000000000000000", "66E94BD4EF8A2C3B884CFA59CA342B2E"), ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "BCBF217CB280CF30B2517052193AB979"), ("00112233445566778899AABBCCDDEEFF", "000102030405060708090A0B0C0D0E0F", "69C4E0D86A7B0430D8CDB78070B4C55A"), ("3243F6A8885A308D313198A2E0370734", "2B7E151628AED2A6ABF7158809CF4F3C", "3925841D02DC09FBDC118597196A0B32"), ("12DDD706F27C2EB8D062EDC3CFA2E121", "CDBA764CA0DD93EF8B3859462B0DB38E", "9116061956F006252368393722FC5303"), ("D9B47B9458D35A5F6CCD1813AF56AFD2", "5F0AA61051F65CC42FDC88B4D6A86995", "303D92288AA619A836DE528F053C42CE"), ("BC134CBA0D00A4533C948C38A687862E", "AC65575FCF739B02F41C7153002E90DE", "8CDA460418CC4A5F4C9EB1DA59E594DB"), ("13524045DB68498203A7A2416F487B2A", "E4BA3C11B0511691EF5B435A779BC12B", "F232DCD245D2106C0343D93A38269FD9"), ("FF5BC9D0F6025BCAE45F3FAED4BE0DEB", "EAB439B86578E8169D4AC934A9AB7622", "D77CA8F6073B0A5E52D3D4007216D4E1"), ("55D146D0DF562C435D1741B41915794D", "B13C64C83BA048A4E0D88670BB719287", "01BE0D90C29054D47803EFC413C5296C"), ("7BFFBB57EDE979B2C1154E3D59CCE407", "5323F8F3E5886BA25C2F8C0AECB82BFD", "52E76F43CD267129BC85FF9C196EDDDB"), ("86FC1F9BBBA80EF16BEB7B10DC24B81C", "8A7FECF79BAADAAC480E66CB8B39322D", "D1CF81A0EF841E676EA511AA744E5432"), ("347C35F097FEE60AE66D73EDE83BAB6A", "741EA24348A8AE29B9B552120396DD7B", "77D10D937B66251EA0703240AE5001F6"), ("0CA42D83CEA71123755085C4B092E502", "A9B02F6DB2AA8F3948E4369F51B3603F", "577644EB9E8C9BF925356E9BE7F218CD"), ("73BB87D0D5358743834C21917F57C4C4", "C4236B8E921B525D8DB111E564BBB7E9", "BBC91909AE4B25A79BB2B94DB8837361"), ("33B100FDDB32DDD7AB447377A250E5BE", "171C05AD79A5D757B9E97A8EBF4A25BA", "0C941BA64061247650D072AF2FF32B31"), ("F2EC4A79E5E08B1EE808AFC4DF160D4C", "4A9C9533C1B052B286D850EAF679146D", "2260CEB3E7AAE4DB5296547B2F06A116"), ("F0940CD399C5BBADB2A2A1F7E004554E", "2D855C83B46ACE9504DE016AB2924972", "F92CD000EAAFE9E7ADDBCD3945FEC3AB"), ("9535E0AAC544DE90BFDDCB69E5606D46", "3CCA33363F75D397348AFF290462B4C1", "ADF86221BE552D463B4B89B5C479E06F"), ("E01751B0C7ADA2821DB0E33AD33D093D", "6707EEDA3348D43AEB3F4CF7DAD78841", "4E4EFA06EC553DC1D491603DB2712CA0"), ("AFB66C734DF2120DE745ADB3A6449C5F", "91BF3A20FD3A12177EC8C5CA51C24A82", "36DBC73D55AA60416D8D08675C69A2F5"), ("9020DBF42A331DEBB64D76A9333178B7", "911E5C6BC40236F197B9443A92240960", "8730E093E06B42F62ACCDB3720236883"), ("4F2AC3720DB161F3BFCF57DB40D7E94F", "F8CB708BBDC653C41993A4DCD57166F2", "467BF5E8C3C99582D10B399F82A670D2"), ("C6CC2874A88BD47EFBE08BC04B0447B5", "D0B8BF2D590B5DD17769409C7FB068E7", "5600478C34ED96BC00ABF08C95E5481E"), ("00000000000000000000000000000004", "00000000000000000000000000000000", "200211214E7394DA2089B6ACD093ABE0"), ("00000000000000000000000000000000", "00000000000000010000000000000000", "F6B7BDD1CAEEBAB574683893C4475484"), ("00000000000000000000000000000000", "00000000000000010000000000000000", "F6B7BDD1CAEEBAB574683893C4475484"), ("00000000000000000000000000000000", "00000000000000020000000000000000", "5C76002BC7206560EFE550C80B8F12CC"), ("00000000000000400000000000000000", "00000000000000000000000000000000", "DAA9B25168CC702326F217F1A0C0B162"), ("00000000000000000000000000000000", "00000000000010000000000000000000", "04C67DBF16C11427D507A455DE2C9BC5"), ("00000000000000000000000000000000", "08000000000000000000000000000000", "9AA042C315F94CBB97B62202F83358F5"), ("00000000000000000000000000000000", "00000000000001000000000000000000", "CE24E4D40C68A82B535CBD3C8E21652A"), ("00000040000000000000000000000000", "00000000000000000000000000000000", "7D03BA451371591D3FD5547D9165C73B"), ("00000000000000000000200000000000", "00000000000000000000000000000000", "7975A57A425CDF5AA1FA929101F650B0"), ("00000000000008000000000000000000", "00000000100000000000000000000000", "2EE94783255643A77CC52D1E9B4C5412"), ("00000000000000000000000000000000", "00800000000000000000000000000001", "58F871B539D58BD6097A1E1DE387659F"), ("00000010000000100000000000000000", "00000000000000000000000000000000", "E69D4F312CE1857818374B218F0467FB"), ("00000000000000004000000000000000", "00000000000000000002000000000000", "24C5B8D40BC417FC80834736743CC533"), ("00000000000000020000000000000000", "01000000000000000000000000000000", "364F7DEECD6D378365050EFFC451EE34"), ("00000002000008000000000000000000", "00000000000000000000000000000000", "1E4F374F3478CDC108D3C91D7B0D6522"), ("00000000000000000810000000000000", "00000000000000000000000000000000", "7E24618F3E1B695508ECD51BD4459B73"), ("00000000000000000000000000000100", "00000100000000000000000000000000", "2E41AC7F4EAFECC5809759E56316148B"), ("00000000000000000000000000000000", "00000000002000000000100000000000", "A73FBE40066B0773EA42FD8DBD6B4F7A"), ("00000002000000000000020000000000", "00000000000000000000000000000000", "5B75AFE751444F4DBC19E27E3F769AB1"), ("00000000000000000000000000010000", "00000002000000000000000000000000", "E71F0EF80C5E3F0EFF13850CD3B566F2"), ("00000000000008000000000800000000", "00000000000000000000000000000000", "2C8A6855EDB818A50E8FDA64DD21BF97"), ("00000000000000000000000000000000", "00000100001000000000000000000000", "11B0E4E946421F4DB1B940A194125509"), ("00000008000000100000000000000000", "00000000000000000000000000000000", "C3AB50AE151354FBF5D991140AB8CDFA"), ("00000000000000000000000000000000", "00001020000000000000000000000000", "E3B4510E71A43E10806834B4CC0EF5BF"), ("00000000000000000000000000000000", "00000000000010000000000010000000", "FB4952ED20E2BEF0C45739F1FC323D44"), ("00000000000000000000000000000000", "00000001000000000000004000000000", "4F4F10464D1295938B4A04D0061226D5"), ("00010000000000000000000000000000", "00000000000000000000000000200000", "DC6B1D02727E32488E1013EC4E6D0DE5"), ("04000000000000000001000000000000", "00000000000000000000000000000000", "11CEF6A5FECC4E9391DF122E4B16EBAE"), ("08000000000080000000000000000000", "00000000000000000000000000000000", "CD588BCD9C423DD402929808239FB54E"), ("00000000000002000000000004000001", "00000000000000000000000000000000", "D883376CB811F8964FD87EFE31B7ED23"), ("00000000000000000000000000000000", "00000000000000000040000000024000", "83A10F5271FFD053641E9607738AF522"), ("00800000000000000000000000000040", "00000000000000000000000000000002", "FB4DBBE7D1D38200848172A192AD4FF3"), ("04000000000000000000000000000002", "00000000000100000000000000000000", "BCB40A52A37DF190270DA8A159B0C565"), ("00004000000100000000000000002000", "00000000000000000000000000000000", "86487734134E6DAD6BA629C123EBA843"), ("00000000000000000000000000000010", "01000000000000000000000000000001", "F05B1FACD8BA878611CCAED4CA65ABD7"), ("00000000001000000000000000000001", "00000000000000010000000000000000", "4FC0040B265EF8BAC233462F826E18C3"), ("00000000000000000000000000000000", "00000000002004000000000000020000", "6C41ECB21D924D5A53FBF89822C60EA5"), ("20000000000000000000000000000000", "04000000000400000000000000000000", "86EFFC0A943A669524C0899B42FE07C6"), ("00008000000000000000000000000000", "00000000080000000001000000000000", "0FAB1547FE7E51107871DD1984F19E31"), ("00000000000000000000000000008000", "00000001000000000020000000000000", "C7306C2F20C4C6FD69D7450FAE17A3C3"), ("00000000000000000000000000100000", "00000000000000004000000000010000", "68D118A1E670A8D720836DCA98544F1B"), ("00000000000040000010000000000000", "00000000000000000000000000040000", "24DE4D17E49E7DE0B95EC3D43190DDE0"), ("00000400000000000000000004002000", "00000000000000000000000000000000", "3826F610CFEBA5334FC3C4C8C1220015"), ("00000000000000000008000000000000", "00000000000000000000240000000000", "2947A64E5630239E055254598E5C6AC7"), ("00080000000000001000000000000000", "00100000000000000000000000000000", "4BFDF97C5819B3415B81C9E43DFE0A3F"), ("00000000000040000000000000000000", "00000000000000000000010800000000", "B6097F1BB34CF1BE84F9FC0FFC839356"), ("00001000000000000000000000000000", "00000000000000400000000000020000", "77933B7CEABDE68D07779886D58B2136"), ("00000000001000000000000000000000", "00000000000000000000000000000300", "9039EEB150134C3EA2F481EDA185F238"), ("00000000000000100000000200000000", "00000000000000000200000000000000", "7A555E42DE798CB8560541681F48EED6"), ("20000000000000000000000000000000", "00000000000010000000000000000004", "C1F8628A9AA657C4B3B5B41452A00772"), ("00001000000000000000000000000000", "00000000000000002001000000000000", "0DA35F67BC4B929C6B182B8CFEF1C6C2"), ("00000008000000000000000000200000", "00000008000000000000000000000000", "0493188B2841BE2A9D3DDE3FB6075A6F"), ("00000000004000000000000000000100", "00000000000000000000001000000000", "C1479EF7C169916BE1D8D611C7DC1152"), ("00000200000000000000200000000000", "00000100000000000000000000000000", "E68F4A2092FC99D8F3861A27107043D6"), ("00000000001000000000000000000000", "00000002000080000000000000000000", "045020306D48555D93C16A24FD88A16A"), ("00040000000000000000000000000000", "00000000000800000000000000020000", "5C6DC6B2ACF46E99A9A63597BF202D76"), ("00000400000000010000000000000000", "00000000000000000000000000100000", "B72D1D82DF30BE1732801618B2DD2877"), ("08000000000000000000200800000000", "00000000000000000000000000000000", "6E6B46993AD88E379CA368CED75D5374"), ("00020000000000000000000000000000", "00000000000040000000000001000000", "1DF223D602D5009C2949BC6AC24CA58B"), ("00000000400000000002000000000000", "40000000000000000000000000000040", "DB6F8130881E03A20EA91002AF19DA1A"), ("00000200080000000000000000000000", "01000000000000000000000000000002", "5C73696AAB62237EB29EF830C737FCF4"), ("00000000000000000000000100000000", "40000000000000080400000000000000", "4564175E80C989E1663238B40AAF18AB"), ("00800000000000000000000001000000", "00000000000000020000000000000040", "66BD9812ED9004D58C0E13D39981BC35"), ("00000000000000008000000000000000", "01000100000000008000000000000000", "0EFDEB62556BF4A99CCAD7DABD9D993D"), ("00800000000000000000000000000000", "00010000200000000000000400000000", "8B6251BAE22B33F4DEC1D04833EAC0C5"), ("00000000000000000020010000000000", "00000000000000000040000000004000", "E19461C671DDCB20FC94CEFA62D812D4"), ("00000000000000008110000000000000", "00000000000000000000000008000000", "056E2A6AFCD5CA79BC6007C79CA07567"), ("00004000020000000000000000000000", "80000000000000000200000000000000", "FF542BD567421D6D5C014B9E0A8F0485"), ("08000000000000000000000000000000", "40000000000000000000000000004040", "ED2F500989018A2D34902E53B22EE3C5"), ("00000000000000020400000000000000", "20800000000000000000000000000000", "B8DC53595224ED00B7B31F308828483E"), ("02020000000000000000000000080000", "00000000000000000000000000100000", "045E3128879CFDA6F8D07E6DB69DF877"), ("00000000000000000000000000000000", "00800001000000000000000000200001", "B9042377A90997D4812417472F8EB674"), ("00000000400000000000400000000000", "00000000000000200004000000000000", "DA4577A3548E3811E65E43D816F4B166"), ("00001000000000000000000002000000", "00100200000000000000000000000000", "9F8E9344921F1E6EFEBE22C6210D737F"), ("00000000000000000000008000200000", "00400000000000000000000000800000", "4ADD27446DEF8B617581BD7B589898AF"), ("00000000000000000000100000000020", "80000000000000000000080000000000", "1FAE2E4D7E4CBC2F047B4B8686AEB81B"), ("00000004000000000000000000000000", "00020000000000002000000000000001", "7CF73CC3662254E01CC54FE08216FD75"), ("00000000000000800000000000000000", "00000010000000000001040000000000", "5CA455607D7A1B03418723506A0A3157"), ("80000000000000000000000000000000", "04000000000010100000000000000000", "71A73AB3DD37C27E68F4FBDBE97BA1D2"), ("00000000000000000000000000002000", "00000000000000000000400000000005", "E991CA4A9244BF85FB4A46BBC5A1B912"), ("00000010000020000000080000000000", "02000000000000000000000000000000", "2184791DC5706F2BDE2A98CDBC034ABF"), ("00040000000024000000000000000000", "08000000000000000000000000000000", "440FE6DA538FDEE7B24C198262480250"), ("02000000000000000000000000000000", "02000000000000080000000000000040", "D28FEB52D4878297DFD8CC224B8B7670"), ("00000000004000000000000800000000", "00000010000000000000000100000000", "D35C72FC08ADB9930B8789C81FF0D9D6"), ("00000000000040000000000000000000", "00200000000000200000004000000000", "E6F54FEAF9B03C63391CFB5B7E5339C5"), ("00400000000000000000000000000000", "00004000040000040000000000000000", "FD908C40D4DE0611B5821BEB4EE067E4"), ("00000800000000000010000000000000", "00000000000040000400000000000000", "136216F734AE123C43A4985347BF1390"), ("00000000001000000000000000000000", "10000000000000000000080200000000", "2698AF3AA97969058021C1D36EC60DCA"), ("00000000000040002000000000000000", "00010000000000000000000000000020", "C54E55827FA18DAA246B134F4A02E3AE"), ("00000000000000000000080000000000", "40000000000001000000000002000000", "79A5CDC4582CC123592C830C0221AFA3"), ("00000000000000000000002000000040", "00000000000000040400000000000000", "D7FE21611FE4586456EFD1519B27C728"), ("00000400000000000000000000000000", "00000001200000000000000000200000", "21FF1BDA97052663C8DBEAD47762FB72"), ("00200000008000000000000000000000", "00000000000004000000000000004000", "FCDAF8F67B1019CBEEF142837AF7AA3F"), ("00000000000000000000000000000000", "00000020000000000000000002080010", "BB1E21537483A7B2D4F815116DA718F3"), ("00000000000000000000000000000000", "00040000000000040000000021000000", "92D84FF74F379535DDF737D3BE222702"), ("00200000000000000010000000000000", "00000000000000020000000000100000", "3E6FCB779B1A405D3A6D15542381BE81"), ("00000000000000000000002000000000", "00400000001010000000000000000000", "B4321818C54551F2DA3D6D9F10AFEC2E"), ("01000000000200100000000000000000", "00000000000000000400000000000000", "0C0CFA1D312B1252EBFF0E57E328FDBA"), ("00100000100010000000000000000000", "00000000000000008000000000000000", "F659CE96D13E8B19904BF83A6C6BB501"), # AES-192 ("00000000000000000000000000000000", "000000000000000000000000000000000000000000000000", "AAE06992ACBF52A3E8F4A96EC9300BD7"), ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "BF70034E29FF718EE48DDF36BB8174EF"), ("00112233445566778899AABBCCDDEEFF", "000102030405060708090A0B0C0D0E0F1011121314151617", "DDA97CA4864CDFE06EAF70A0EC0D7191"), ("8764272EE95FDB567AD3B6047DE191B7", "5BDC0ABDA89858CD9D684AAF29014474C48506860C532C1B", "E856030D23CCE18EA24DA8BB56589B14"), ("4AE4C42407C344FC457D5A63CDC3CCFE", "AF70E24F83EFF0A71AD863D3E4747FDE103FF068E213FC91", "F3348C0B740D1FFF2A311A431B507F44"), ("E63B70AB1902D29E01227E65711FDAC5", "021B442B837C79F84C9B1C9DAFB7ECA8D8342C436E236D96", "1339E486BE732BC2F84E326418FA6104"), ("F5E47851C3BCA366CA2297B7078DF145", "E962BDAE8E99260DE4A93F9DC9C45C3262FB2CAA1B438A78", "EC3EB6B5FACEDEF9867678BB4CAD077F"), ("BD078EB4EFA46B9D55BAA0F1961C80DF", "A41892534CEA6354B86FC9CEDFFE051DDA2367436E5725F9", "F09033A9DFB5BFD8836220FB8E18E27E"), ("EBEAF269F552829DC7D68299CCCB5FAB", "54B3184CDFA38F8B99A18296872ACD6E5AD48934F010D93A", "228A06665F6DC567C6A79931150EE594"), ("3443A7887555524A38D60EC15B60FD5F", "5B43C2D65FFB61AF6A32E6C5120E568DEBDAD3B5652A2DA8", "C881B9712632CFAA5F23B7F33EB1ED0B"), ("61A1955D86E72596BAF20307A379EF89", "A31077DB7142BC091EE46781036A9831E95F0D2BC7239F85", "16DDD8977ACF802D617C5EFE743AAB4F"), ("E712E70A388E44CD32C241BA21D178C8", "642858DDD3BE7DF5DBE6685F22C8AEDA932D9BED7FA2FDA6", "EC4098FF41AC589A6461A83D419CFCC2"), ("16C5251833B0F6B151B8B22A33FAED9E", "9A290F6AD1CEBFD7FFFF23F2B591C125C7A9F517425F4E2F", "45FFEA7C00557079EE9803F8272B75BC"), ("00000000000000000000000010000000", "000000000000000000000000000000000000000000000000", "BE08AC6DB6BD0583AA9D2ABC71C73DCD"), ("00000020000000000000000000000000", "000000000000000000000000000000000000000000000000", "92AFE9668159BEFFE2A86F8503260164"), ("00000000000000000000000000000000", "000000000000000000000000000008000000000000000000", "4D835E4ABDD4BDC6B88316A6E931A07F"), ("00000000000000000000020000000000", "000000000000000000000000000000000000000000000000", "CA2F383AACCA0810AA13F3E710621422"), ("00000000000000000000000000000000", "000000000020000000000000000002000000000000000000", "F67ADC19DDA431D0B3CF78A2231CBD4B"), ("00000000000000000000000000000000", "000002000800000000000000000000000000000000000000", "CF915931164662C1034B0B44471F3335"), ("00001000000000000020000000000000", "000000000000000000000000000000000000000000000000", "E8F04A8A8C14AE3DF2AF3280ABEF66B7"), ("00000000000000000800000000000004", "000000000000000000000000000000000000000000000000", "FAC65AF4B6C9527A0F3256BCFBEF7234"), ("00000000000080000000000000000040", "000000000000000000000000000000000000000000000000", "CCB5FBDA33E99DEB63D4CDA59C9B0B05"), ("00000000040000000000000000000000", "000000000000200000000000000000000000000000000000", "08303DB792A551018D18DC1C4B31F505"), ("00000000000000000000000000080000", "000000000000008000000000000000000000000000000000", "AB716B4D1E73022309729E2A5E3B01FB"), ("00000000001000000000000000000000", "000000000000000000200000000000000000000000000000", "2C1CC31740ACA3F31C335A8300ED7DF5"), ("00000080004000000000000000000000", "000000000800000000000000000000000000000000000000", "D262B6A197037D26C96E872FF5560675"), ("00000000000000020000000100000000", "000000000000000000000100000000000000000000000000", "C9CEA24053B68C9F005E6732379F8B04"), ("00000000008000000000000000200000", "000000000000000000000000004000000000000000000000", "E60E6AA9D1A8BB90B65E563C66A3F018"), ("00000010000008000000000000000000", "000800000000000000000000000000000000000000000000", "C7C68D16B8F758A9263382BCFDD70357"), ("00000000000000000000000000000004", "000000000200000100000000000000000000000000000000", "ABB3555794D50882C47D0B6EFB360E47"), ("00000000000100000000000000000000", "000080000000000000000800000000000000000000000000", "689B503AD299F51406BE208838829F7C"), ("00000000000000000000000000000000", "004001000000000000000000100000000000000000000000", "7F4B68A23E0D3E7C5B48700B2E17621F"), ("00000000000400000000000000000000", "000000000000000000000200000800000000000000000000", "7CE58523580200E8431A6143443CE740"), ("00000000800000000040000000000000", "000000000000400000000000000000000000000000000000", "451875336BC4277DDE00728EC99FD01B"), ("00000000000000000000001000020000", "000000000000000000000000000000010000000000000000", "FE4D09C2F52E0C9D16D6547D3BFAB2AF"), ("00000000000000800000000000000000", "000000000800000000200000000000000000000000000000", "E0469B2966056E41D57D2AD6618560BE"), ("00000000000000000000020024000000", "000000000000000000000000000000000000000000000000", "F879303D9C137CDDD9B8294600DB6501"), ("00000000000000000240000020000000", "000000000000000000000000000004000000000000000000", "5856F3BAC8B8AE976C41DFD0A7C761A4"), ("00000000000000000000400000000000", "000000000000080000040000800000000000000000000000", "CEF7FAC08E6B841F8F1F1BC691790C8C"), ("00000020020000000000000010000000", "000000000000000000000008000000000000000000000000", "C0C9AE5C6523519CEC08E203B03507C4"), ("20000000000000000000000000004000", "000000800000000000000010000000000000000000000000", "04106A166A94BE645D8B88E2A103FB51"), ("00800000000000000000000000000000", "000000800000200000000000000000010000000000000000", "B4951D676B6C7081CBB3F5B369D87C00"), ("00000000000000002000000000000000", "000100000020000000000000000000010000000000000000", "533B7DC8C7171412366A84ABF936F15E"), ("04000000000000080400000000000000", "000008000000000000000000000000000000000000000000", "8F7A04A6ADB8208BD595C4285F6FEDBD"), ("00000000000002000000000000000001", "800000000000000000200000000000000000000000000000", "6E8636FB5264ABA7DED2156C673CBD65"), ("00000200000040000000001000000010", "000000000000000000000000000000000000000000000000", "B09043715431A69C137E6CD080CDA514"), ("00000100000080000000000000000000", "000000000010000000010000000000000000000000000000", "9C897D633C576B58C2F049D8EB7DC65F"), ("00000020000000004000000000000000", "002000000000000001000000000000000000000000000000", "E49DE60C7F9178EA705046144075F4D9"), ("04000008000000000000000000000000", "000000000000000000000010008000000000000000000000", "1C24F43509431E9757602B71768A192B"), ("00000000000010000000000000000000", "800000000000000000400000080000000000000000000000", "CF73D6ADDD68D73AB72E0874720DFC28"), ("00000000800010000000000040000000", "000000000100000000000000000000000000000000000000", "C79A70647166CACD1CC904CACB9F81D7"), ("00000000000000000800000000020000", "002200000000000000000000000000000000000000000000", "6E68BF14C0603CAE22BCAFBEA58FB3A7"), ("00000000000000020000000000000100", "000000200000000010000000000000000000000000000000", "6C8790E7D62FC4A30B62EB730A835C06"), # AES-256 ("00000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "DC95C078A2408989AD48A21492842087"), ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "D5F93D6D3311CB309F23621B02FBD5E2"), ("00112233445566778899AABBCCDDEEFF", "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F", "8EA2B7CA516745BFEAFC49904B496089"), ("48C062CFD6FDE3530541893DA5BB3F4B", "FA294E61A4D4D6BE71017319D69B1341889EC95572B3BE358EB3D25E871A111A", "913EE4209AB5BEE3A1F9DF079323E11A"), ("A1DDD9487518F7480E606C3809333A4E", "DDE74096F198D7697FC95A3BB1A7DBA8B8F687BAC6231DD760F98D30CFA9EFAD", "286E6477C919E1C36BE0E67593A63C7D"), ("AD920B716DACD79AE75243DE8C945F69", "B75118FE2C382B0E83671193876AC66BD5E4304B6217E2B95A0D3CD17BD6C52A", "F9D88CAE6CF120DCA86DE65C933C8A0C"), ("72186F8DE3AD8FEC6A6087ED4093CCCF", "7AF67072D1CDC9A675455D87751C69ED468E6489BD3BDCDFA77CCE36C0A35182", "AFFCD3292067413953F6021DC0D756D0"), ("80A19B13D4BCF7888CC51ACAFA41458C", "58038EF80DA957EC148B5771C77BCA1C8A38D32629F43B60774BD6A7A028F028", "278FDDCAFFF17BAFE00FDE547C425C2D"), ("9C33EC42F3214552BBF1289ABF74CB6E", "33AE09068B647AB827C1E93BD6C18A760E8C8EF3D0D9DA1C570C1657F3AB3498", "82D053A00CF2BBDE08C17520F74BEE0A"), ("7F8C394066AAF1142AA0D977DBAAFE51", "D95ACFE2006ABCD79EB2F0D0918254E248E63BA56A042B7F6FAB07F67AE169FD", "38D88070D87F67215A35A1468A0237DC"), ("4231BE6CA8EC72E10A1DC0B7EDD0288E", "5B977C4F570161FAEC612100A108EFA95AC5C02DF21A9D5F5CB9AB33E391FD65", "F5EC5E412980436E7779ACD426DEEF68"), ("63E44324B832851B0C6D49E61A610AA1", "F4488A696EA04F2C051E77A70D59C8E5F3D761D2F904F9E0D34028BCD6D88F6D", "BD84DCBE4B0CAAE75C477535DF3C3741"), ("DA9AA0542F771CEE485AB6F07BAB235C", "F2CBF7CB7590DB7AF20DD29ACF241CA61719F69E9B540C5EAA40611BBB741DED", "5B373A47CE0F048CCFB1BC39FCB402D4"), ("7B015D38F27018A00EC396ACB4BB0888", "AF029B412F96BF704DF3C5B98ACF787BE601011885EA0609A4B387CE1DCA92A4", "79BB29DDADC86F219592467C43BBB2A8"), ("C90CAF5B7D0F7136A385BC79A88C6631", "B5F77655FE16B56DD301E27E680FA690C97EEE4FBAC2DE98DE2CDB13936BB3D8", "A3D8D074048A7E142D43705CFF8CFD0A"), ("7B8D9B23320CE6A9B3601BDA9B2AC9A3", "1F91CD13DCE1F56330BC4F99058099654792272A5563B2E2EC02AE9C9F7D7FAC", "EDAEB450079B8D0FF001D5D8E3FABE25"), ("6FF98EF6C4040F0FF91B4DA5A6E96856", "5AFEEC6BC74F407E7BB0D63C9E79406C3FB92B5AE82DD1D73FA7110356AB9B97", "8E61E5AB4BC67C86BF5EFCA65DDA1429"), ("1F4354D47662CD2FAA2EA9F10DB7B184", "EB792394CBFE999E6E94EFACB14DBB19A7E44D1A5DDE4E9B647328C9C1DAD1EA", "105ED20DE3227FB77ABF8D8D91628EB1"), ("55D78158860CC48004E4D718ABBADD19", "12AAA2861F81A9DBF29EFE12979A9DF27D14B6F748AEC73FC9EB6017E1735B48", "0E23D42EF0EAC878AE36AB9EE161297A"), ("9E34F623A10704DF98ABF82C3F381795", "0F4B982AC0F4F60C38B740ED73F0B30CB59507A2DABE059BF1EEBFB91C214355", "1DDECF172D8C9528A3275F9FEBC85185"), ("4E3E114189327862481E5155541633BE", "64652F9458DB5DF4A76FEB5C498E1E3F9D6428D6538923FBA1B7969575B726CD", "04F0B1F7908149FCAAA3F4BE8E06FF46"), ("D2902AC6EEB1B61FF1C38DC4228CCECA", "4D6DDCCA65D92818E024FCAB92B44EDEB2DED2A111BB2D9DBE3D233A4745AE2E", "AC2A79791943280602623BC19F805166"), ("ECB56D59987951D06DEF965C70BA4637", "528351ADABB7C3C625CCC55728E1F6C8E5DFCF67A01D647AEE5B02B4E6F89E65", "87AF97C9EEA2EC4DB06725571B2A4AA9"), ("0CABFAB236DE7E901180FA8A0B7126E2", "E54B3AAF261438F033E31EAB5D17688F543A1953616037DA378A0BAF698CE264", "80E70C5E72445937718C39AD59179A7C"), ("9CC207E4F6B3EB2F78C195BD3292FA91", "5DB9464436754F8B2E3A234B23E5E6687181E649C70043283F527060C7C56B40", "8D5CD92191C46100FEFDDC4188C262AD"), ("B1A0870E7DF994A75BD1A04A90DA7F1E", "445DA60425C922E87B62904BC13523C58CEDD9B8020FC83D7224D7A631411441", "1426D0FF790F2E962390E1103EF51446"), ("C060E427B888D06A095024547EED1AB6", "33CB6B833A2874F7C559C6362AE0CBA582C0E13362C332E58F82FA3DF6CC14D2", "E0F18E719BA3B588B7B49AC6E7AC4FF2"), ("0580C8E1AA94E5CB80ECDE0728781F78", "A8EB7CA134E31D64F732F2A349531A29B7599D9756BC3BF0DEF0A9C23BD72100", "E90965535A315B89AC29F716D656505A"), ("70286A2EB89FC68FD76CF39B1B53F04D", "EBEB1B3A122A5181E1F81CFB57642940D84227C596990647D6C86A15D1D393E7", "AE97035D8AAD67F7A36616F9EF3BC294"), ("44DBD9F80F2B6833359B1BE99A1BA6C7", "E2F1870571D57E17E24D23C23AE6530D9151EEEDCB757B14F971C2AF2E20D7BE", "CEE02FE56CAB2BB923D7D62C8725249B"), ("E3C0F769F486E7495A67E1553B0AF452", "B736E84CD7347B7DAD60F0FBA374AF45DF6E67E5B626FC1C7E73CC971E137F0F", "C2ABB63246B44C92401955F7E416B5E7"), ("7885557DFA40A473D9003ACA007915C3", "E6C6E88BF0A445AE62C210F2DD12DF0A1F237A16C6CD7EAF99989033161B7582", "86C4C9470E4151578B468A413FD040B2"), ("712019C7719B4E88BABF6BD527C59B29", "90723A427382DA17E9A6047116889C3A980DB9E218174B5E01EC9A94DDF2BEBC", "52A1EC9C625D813474B5CBA810565F73"), ("281BC5969F8A18E2A95ED12D455D97EB", "0019D458152AA934E7C4506B5E641C45C2609B522B182CA32F0B10C94641A482", "E2ECC55937480A1A5B86BBF70DCA5E84"), ("C0AD30266961025A99830E26DCB2A6A6", "72780101309AF96510565201BDA59336B80929142FBF4500E789A97BB307B95E", "C5F9DCABE2EC95559B7CC647E520EFA1"), ("736CFF6AD5A3FEC2D7BCB2C92A5FCDFA", "F86482171CE22678CCB991B2FF413C6F304A20A0824DCA4E65074D1F066BC799", "7B33ABDD4CB5C7B0C77B7DBEFE7C0E9D"), ("FEDAF5A1288D720BA4A83A9514BA1B9B", "4C55628AB3AFF786EDD5542E91851A9F4A9B6B416B77B7494A2C88171A05AE7E", "30FA50308DEFE4C6A4B0178BB8207334"), ("E740BE585C4A84AEBF40C5AA237DBB1E", "C6B7DC9D771AE8404396547BE4445B7D42E9419DE1934D75F0F14D93113ED8C2", "B0BCEE92878767373687D54F613639E2"), ("22FACFFDE6EAE8F58F6031A68A740EDB", "2A18E0E9C8A6BF78C7B5C90A78417748E5BA1881FC0DCE786129032F4AA72DE3", "732D368583D8BD580A95BC2720C5E61E"), ("3A4D39B45F1DBB10ADA6B97A201E6BF3", "5B345287EA14E2B60A2A04A7A71F8210E0BC13F5A28F37D80E55AD4BF9D7D810", "386CD41DD07E65C21AFB187C172D590C"), ("63C19C1ACF3BA0F9CC36C42E2C6F0699", "2FDDAE60D9ABC626AA30873B86213F4D547A8DCFC6C6175C0122071D7AD09965", "0BC6AAF7D4A7E412F5F1E1F3C19BAD2D"), ("6E3A5D0BFC841ECDD7A706332C348F4D", "C34911E8F8B18F00FD7CF74794C0CBF37FDAD7FB98F30652653C05AA2CEC1D6D", "647AF95F1D0D6D61179437059A8D02A2"), ("B906776A9CCB7F6E82A15B8DC33B9942", "0E995548726B35A52BB8D11501AEB75E732F6CC0A7B26344B2C13901835CA519", "6F0EFE64D76BDB2690E456453146EC39"), ("00000000000000000000000000000000", "0000000004000000000000000000000000000000000000000000000000000000", "7572F92811A85B9BDD38DEAD9945BCAE"), ("00000000000400000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "8EF8BA007F23C0A50FC120E07041BCCD"), ("00000000000000400000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "6AFF910FA1D5673140E2DB59B8416049"), ("00000000000100000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "B695D72A3FCF508C4050E12E40061C2D"), ("00000000000000080000000000000000", "0000000000000000000000400000000000000000000000000000000000000000", "210F0D99C15B4052EF76F53AE6A39687"), ("00000000000000000000000000000000", "0080000000000000000000000080000000000000000000000000000000000000", "C94EE28218D7B95BF6B8A0C21C789FE3"), ("00000000000000000000000000000000", "0000000000000000000000000010040000000000000000000000000000000000", "5BDA9ECCC5B6DB8CE42BE2D99C94B0E8"), ("08000000000004000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "72F46D9B62F1FD5AD047DDE33481441D"), ("00000000000000000000000000000000", "0000001000000000000000000000000800000000000000000000000000000000", "401411D02AFD262B8158E57956A0E1BD"), ("10000000020000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "793E47BAEBCEAF3E1CD250D8D644DD20"), ("00040000000000000000000000000000", "0000000000000000008000000000000000000000000000000000000000000000", "D0FB3E2144099565F07D53D1A090BC9F"), ("00000000000208000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "437FD62785B3AE7CA91E7AA6E44A852B"), ("00000000000000000000000000000000", "0400000000001000000000000000004000000000000000000000000000000000", "384871EC4178825969D267B6A4EA3BBB"), ("00000100000000000000000000000800", "0000000000080000000000000000000000000000000000000000000000000000", "41A674318797CFEB5E7E5BBAC1FEAEF8"), ("00004020000000000000000000000200", "0000000000000000000000000000000000000000000000000000000000000000", "FCA5716C541B3238E8AED90A38CD6511"), ("00000040000400000000000800000000", "0000000000000000000000000000000000000000000000000000000000000000", "B7AD3ABED073BA820DF68299085AF3AF"), ("00000000000000000000000000000000", "0000120000000000000020000000000000000000000000000000000000000000", "20A040A20F887CA2C067445732359F82"), ("00000000000000000000000000000000", "0000000000000000010104000000000000000000000000000000000000000000", "ABC851EB5862149DA36DB83B1B191B11"), ("00000000000000000000000000000000", "0400000000000000010010000000000000000000000000000000000000000000", "BE85A02F9F81BB3A19FE26FD41ACE545"), ("00000000000000000400000000000000", "0000001000000000000000004000000000000000000000000000000000000000", "506A89EEC4383A03ED091C330AEDA04D"), ("00000000000000000000000000000004", "0000000000000000002000000000000400000000000000000000000000000000", "A04BBECBA38B5D4EEE77F1AA521AE108"), ("04000000000002000000040000000000", "0000000000000000000000000000000000000000000000000000000000000000", "D10B95EAEC1D38A631CA71B9C00AA210"), ("00000000000000000000000000000000", "1000000000000000080000000000080000000000000000000000000000000000", "1ED3731B9F37D418B648A6F11486CCAB"), ("00000801000000000000000000000000", "0000000000001000000000000000000000000000000000000000000000000000", "A5F18C0B60A6B103961D64A524443F91"), ("00180000000000010800000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "22EB0EA8B950802CD3245CD6E72AC483"), ("10004000000000000000000000000000", "0000200000000000000000008000000000000000000000000000000000000000", "D32D1278A00B6CC00077F24D337CAD85"), ("08000000000000000000000800000000", "0000020000000800000000000000000000000000000000000000000000000000", "C03A4C22E25C77050668F2456044E3E3"), ("80100000000000000000000800000000", "0000000000000000000000000000400000000000000000000000000000000000", "CA0A4296966FE9C32DCB23B054091CCC"), ("00000000000000000000000000000000", "0100000000008008000000004000000000000000000000000000000000000000", "FCBA6713FB23AC5E227A97F7F34750F9"), ("00000000000000000000400000100000", "0000100000000000000000000000400000000000000000000000000000000000", "E77B15DE7C28C6DECC5B94AC2570B311"), ("00400000800000000000000000000400", "0004000000000000000000000000000000000000000000000000000000000000", "687E410EE2C267A0B3467982DDEAAAA3"), ("00000000000020000000000000000200", "0000000000000040000000000200000000000000000000000000000000000000", "405A422CCC680A0C766C59EB1BDB62BE"), ("00000000000000000000000000400000", "000000000000000004000000000A000000000000000000000000000000000000", "1F37D1F1DADA93743E302980E714893B"), ("00100000000000000400010000000000", "0000000000000000004000000000000000000000000000000000000000000000", "C0DB0DF74EBE4AE40A2F342ADDFB0ED6"), ("00020000000000000000000000000000", "0000008000000400000000400000000000000000000000000000000000000000", "EA0837A0D1DEA3910CEB185CB4B9DF95"), ("00000000400000000000002000040000", "0020000000000000000000000000000000000000000000000000000000000000", "826A1EC0878D8C0649081D0492C4A9D6"), ("10000000010000002000000000000000", "0001000000000000000000000000000000000000000000000000000000000000", "55C39DC5664400122CC4D18CEEACBABF"), ("00000000000000004000000002000000", "0000000000000000000000000810000000000000000000000000000000000000", "60E50673E830F10814F48F8A701E6824"), ("00100000000000000000000000000000", "0000000000000000004000002000008000000000000000000000000000000000", "02E98ECA142326691704AF3D5A25A361"), ("00000000000000000000840000000000", "0000000000800000000000000000000400000000000000000000000000000000", "3E10998E6E5ADE4A915D0623EF64C461"), ]) def test_blowfish_cipher(self) -> None: import blowfishcipher self._check_invertibility(blowfishcipher.encrypt, blowfishcipher.decrypt, 8, 8) self._check_invertibility(blowfishcipher.encrypt, blowfishcipher.decrypt, 8, 16) self._check_invertibility(blowfishcipher.encrypt, blowfishcipher.decrypt, 8, 24) self._check_invertibility(blowfishcipher.encrypt, blowfishcipher.decrypt, 8, 32) self._check_cipher(blowfishcipher.encrypt, blowfishcipher.decrypt, [ # 64-bit key length ("0000000000000000", "0000000000000000", "4EF997456198DD78"), ("FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF", "51866FD5B85ECB8A"), ("1000000000000001", "3000000000000000", "7D856F9A613063F2"), ("1111111111111111", "1111111111111111", "2466DD878B963C9D"), ("1111111111111111", "0123456789ABCDEF", "61F9C3802281B096"), ("0123456789ABCDEF", "1111111111111111", "7D0CC630AFDA1EC7"), ("0000000000000000", "0000000000000000", "4EF997456198DD78"), ("0123456789ABCDEF", "FEDCBA9876543210", "0ACEAB0FC6A0A28D"), ("01A1D6D039776742", "7CA110454A1A6E57", "59C68245EB05282B"), ("5CD54CA83DEF57DA", "0131D9619DC1376E", "B1B8CC0B250F09A0"), ("0248D43806F67172", "07A1133E4A0B2686", "1730E5778BEA1DA4"), ("51454B582DDF440A", "3849674C2602319E", "A25E7856CF2651EB"), ("42FD443059577FA2", "04B915BA43FEB5B6", "353882B109CE8F1A"), ("059B5E0851CF143A", "0113B970FD34F2CE", "48F4D0884C379918"), ("0756D8E0774761D2", "0170F175468FB5E6", "432193B78951FC98"), ("762514B829BF486A", "43297FAD38E373FE", "13F04154D69D1AE5"), ("3BDD119049372802", "07A7137045DA2A16", "2EEDDA93FFD39C79"), ("26955F6835AF609A", "04689104C2FD3B2F", "D887E0393C2DA6E3"), ("164D5E404F275232", "37D06BB516CB7546", "5F99D04F5B163969"), ("6B056E18759F5CCA", "1F08260D1AC2465E", "4A057A3B24D3977B"), ("004BD6EF09176062", "584023641ABA6176", "452031C1E4FADA8E"), ("480D39006EE762F2", "025816164629B007", "7555AE39F59B87BD"), ("437540C8698F3CFA", "49793EBC79B3258F", "53C55F9CB49FC019"), ("072D43A077075292", "4FB05E1515AB73A7", "7A8E7BFA937E89A3"), ("02FE55778117F12A", "49E95D6D4CA229BF", "CF9C5D7A4986ADB5"), ("1D9D5C5018F728C2", "018310DC409B26D6", "D1ABB290658BC778"), ("305532286D6F295A", "1C587F1C13924FEF", "55CB3774D13EF201"), ("0123456789ABCDEF", "0101010101010101", "FA34EC4847B268B2"), ("0123456789ABCDEF", "1F1F1F1F0E0E0E0E", "A790795108EA3CAE"), ("0123456789ABCDEF", "E0FEE0FEF1FEF1FE", "C39E072D9FAC631D"), ("FFFFFFFFFFFFFFFF", "0000000000000000", "014933E0CDAFF6E4"), ("0000000000000000", "FFFFFFFFFFFFFFFF", "F21E9A77B71C49BC"), ("0000000000000000", "0123456789ABCDEF", "245946885754369A"), ("FFFFFFFFFFFFFFFF", "FEDCBA9876543210", "6B5C5A9C5D9E0A5A"), # Variable key length ("FEDCBA9876543210", "F0", "F9AD597C49DB005E"), ("FEDCBA9876543210", "F0E1", "E91D21C1D961A6D6"), ("FEDCBA9876543210", "F0E1D2", "E9C2B70A1BC65CF3"), ("FEDCBA9876543210", "F0E1D2C3", "BE1E639408640F05"), ("FEDCBA9876543210", "F0E1D2C3B4", "B39E44481BDB1E6E"), ("FEDCBA9876543210", "F0E1D2C3B4A5", "9457AA83B1928C0D"), ("FEDCBA9876543210", "F0E1D2C3B4A596", "8BB77032F960629D"), ("FEDCBA9876543210", "F0E1D2C3B4A59687", "E87A244E2CC85E82"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778", "15750E7A4F4EC577"), ("FEDCBA9876543210", "F0E1D2C3B4A596877869", "122BA70B3AB64AE0"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A", "3A833C9AFFC537F6"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B", "9409DA87A90F6BF2"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C", "884F80625060B8B4"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D", "1F85031C19E11968"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E", "79D9373A714CA34F"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F", "93142887EE3BE15C"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F00", "03429E838CE2D14B"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F0011", "A4299E27469FF67B"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F001122", "AFD5AED1C1BC96A8"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F00112233", "10851C0E3858DA9F"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344", "E6F51ED79B9DB21F"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F001122334455", "64A6E14AFD36B46F"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F00112233445566", "80C7D7D45A5479AD"), ("FEDCBA9876543210", "F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344556677", "05044B62FA52D080"), ]) def test_des_cipher(self) -> None: import descipher self._check_invertibility(descipher.encrypt, descipher.decrypt, 8, 8) self._check_cipher(descipher.encrypt, descipher.decrypt, [ ("0000000000000000", "0000000000000000", "8CA64DE9C1B123A7"), ("FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFF", "7359B2163E4EDC58"), ("1122334455667788", "752878397493CB70", "B5219EE81AA7499D"), ("99AABBCCDDEEFF00", "752878397493CB70", "2196687E13973856"), ("0000000000000000", "10316E028C8F3B4A", "82DCBAFBDEAB6602"), ("8000000000000000", "0101010101010101", "95F8A5E5DD31D900"), ("4000000000000000", "0101010101010101", "DD7F121CA5015619"), ("2000000000000000", "0101010101010101", "2E8653104F3834EA"), ("1000000000000000", "0101010101010101", "4BD388FF6CD81D4F"), ("0800000000000000", "0101010101010101", "20B9E767B2FB1456"), ("0400000000000000", "0101010101010101", "55579380D77138EF"), ("0200000000000000", "0101010101010101", "6CC5DEFAAF04512F"), ("0100000000000000", "0101010101010101", "0D9F279BA5D87260"), ("0080000000000000", "0101010101010101", "D9031B0271BD5A0A"), ("0040000000000000", "0101010101010101", "424250B37C3DD951"), ("0020000000000000", "0101010101010101", "B8061B7ECD9A21E5"), ("0010000000000000", "0101010101010101", "F15D0F286B65BD28"), ("0008000000000000", "0101010101010101", "ADD0CC8D6E5DEBA1"), ("0004000000000000", "0101010101010101", "E6D5F82752AD63D1"), ("0002000000000000", "0101010101010101", "ECBFE3BD3F591A5E"), ("0001000000000000", "0101010101010101", "F356834379D165CD"), ("0000800000000000", "0101010101010101", "2B9F982F20037FA9"), ("0000400000000000", "0101010101010101", "889DE068A16F0BE6"), ("0000200000000000", "0101010101010101", "E19E275D846A1298"), ("0000100000000000", "0101010101010101", "329A8ED523D71AEC"), ("0000080000000000", "0101010101010101", "E7FCE22557D23C97"), ("0000040000000000", "0101010101010101", "12A9F5817FF2D65D"), ("0000020000000000", "0101010101010101", "A484C3AD38DC9C19"), ("0000010000000000", "0101010101010101", "FBE00A8A1EF8AD72"), ("0000008000000000", "0101010101010101", "750D079407521363"), ("0000004000000000", "0101010101010101", "64FEED9C724C2FAF"), ("0000002000000000", "0101010101010101", "F02B263B328E2B60"), ("0000001000000000", "0101010101010101", "9D64555A9A10B852"), ("0000000800000000", "0101010101010101", "D106FF0BED5255D7"), ("0000000400000000", "0101010101010101", "E1652C6B138C64A5"), ("0000000200000000", "0101010101010101", "E428581186EC8F46"), ("0000000100000000", "0101010101010101", "AEB5F5EDE22D1A36"), ("0000000080000000", "0101010101010101", "E943D7568AEC0C5C"), ("0000000040000000", "0101010101010101", "DF98C8276F54B04B"), ("0000000020000000", "0101010101010101", "B160E4680F6C696F"), ("0000000010000000", "0101010101010101", "FA0752B07D9C4AB8"), ("0000000008000000", "0101010101010101", "CA3A2B036DBC8502"), ("0000000004000000", "0101010101010101", "5E0905517BB59BCF"), ("0000000002000000", "0101010101010101", "814EEB3B91D90726"), ("0000000001000000", "0101010101010101", "4D49DB1532919C9F"), ("0000000000800000", "0101010101010101", "25EB5FC3F8CF0621"), ("0000000000400000", "0101010101010101", "AB6A20C0620D1C6F"), ("0000000000200000", "0101010101010101", "79E90DBC98F92CCA"), ("0000000000100000", "0101010101010101", "866ECEDD8072BB0E"), ("0000000000080000", "0101010101010101", "8B54536F2F3E64A8"), ("0000000000040000", "0101010101010101", "EA51D3975595B86B"), ("0000000000020000", "0101010101010101", "CAFFC6AC4542DE31"), ("0000000000010000", "0101010101010101", "8DD45A2DDF90796C"), ("0000000000008000", "0101010101010101", "1029D55E880EC2D0"), ("0000000000004000", "0101010101010101", "5D86CB23639DBEA9"), ("0000000000002000", "0101010101010101", "1D1CA853AE7C0C5F"), ("0000000000001000", "0101010101010101", "CE332329248F3228"), ("0000000000000800", "0101010101010101", "8405D1ABE24FB942"), ("0000000000000400", "0101010101010101", "E643D78090CA4207"), ("0000000000000200", "0101010101010101", "48221B9937748A23"), ("0000000000000100", "0101010101010101", "DD7C0BBD61FAFD54"), ("0000000000000080", "0101010101010101", "2FBC291A570DB5C4"), ("0000000000000040", "0101010101010101", "E07C30D7E4E26E12"), ("0000000000000020", "0101010101010101", "0953E2258E8E90A1"), ("0000000000000010", "0101010101010101", "5B711BC4CEEBF2EE"), ("0000000000000008", "0101010101010101", "CC083F1E6D9E85F6"), ("0000000000000004", "0101010101010101", "D2FD8867D50D2DFE"), ("0000000000000002", "0101010101010101", "06E7EA22CE92708F"), ("0000000000000001", "0101010101010101", "166B40B44ABA4BD6"), ("0000000000000000", "8001010101010101", "95A8D72813DAA94D"), ("0000000000000000", "4001010101010101", "0EEC1487DD8C26D5"), ("0000000000000000", "2001010101010101", "7AD16FFB79C45926"), ("0000000000000000", "1001010101010101", "D3746294CA6A6CF3"), ("0000000000000000", "0801010101010101", "809F5F873C1FD761"), ("0000000000000000", "0401010101010101", "C02FAFFEC989D1FC"), ("0000000000000000", "0201010101010101", "4615AA1D33E72F10"), ("0000000000000000", "0180010101010101", "2055123350C00858"), ("0000000000000000", "0140010101010101", "DF3B99D6577397C8"), ("0000000000000000", "0120010101010101", "31FE17369B5288C9"), ("0000000000000000", "0110010101010101", "DFDD3CC64DAE1642"), ("0000000000000000", "0108010101010101", "178C83CE2B399D94"), ("0000000000000000", "0104010101010101", "50F636324A9B7F80"), ("0000000000000000", "0102010101010101", "A8468EE3BC18F06D"), ("0000000000000000", "0101800101010101", "A2DC9E92FD3CDE92"), ("0000000000000000", "0101400101010101", "CAC09F797D031287"), ("0000000000000000", "0101200101010101", "90BA680B22AEB525"), ("0000000000000000", "0101100101010101", "CE7A24F350E280B6"), ("0000000000000000", "0101080101010101", "882BFF0AA01A0B87"), ("0000000000000000", "0101040101010101", "25610288924511C2"), ("0000000000000000", "0101020101010101", "C71516C29C75D170"), ("0000000000000000", "0101018001010101", "5199C29A52C9F059"), ("0000000000000000", "0101014001010101", "C22F0A294A71F29F"), ("0000000000000000", "0101012001010101", "EE371483714C02EA"), ("0000000000000000", "0101011001010101", "A81FBD448F9E522F"), ("0000000000000000", "0101010801010101", "4F644C92E192DFED"), ("0000000000000000", "0101010401010101", "1AFA9A66A6DF92AE"), ("0000000000000000", "0101010201010101", "B3C1CC715CB879D8"), ("0000000000000000", "0101010180010101", "19D032E64AB0BD8B"), ("0000000000000000", "0101010140010101", "3CFAA7A7DC8720DC"), ("0000000000000000", "0101010120010101", "B7265F7F447AC6F3"), ("0000000000000000", "0101010110010101", "9DB73B3C0D163F54"), ("0000000000000000", "0101010108010101", "8181B65BABF4A975"), ("0000000000000000", "0101010104010101", "93C9B64042EAA240"), ("0000000000000000", "0101010102010101", "5570530829705592"), ("0000000000000000", "0101010101800101", "8638809E878787A0"), ("0000000000000000", "0101010101400101", "41B9A79AF79AC208"), ("0000000000000000", "0101010101200101", "7A9BE42F2009A892"), ("0000000000000000", "0101010101100101", "29038D56BA6D2745"), ("0000000000000000", "0101010101080101", "5495C6ABF1E5DF51"), ("0000000000000000", "0101010101040101", "AE13DBD561488933"), ("0000000000000000", "0101010101020101", "024D1FFA8904E389"), ("0000000000000000", "0101010101018001", "D1399712F99BF02E"), ("0000000000000000", "0101010101014001", "14C1D7C1CFFEC79E"), ("0000000000000000", "0101010101012001", "1DE5279DAE3BED6F"), ("0000000000000000", "0101010101011001", "E941A33F85501303"), ("0000000000000000", "0101010101010801", "DA99DBBC9A03F379"), ("0000000000000000", "0101010101010401", "B7FC92F91D8E92E9"), ("0000000000000000", "0101010101010201", "AE8E5CAA3CA04E85"), ("0000000000000000", "0101010101010180", "9CC62DF43B6EED74"), ("0000000000000000", "0101010101010140", "D863DBB5C59A91A0"), ("0000000000000000", "0101010101010120", "A1AB2190545B91D7"), ("0000000000000000", "0101010101010110", "0875041E64C570F7"), ("0000000000000000", "0101010101010108", "5A594528BEBEF1CC"), ("0000000000000000", "0101010101010104", "FCDB3291DE21F0C0"), ("0000000000000000", "0101010101010102", "869EFD7F9F265A09"), ("0000000000000000", "1046913489980131", "88D55E54F54C97B4"), ("0000000000000000", "1007103489988020", "0C0CC00C83EA48FD"), ("0000000000000000", "10071034C8980120", "83BC8EF3A6570183"), ("0000000000000000", "1046103489988020", "DF725DCAD94EA2E9"), ("0000000000000000", "1086911519190101", "E652B53B550BE8B0"), ("0000000000000000", "1086911519580101", "AF527120C485CBB0"), ("0000000000000000", "5107B01519580101", "0F04CE393DB926D5"), ("0000000000000000", "1007B01519190101", "C9F00FFC74079067"), ("0000000000000000", "3107915498080101", "7CFD82A593252B4E"), ("0000000000000000", "3107919498080101", "CB49A2F9E91363E3"), ("0000000000000000", "10079115B9080140", "00B588BE70D23F56"), ("0000000000000000", "3107911598080140", "406A9A6AB43399AE"), ("0000000000000000", "1007D01589980101", "6CB773611DCA9ADA"), ("0000000000000000", "9107911589980101", "67FD21C17DBB5D70"), ("0000000000000000", "9107D01589190101", "9592CB4110430787"), ("0000000000000000", "1007D01598980120", "A6B7FF68A318DDD3"), ("0000000000000000", "1007940498190101", "4D102196C914CA16"), ("0000000000000000", "0107910491190401", "2DFA9F4573594965"), ("0000000000000000", "0107910491190101", "B46604816C0E0774"), ("0000000000000000", "0107940491190401", "6E7E6221A4F34E87"), ("0000000000000000", "19079210981A0101", "AA85E74643233199"), ("0000000000000000", "1007911998190801", "2E5A19DB4D1962D6"), ("0000000000000000", "10079119981A0801", "23A866A809D30894"), ("0000000000000000", "1007921098190101", "D812D961F017D320"), ("0000000000000000", "100791159819010B", "055605816E58608F"), ("0000000000000000", "1004801598190101", "ABD88E8B1B7716F1"), ("0000000000000000", "1004801598190102", "537AC95BE69DA1E1"), ("0000000000000000", "1004801598190108", "AED0F6AE3C25CDD8"), ("0000000000000000", "1002911598100104", "B3E35A5EE53E7B8D"), ("0000000000000000", "1002911598190104", "61C79C71921A2EF8"), ("0000000000000000", "1002911598100201", "E2F5728F0995013C"), ("0000000000000000", "1002911698100101", "1AEAC39A61F0A464"), ("01A1D6D039776742", "7CA110454A1A6E57", "690F5B0D9A26939B"), ("5CD54CA83DEF57DA", "0131D9619DC1376E", "7A389D10354BD271"), ("0248D43806F67172", "07A1133E4A0B2686", "868EBB51CAB4599A"), ("51454B582DDF440A", "3849674C2602319E", "7178876E01F19B2A"), ("42FD443059577FA2", "04B915BA43FEB5B6", "AF37FB421F8C4095"), ("059B5E0851CF143A", "0113B970FD34F2CE", "86A560F10EC6D85B"), ("0756D8E0774761D2", "0170F175468FB5E6", "0CD3DA020021DC09"), ("762514B829BF486A", "43297FAD38E373FE", "EA676B2CB7DB2B7A"), ("3BDD119049372802", "07A7137045DA2A16", "DFD64A815CAF1A0F"), ("26955F6835AF609A", "04689104C2FD3B2F", "5C513C9C4886C088"), ("164D5E404F275232", "37D06BB516CB7546", "0A2AEEAE3FF4AB77"), ("6B056E18759F5CCA", "1F08260D1AC2465E", "EF1BF03E5DFA575A"), ("004BD6EF09176062", "584023641ABA6176", "88BF0DB6D70DEE56"), ("480D39006EE762F2", "025816164629B007", "A1F9915541020B56"), ("437540C8698F3CFA", "49793EBC79B3258F", "6FBF1CAFCFFD0556"), ("072D43A077075292", "4FB05E1515AB73A7", "2F22E49BAB7CA1AC"), ("02FE55778117F12A", "49E95D6D4CA229BF", "5A6B612CC26CCE4A"), ("1D9D5C5018F728C2", "018310DC409B26D6", "5F4C038ED12B2E41"), ("305532286D6F295A", "1C587F1C13924FEF", "63FAC0D034D9F793"), ]) def test_idea_cipher(self) -> None: import ideacipher self._check_invertibility(ideacipher.encrypt, ideacipher.decrypt, 8, 16) self._check_cipher(ideacipher.encrypt, ideacipher.decrypt, [ ("0000000100020003", "00010002000300040005000600070008", "11FBED2B01986DE5"), ("DB2D4A92AA68273F", "000102030405060708090A0B0C0D0E0F", "0011223344556677"), ("F129A6601EF62A47", "2BD6459F82C5B300952C49104881FF48", "EA024714AD5C4D84"), ]) def test_tea_cipher(self) -> None: import teacipher self._check_invertibility(teacipher.encrypt, teacipher.decrypt, 8, 16) self._check_cipher(teacipher.encrypt, teacipher.decrypt, [ ("0000000000000000", "00000000000000000000000000000000", "41EA3A0A94BAA940"), ("FFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "319BBEFB016ABDB2"), ("0000000000000000", "00000000800000000000000000000000", "9327C49731B08BBE"), ("0000000000000000", "80000000000000000000000000000000", "9327C49731B08BBE"), ("0000000000000000", "80000000000000008000000080000000", "9327C49731B08BBE"), ("0000000000000000", "00000000800000008000000080000000", "9327C49731B08BBE"), ("A240C5B41E29C357", "2310C113A0166B5E13AFEA71B560CCBE", "725E20D1B8ABCBBB"), ("9466CA33C5265EC8", "60876116E23C8971D3BBD1E706AF8E07", "02C2F412056067BE"), ("04F2788F3870B7BB", "01CAB749C990AB430987C1BC704903E1", "43057258DF36A1E5"), ("3C67FA25BF95E3EE", "90BAF6A8E42C66EE507522D26EC56D11", "4DFCC3CF59742B29"), ("F27B904377FD4CC9", "C6C9B8DB52CA23D331169A6CDE5D30A5", "081A070917629473"), ("7E749DFA332BA0F3", "B264304524C6E467E95EE184F22BC02A", "C885D1F8267591C6"), ("6A63B55D2E1D1FFE", "DC31565DBD925F065351485B02535EDF", "FB3FD9B39E9558C7"), ("DB5E7946917450F6", "DAF6277C11937ED3337B51B2804333D1", "03F37655EE63F07D"), ("A6B3C4B1D54D4D7C", "B4514C9A3888FC5C2BA253E040C176C8", "4DB40FBAE132B052"), ("56127B57D6B506FA", "D723D35EBA202DDE0373B1590EA94AD8", "CFC76A88C01C32A4"), ("8839FF8F2EF892E5", "60903DC95AA15AB7C31F39888DC48F47", "F61629B5DBAACED8"), ("4798B6849037F036", "0D9F2422118855B981A66F27D162E853", "D87168B8BB8AA3F3"), ("E3414906705D1532", "28299D8798E1309C857DD91A2DF4B38A", "47B6AA80E73295A2"), ("241F7ACF45DF0614", "C567C13D43635A664C59E9EFE3FB2BCD", "C5D2036CFD23AD70"), ("0845F1C186A10FF5", "FB268153ACC08D4C088F438A153B8BC4", "E7A2BA6D6E2535E0"), ("723E5EB753AA2D00", "6B3902A96D0E4095A120A5C79CC16100", "63767CDD69D106DC"), ("D8E4590FA35D74A6", "2DD9369553188FBC1C3059CDF16F4844", "2A4113EC3A117F9A"), ("327CA4FC7C447055", "73335A695E2A9C0A22BBB6B1E2F90202", "A0AFFBD3488E1FA6"), ("377878A5C8A16EBF", "DA1546E2D0C1E391EE8577129863617A", "7EA5BE7ACD76F68E"), ("EF550EBFD18BBBDB", "CC60B6EF9CC04BCC6552799AD8615CE8", "C8E33B3C45E11DE6"), ("0000000040000000", "00000000000000000000000000000000", "D3CEE88F818622C4"), ("0000000000000000", "00000000000000000800000000000000", "8217710F75D1EC9E"), ("0000000000000000", "00000008000000000000000000000000", "65A876C07202FAF4"), ("0000000000000000", "00000000000000004000000000000000", "76FBEC33247FAE1E"), ("0000000000000000", "00000000000000000000000000400000", "36F1BF1828068CEC"), ("0000000000000000", "00000000000000000000000000000002", "DEF21AEFB9E791BC"), ("0000000000010000", "00000000000000000000000000000000", "8E0A303C90A7EFED"), ("0000000000000000", "00000000000000000000000000008000", "FD7711E03883F332"), ("0000000000000000", "00020000000000000000000000000000", "5E34D77E40C1C08E"), ("0000000000000000", "00000000000000000100000000000000", "6B1C0E516C417FC3"), ("0000000000000000", "01000000000000000100000000000000", "C669F8B39A776902"), ("0020000000001000", "00000000000000000000000000000000", "D2511F10D08DA392"), ("0000000000000000", "00020000020000000000000000000000", "98AB01852AD42624"), ("0000000000000000", "00008800000000000000000000000000", "F3F85FA0A144D0F9"), ("0080000000000000", "00000000000000000000000000010000", "7AFB50902B1B65EA"), ("0000000000000000", "00000000004000000000002000000000", "AD13288341452F72"), ("0000000000000000", "00400000000000000000000008000000", "C638C2A3F38EFFE5"), ("0008000000000000", "00000000000008000000000000000000", "F66F939BF8E9B384"), ("0000000000000240", "00000000000000000000000000000000", "37916A534B4BA39B"), ("0000000000002000", "00000000000000000000000000000200", "C939E65D75A04801"), ("0800000000000020", "00000000000000000000000000000000", "2ECE40AB2117DAEE"), ("0000000000001000", "00040000000000000000000000000000", "579943FEA3DC8562"), ("0000010000000000", "00000000000000000000000000000008", "09824904452DBBA7"), ("0000000000000080", "00000000000000000000020000000000", "FDA811E66E30B50C"), ("0000000080000000", "00004000000000000000000000000000", "E13D0BDBB27536FB"), ("0000000000000000", "00000000000000000080000000000008", "FBD039A34F9BB296"), ("0000000000000000", "00000000000000000000800000800000", "4F9E2F9B9891608B"), ("0000000000000000", "00000002000000100000000000000000", "6942448727E80C57"), ("0000000000000000", "40000100000000000000000000000000", "B281AB19E0212D28"), ("0000000000000000", "00000000000020000100000000000000", "95C57E07CAB03245"), ("0040000020400000", "00000000000000000000000000000000", "E8E40B17DF5FBC0A"), ("0000000000000000", "00000080000000000008000000000010", "DDED8B5200BBAC48"), ("0000004000000000", "08000000000000000000000001000000", "EDA161A8796501F9"), ("0100000000000000", "00000400800000000000000000000000", "203F45F748CB7750"), ("0000000000800000", "00000000280000000000000000000000", "B808FD68B5BB6034"), ("0000000400000001", "00000000000000000000000000000004", "595B14247E3C44C1"), ("0000000000000000", "00000000000080000080020000000000", "7D9F1A98571B9367"), ("8000000000000000", "04000000000000000000000000000008", "71C3103A6E4E46D2"), ("0000000000000000", "00000000000100000000020000100000", "88670F7ED55FA8BD"), ("0000000000000000", "00000000000000000020000000080001", "E37E3DA11CF2D776"), ("0000000000008000", "00800000000000000000010000000000", "5F9259ABB450498C"), ("0002000000000000", "00000000000000000000004000100000", "2235C4FE08417193"), ("0000000000080000", "00000000000000008000000000008000", "61D329360E7E115F"), ("8000000000000000", "00000000100000020000000000000000", "845D68CF964BA906"), ("0000000010000000", "00000000000000004000000000200000", "AB81C982CEFD7E7A"), ("0000000000000001", "00000000400000008000000000000000", "45D93B5B146CD7A9"), ("0008000000001000", "40000000000000000000000000000000", "C46318435DA76430"), ("0000000000000000", "00000000000080000000000080000100", "EF2FD0D14A2FA6E2"), ("0000000080000000", "00000400000000000000000000000004", "E47A01B2E6B08256"), ("0004000000000000", "08000000000800000000000000000000", "4C3E4068FF502C0C"), ("0000000000000000", "00000000000000001000001004000000", "1452646545C8DE14"), ("0000000000008000", "00000010000000000000000000800000", "444EC47C65854613"), ("0000000000000000", "00000800000000000800000000000004", "39813EB14E69BCC1"), ("2000000000000020", "00000000000000000000000000100000", "E92CACE0CCFEBE5A"), ("0000000000000000", "00000000040010000200000000000000", "CAA94656D21AE933"), ("0000000008000020", "00000000000100000000000000000000", "5E8AEB3BCBAA4333"), ("0000000000000000", "0000000000000080000000000C000000", "5B5CFCC246A2AC3D"), ("0002000000000000", "00000000000000080002000000000000", "CFD83C42460DA917"), ("0000001000000000", "00000000000004000000000080000000", "AA0A9E31EFA4CD8D"), ("0000000000080000", "00000004000000000020000000000000", "2883176EF831C31F"), ("0800000000000000", "0000C000000000000000100000000000", "27702FA57EA3BEF3"), ("0000000000000200", "41010000000000000000000000000000", "EC6CE000DA8ADE91"), ("0080000000000008", "00000000004000000004000000000000", "1BE4E6B3ADF48A04"), ("0000000008400802", "00000000000000000000000000000000", "DC9CFFC3019ADEDF"), ("0000000000040000", "00000000008100000000000000001000", "C61F7D600751D3C9"), ("0000000020000040", "00000000000000000000000000011000", "7913770B244C7D05"), ("0000000000280000", "00080000000000100000000000000000", "2CE665B942C5B87E"), ("0000000000000000", "00000000000000204000024000000000", "9874C4432AA45BC3"), ("4040000000000000", "00000000800000000000008000000000", "9BF9BED3F995CFBA"), ("0000000000000100", "80100000000000000000020000000000", "EC772CC19526B1DF"), ("0000000010000000", "00000000000020000000008800000000", "EFE7E0BDF6E5E10C"), ("0000000000000006", "00000000000000808000000000000000", "3BDB15AE4738AEFF"), ("0000002000000400", "00001000000000000000400000000000", "C79BEC2F3BDE775A"), ("0000000000000000", "05000000002200000000000000000000", "C4786FF1FE657DCE"), ("0000000000000000", "00000004000000000800000400080000", "C4D85589E7C013C8"), ("0000000000000000", "00000000000000000100000104008000", "0A03454B740ED33D"), ("0000000008020000", "00000000000001000000000020000000", "C2E1125AEEC567DC"), ("0000000000000800", "00000000008000000001001000000000", "2590580CDA870DD8"), ("000000000C000200", "00000000000000000000100000000000", "FE0E899841C93B44"), ("0000000000001000", "00000000010400002000000000000000", "C3D8BD4E2D5C581E"), ("0000000002000010", "00000000000000000200000080000000", "433C38A8F8B26059"), ("0000000200000002", "02000000000000000000000004000000", "FB4601AB6D9E6BE7"), ("0000000004000000", "04000000000400000400000000000000", "4E548587DEE729FF"), ("0000000000000000", "00000000003000000800000000000002", "C0794C359F38D28B"), ("0000000000002000", "00000000000000000000100048000000", "1E1CE779261C1CA0"), ("0000000200000000", "00020800000000000000000000000002", "25A475D3A46FD4A1"), ("0000000000020000", "00020000002001000000000000000000", "A2E53FB836D955C4"), ("0000000000000000", "00000000001000100000010000040000", "D11DABE44D0D230A"), ("4000000000000000", "00000800000000000000002000008000", "9BF19DCD333D4320"), ("0008100000002000", "00000000000000000000100000000000", "7B7FE9288BF3DA54"), ("0000000000002000", "00000000040000020000000000000010", "BE44D82BBB77BAE2"), ("0000020000000001", "10000000000000000000080000000000", "8AD91ADEF81056ED"), ("0000000000040200", "00000000000005000000000000000000", "4BD79D257199DE87"), ("0000000000000000", "84020000000000000000000004000000", "CB3ABFCA403F821E"), ("0008000002000000", "00008020000000000000000000000000", "07F00F7756D0676B"), ("0000000000000000", "00000000080000000002000001200000", "DF1CBA6E28C52248"), ("0000000000000000", "00000000000001880000400000000000", "1A31502485B74605"), ("0000001000000000", "00000000000080800200000000000000", "817B9191B919FD38"), ("0000000000000000", "00000000400240000000040000000000", "CDF58B5E1B4A4C35"), ("0000100400000000", "00002000000000000000000000040000", "363EA0D57B72783F"), ]) def test_twofish_cipher(self) -> None: import twofishcipher self._check_invertibility(twofishcipher.encrypt, twofishcipher.decrypt, 16, 16) self._check_invertibility(twofishcipher.encrypt, twofishcipher.decrypt, 16, 24) self._check_invertibility(twofishcipher.encrypt, twofishcipher.decrypt, 16, 32) self._check_cipher(twofishcipher.encrypt, twofishcipher.decrypt, [ # 128-bit key length ("00000000000000000000000000000000", "00000000000000000000000000000000", "9F589F5CF6122C32B6BFEC2F2AE8C35A"), ("9F589F5CF6122C32B6BFEC2F2AE8C35A", "00000000000000000000000000000000", "D491DB16E7B1C39E86CB086B789F5419"), ("D491DB16E7B1C39E86CB086B789F5419", "9F589F5CF6122C32B6BFEC2F2AE8C35A", "019F9809DE1711858FAAC3A3BA20FBC3"), ("019F9809DE1711858FAAC3A3BA20FBC3", "D491DB16E7B1C39E86CB086B789F5419", "6363977DE839486297E661C6C9D668EB"), ("6363977DE839486297E661C6C9D668EB", "019F9809DE1711858FAAC3A3BA20FBC3", "816D5BD0FAE35342BF2A7412C246F752"), ("816D5BD0FAE35342BF2A7412C246F752", "6363977DE839486297E661C6C9D668EB", "5449ECA008FF5921155F598AF4CED4D0"), ("5449ECA008FF5921155F598AF4CED4D0", "816D5BD0FAE35342BF2A7412C246F752", "6600522E97AEB3094ED5F92AFCBCDD10"), ("6600522E97AEB3094ED5F92AFCBCDD10", "5449ECA008FF5921155F598AF4CED4D0", "34C8A5FB2D3D08A170D120AC6D26DBFA"), ("34C8A5FB2D3D08A170D120AC6D26DBFA", "6600522E97AEB3094ED5F92AFCBCDD10", "28530B358C1B42EF277DE6D4407FC591"), ("28530B358C1B42EF277DE6D4407FC591", "34C8A5FB2D3D08A170D120AC6D26DBFA", "8A8AB983310ED78C8C0ECDE030B8DCA4"), ("BCA724A54533C6987E14AA827952F921", "137A24CA47CD12BE818DF4D2F4355960", "6B459286F3FFD28D49F15B1581B08E42"), ("6B459286F3FFD28D49F15B1581B08E42", "BCA724A54533C6987E14AA827952F921", "5D9D4EEFFA9151575524F115815A12E0"), # 192-bit key length ("00000000000000000000000000000000", "0123456789ABCDEFFEDCBA98765432100011223344556677", "CFD1D2E5A9BE9CDF501F13B892BD2248"), ("00000000000000000000000000000000", "000000000000000000000000000000000000000000000000", "EFA71F788965BD4453F860178FC19101"), ("EFA71F788965BD4453F860178FC19101", "000000000000000000000000000000000000000000000000", "88B2B2706B105E36B446BB6D731A1E88"), ("88B2B2706B105E36B446BB6D731A1E88", "EFA71F788965BD4453F860178FC191010000000000000000", "39DA69D6BA4997D585B6DC073CA341B2"), ("39DA69D6BA4997D585B6DC073CA341B2", "88B2B2706B105E36B446BB6D731A1E88EFA71F788965BD44", "182B02D81497EA45F9DAACDC29193A65"), ("182B02D81497EA45F9DAACDC29193A65", "39DA69D6BA4997D585B6DC073CA341B288B2B2706B105E36", "7AFF7A70CA2FF28AC31DD8AE5DAAAB63"), ("7AFF7A70CA2FF28AC31DD8AE5DAAAB63", "182B02D81497EA45F9DAACDC29193A6539DA69D6BA4997D5", "D1079B789F666649B6BD7D1629F1F77E"), ("D1079B789F666649B6BD7D1629F1F77E", "7AFF7A70CA2FF28AC31DD8AE5DAAAB63182B02D81497EA45", "3AF6F7CE5BD35EF18BEC6FA787AB506B"), ("3AF6F7CE5BD35EF18BEC6FA787AB506B", "D1079B789F666649B6BD7D1629F1F77E7AFF7A70CA2FF28A", "AE8109BFDA85C1F2C5038B34ED691BFF"), ("AE8109BFDA85C1F2C5038B34ED691BFF", "3AF6F7CE5BD35EF18BEC6FA787AB506BD1079B789F666649", "893FD67B98C550073571BD631263FC78"), ("893FD67B98C550073571BD631263FC78", "AE8109BFDA85C1F2C5038B34ED691BFF3AF6F7CE5BD35EF1", "16434FC9C8841A63D58700B5578E8F67"), ("FB66522C332FCC4C042ABE32FA9E902F", "DEA4F3DA75EC7A8EAC3861A9912402CD5DBE44032769DF54", "F0AB73301125FA21EF70BE5385FB76B6"), ("F0AB73301125FA21EF70BE5385FB76B6", "FB66522C332FCC4C042ABE32FA9E902FDEA4F3DA75EC7A8E", "E75449212BEEF9F4A390BD860A640941"), # 256-bit key length ("00000000000000000000000000000000", "0123456789ABCDEFFEDCBA987654321000112233445566778899AABBCCDDEEFF", "37527BE0052334B89F0CFCCAE87CFA20"), ("00000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "57FF739D4DC92C1BD7FC01700CC8216F"), ("57FF739D4DC92C1BD7FC01700CC8216F", "0000000000000000000000000000000000000000000000000000000000000000", "D43BB7556EA32E46F2A282B7D45B4E0D"), ("D43BB7556EA32E46F2A282B7D45B4E0D", "57FF739D4DC92C1BD7FC01700CC8216F00000000000000000000000000000000", "90AFE91BB288544F2C32DC239B2635E6"), ("90AFE91BB288544F2C32DC239B2635E6", "D43BB7556EA32E46F2A282B7D45B4E0D57FF739D4DC92C1BD7FC01700CC8216F", "6CB4561C40BF0A9705931CB6D408E7FA"), ("6CB4561C40BF0A9705931CB6D408E7FA", "90AFE91BB288544F2C32DC239B2635E6D43BB7556EA32E46F2A282B7D45B4E0D", "3059D6D61753B958D92F4781C8640E58"), ("3059D6D61753B958D92F4781C8640E58", "6CB4561C40BF0A9705931CB6D408E7FA90AFE91BB288544F2C32DC239B2635E6", "E69465770505D7F80EF68CA38AB3A3D6"), ("E69465770505D7F80EF68CA38AB3A3D6", "3059D6D61753B958D92F4781C8640E586CB4561C40BF0A9705931CB6D408E7FA", "5AB67A5F8539A4A5FD9F0373BA463466"), ("5AB67A5F8539A4A5FD9F0373BA463466", "E69465770505D7F80EF68CA38AB3A3D63059D6D61753B958D92F4781C8640E58", "DC096BCD99FC72F79936D4C748E75AF7"), ("DC096BCD99FC72F79936D4C748E75AF7", "5AB67A5F8539A4A5FD9F0373BA463466E69465770505D7F80EF68CA38AB3A3D6", "C5A3E7CEE0F1B7260528A68FB4EA05F2"), ("C5A3E7CEE0F1B7260528A68FB4EA05F2", "DC096BCD99FC72F79936D4C748E75AF75AB67A5F8539A4A5FD9F0373BA463466", "43D5CEC327B24AB90AD34A79D0469151"), ("248A7F3528B168ACFDD1386E3F51E30C", "2E2158BC3E5FC714C1EEECA0EA696D48D2DED73E59319A8138E0331F0EA149EA", "431058F4DBC7F734DA4F02F04CC4F459"), ("431058F4DBC7F734DA4F02F04CC4F459", "248A7F3528B168ACFDD1386E3F51E30C2E2158BC3E5FC714C1EEECA0EA696D48", "37FE26FF1CF66175F5DDF4C33B97A205"), ]) def do_iterated(keylen: int) -> bytes: plaintexts: List[bytes] = [b"\x00" * 16] * 3 for _ in range(49): key: bytes = (plaintexts[-2] + plaintexts[-3])[ : keylen] ciphertext: bytes = twofishcipher.encrypt(plaintexts[-1], key) plaintexts.append(ciphertext) return plaintexts[-1] self.assertEqual(do_iterated(16), bytes.fromhex("5D9D4EEFFA9151575524F115815A12E0")) self.assertEqual(do_iterated(24), bytes.fromhex("E75449212BEEF9F4A390BD860A640941")) self.assertEqual(do_iterated(32), bytes.fromhex("37FE26FF1CF66175F5DDF4C33B97A205")) # Private utilities def _check_cipher(self, encfunc: Callable[[bytes,bytes],bytes], decfunc: Callable[[bytes,bytes],bytes], cases: List[Tuple[str,str,str]]) -> None: global num_test_cases for (plaintext_hex, key_hex, expectciphertext_hex) in cases: key_bin: bytes = bytes.fromhex(key_hex) plaintext_bin: bytes = bytes.fromhex(plaintext_hex) actualciphertext_bin: bytes = encfunc(plaintext_bin, key_bin) expectciphertext_bin: bytes = bytes.fromhex(expectciphertext_hex) decrypted_bin: bytes = decfunc(actualciphertext_bin, key_bin) self.assertEqual(actualciphertext_bin, expectciphertext_bin) self.assertEqual(decrypted_bin, plaintext_bin) num_test_cases += 1 def _check_invertibility(self, encfunc: Callable[[bytes,bytes],bytes], decfunc: Callable[[bytes,bytes],bytes], blocklen: int, keylen: int) -> None: global num_test_cases TRIALS = 300 for _ in range(TRIALS): key = bytes(random.randrange(256) for _ in range(keylen)) message = bytes(random.randrange(256) for _ in range(blocklen)) encrypted: bytes = encfunc(message, key) decrypted: bytes = decfunc(encrypted, key) self.assertEqual(decrypted, message) 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")