a fŸWcã@s¨dZddlmZmZddlmZddlZddlmZm Z m Z ddl m Z ddl mZmZgd¢ZGd d „d eƒZd d „Zeeƒd ƒGdd„deƒƒZGdd„deƒZdS)z2passlib.tests -- unittests for passlib.crypto._md4é)Úwith_statementÚdivision)ÚhexlifyN)Ú bascii_to_strÚPY3Úu)Ú lookup_hash)ÚTestCaseÚ skipUnless)Ú_Common_MD4_TestÚMD4_Builtin_TestÚ MD4_SSL_Testc@sHeZdZdZgd¢Zdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dS)r z$common code for testing md4 backends))óÚ 31d6cfe0d16ae931b73c59d7e0c089c0)óaÚ bde52cb31de33e46245e05fbdbd6fb24)óabcZ a448017aaf21d8525fc10ae87aa6729d)smessage digestZ d9130a8164549fe818874806e1c7014b)sabcdefghijklmnopqrstuvwxyzÚ d79e1c308aa5bbcdeea8ed63df412da9)s>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z 043f8582f241db351ce627e153e7f0e4)sP12345678901234567890123456789012345678901234567890123456789012345678901234567890Z e33b4ddc9c38f2199c3e7b164fcc0536cCs tdƒjS)zd get md4 constructor -- overridden by subclasses to use alternate backends. Úmd4)rÚconst©Úself©rúI/usr/lib/python3.9/site-packages/passlib/tests/test_crypto_builtin_md4.pyÚ get_md4_const'sz_Common_MD4_Test.get_md4_constcCs8| ¡ƒ}| |jd¡| |jd¡| |jd¡dS)zinformational attributesréé@N)rÚ assertEqualÚnameÚ digest_sizeÚ block_size)rÚhrrrÚ test_attrs.s z_Common_MD4_Test.test_attrscCs¬| ¡}|dƒ}| | ¡d¡| d¡| | ¡d¡| d¡| | ¡d¡tr„|ƒ}| t|jtdƒ¡| | ¡d¡n$|ƒ}| tdƒ¡| | ¡d¡dS) zupdate() methodrrrrsbcdefghijklmnopqrstuvwxyzrÚaN)rrÚ hexdigestÚupdaterZ assertRaisesÚ TypeErrorr)rrr!rrrÚtest_md4_update5s  z _Common_MD4_Test.test_md4_updatecCs4| ¡}|jD] \}}||ƒ ¡}| ||¡qdS)zhexdigest() methodN)rÚvectorsr$r©rrÚinputÚhexÚoutrrrÚtest_md4_hexdigestLs z#_Common_MD4_Test.test_md4_hexdigestcCs<| ¡}|jD](\}}tt||ƒ ¡ƒƒ}| ||¡qdS)zdigest() methodN)rr(rrÚdigestrr)rrrÚtest_md4_digestSsz _Common_MD4_Test.test_md4_digestcCsP| ¡}|dƒ}| ¡}| d¡| | ¡d¡| d¡| | ¡d¡dS)z copy() methodrsdefZ 804e7f1c2586e50b49ac65db5b645131sghiZ c5225580bfe176f6deeee33dee98732cN)rÚcopyr%rr$)rrr!Zh2rrrÚ test_md4_copyZs  z_Common_MD4_Test.test_md4_copyN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r(rr"r'r-r/r1rrrrr s r cCs*zt d¡WdSty$YdS0dS)z1 check if hashlib natively supports md4. rTFN)ÚhashlibÚnewÚ ValueErrorrrrrÚhas_native_md4ks   r9zhashlib lacks ssl/md4 supportcs eZdZdZ‡fdd„Z‡ZS)r zhashlib.new('md4')cs$tt|ƒ ¡| | ¡jd¡dS)Nr6)Úsuperr ÚsetUprrr3r©Ú __class__rrr;~szMD4_SSL_Test.setUp©r2r3r4ZdescriptionPrefixr;Ú __classcell__rrr<rr wsr cs eZdZdZ‡fdd„Z‡ZS)r zpasslib.crypto._md4.md4()cs^tt|ƒ ¡tƒrHtj‰‡fdd„}| td|¡t ¡|  tj¡|  |  ¡j d¡dS)Ncs |dkrtdƒ‚ˆ|g|¢RŽS)Nrzmd4 disabled for testing)r8)rÚargs©ZorigrrÚwrapper�sz'MD4_Builtin_Test.setUp..wrapperr7zpasslib.crypto._md4) r:r r;r9r6r7Z patchAttrrÚ clear_cacheZ addCleanuprrr3)rrBr<rArr;ˆs  zMD4_Builtin_Test.setUpr>rrr<rr …sr )r5Z __future__rrZbinasciirr6Zpasslib.utils.compatrrrZpasslib.crypto.digestrZpasslib.tests.utilsr r Ú__all__r r9r r rrrrÚs  S