a fŸWcþOã@s¬dZddlmZmZddlmZddlZddlZddlm Z ddl m Z m Z m Z ddlmZmZmZmZGdd „d eƒZGd d „d eƒZdd lmZmZGd d„deƒZdS)z(tests for passlib.utils.(des|pbkdf2|md4)é)Úwith_statementÚdivision)ÚhexlifyN)ÚUnknownHashError)ÚPY3ÚuÚJYTHON)ÚTestCaseÚ TEST_MODEÚ skipUnlessÚhbc@sTeZdZdZdZddgZgd¢Zdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dS)Ú HashInfoTestztest various crypto functionszpasslib.crypto.digestÚhashlibZiana))Úmd5rzSCRAM-MD5-PLUSzMD-5)Úsha1zsha-1z SCRAM-SHA-1ZSHA1)Úsha256úsha-256ZSHA_256zsha2-256)Z ripemd160z ripemd-160zSCRAM-RIPEMD-160Z RIPEmd160Zripemdz SCRAM-RIPEMD)Zsha4_256zsha4-256zSHA4-256z SHA-4-256)Ztest128ztest-128ZTEST128)Útest2rzTEST-2)Z test3_128z test3-128z TEST-3-128c CsÞddlm}ddlm}m}t ¡}| ¡| |j ¡t  dd¡t  dd¡|  |t dƒƒd¡|  |d ƒd¡|  t|d ¡|||jƒD]J}t|jƒD]:\}}||}|D]$} || |ƒ} |  | |d | |f¡q°qœqŽd S) znorm_hash_name()r)Úchain)Únorm_hash_nameÚ_known_hash_namesÚignorez.*unknown hashz.*unsupported hashZMD4Úmd4sMD4Nzname=%r, format=%r:)Ú itertoolsrÚpasslib.crypto.digestrrÚwarningsÚcatch_warningsÚ __enter__Ú addCleanupÚ__exit__ÚfilterwarningsÚ assertEqualrÚ assertRaisesÚ TypeErrorÚnorm_hash_samplesÚ enumerateÚnorm_hash_formats) ÚselfrrrÚctxÚrowÚidxÚformatÚcorrectÚvalueÚresult©r/úD/usr/lib/python3.9/site-packages/passlib/tests/test_crypto_digest.pyÚtest_norm_hash_name.s(     ÿÿz HashInfoTest.test_norm_hash_namecCs`ddlm}| t|d¡| t|d¡| t|d¡| |dƒtjddf¡zt d ¡d }Wntyvd }Yn0|r¸|d ƒ}|d}| ||d df¡| t|d ƒ  ¡ƒd¡n| t|d ¡zt d¡d }Wntyîd }Yn0|dƒ}|d}|�sddl m }|  ||¡| ||ddf¡| t|d ƒ  ¡ƒd¡|  |dƒ|dƒ¡dS)zlookup_hash() -- constructorr©Ú lookup_hashÚnewÚ__name__Zsha4réé@ZshaTFésabcs(0164b8a914cd2a5e74c4f7ff082c4d97f1edf880r)rs a448017aaf21d8525fc10ae87aa6729dN) rr3r"Ú ValueErrorr!rrr4rÚdigestZpasslib.crypto._md4rÚassertIs)r'r3Zhas_shaÚrecordÚconstZhas_md4rr/r/r0Útest_lookup_hash_ctorIsB    ÿ     ÿz"HashInfoTest.test_lookup_hash_ctorcCsˆddlm}| t|d¡|ddd�}| |j¡| td|j¡| |j d¡| |j d¡| |j d¡|ddd�}|  ||¡dS)z"lookup_hash() -- unknown hash namerr2Zxxx256F©Úrequiredzunknown hash: 'xxx256'N) rr3r"rZ assertFalseÚ supportedÚassertRaisesRegexr=r!ÚnameÚ digest_sizeÚ block_sizer;)r'r3ÚinfoZinfo2r/r/r0Útest_lookup_hash_w_unknown_namews    z,HashInfoTest.test_lookup_hash_w_unknown_namecCs˜ddlm}m}|ddd�js(| d¡‚|ƒ| |d¡d}| t||d¡|ddd�}| |j |¡| t||j ¡|  |j d¡|  |j d ¡d S) z< lookup_hash() -- test set_mock_fips_mode() r)r3Ú_set_mock_fips_moderFr?zmd5 not supportedz'md5' hash disabled for fipsr6r7N)rr3rHrAZskipTestrrBrZ assertRegexZ error_textr=r!rDrE)r'r3rHÚpatrFr/r/r0Útest_mock_fips_modeŠs   z HashInfoTest.test_mock_fips_modecCs ddlm}|dƒ}| |jd¡| |jd¡| |jd¡| |jd¡| |dƒ|¡|dƒ}| |jd¡| |jd¡| |jd¡| |jd ¡d S) zlookup_hash() -- metadatarr2rrr7é zSHA2-256rr6N)rr3r!rCZ iana_namerErDr;©r'r3rFr/r/r0Útest_lookup_hash_metadata£s z&HashInfoTest.test_lookup_hash_metadatacCsHddlm}|dƒ}| ||ƒ|¡| ||jƒ|¡| t|d¡dS)z lookup_hash() -- alternate typesrr2ré{N)rr3r;r=r"r#rLr/r/r0Útest_lookup_hash_alt_types·s  z'HashInfoTest.test_lookup_hash_alt_typesN) r5Ú __module__Ú __qualname__Ú__doc__ÚdescriptionPrefixr&r$r1r>rGrJrMrOr/r/r/r0r s.r c @s¸eZdZdZdZdedƒdddedƒfd dd dd d ed ƒfdd ddd edƒfdd ddd edƒfdd ddd edƒfdd dddedƒfgZes¤e dd dddedƒf¡dd„Z dd„Z dS)Ú Pbkdf1_Testztest kdf helperszpasslib.crypto.digest.pbkdf1ópasswordZ78578E5A5D63CB06éèr6rZ dc19847e05c64d2faf10ebfb4a3d2a20)rUósaltrVrrórWérZ84éZ8475c6a8531a5d27Z 8475c6a8531a5d27e386cd496457812cNZ(4a8fd48e426ed081b535be5769892fa396293efbrZ f7f2e91100a8f96190f2dd177cb26453c CsDddlm}|jD],\}}}}}}||||||ƒ}| ||¡qdS)útest reference vectorsr©Úpbkdf1N)rr]Ú pbkdf1_testsr!) r'r]ÚsecretÚsaltÚroundsÚkeylenr:r,r.r/r/r0Ú test_knownâs zPbkdf1_Test.test_knowncs¦ddlm‰d‡fdd„ }|ƒ|jt|dd �|jt|dd �|jt|d d �|jt|dd �|jt|dd �|jt|dd�|jt|ddd�|jt|dd�dS)útest border casesrr\ósecretrWrYrcsˆ|||||ƒS©Nr/)r_r`rarbÚhashr\r/r0Úhelperìsz'Pbkdf1_Test.test_border..helper©r_©r`Úmissing)rg©raÚ1éÿÿÿÿ©rbé)rbrgN)rerWrYrYr)rr]r"r#r9©r'rhr/r\r0Ú test_borderés zPbkdf1_Test.test_border) r5rPrQrRrSr r^rÚappendrcrrr/r/r/r0rTÇs ðÿrT)Ú pbkdf2_hmacÚPBKDF2_BACKENDSc$@s\eZdZdZdd e¡Zedƒddddfed ƒddd dfed ƒddd d fed ƒdddd fedƒdddd fedƒdddd fedƒdddd fedƒddddfedƒddd dfedƒddddfedƒdd dd!fed"ƒd#d$ddfed%ƒd&ed'ƒd(d)d*fed+ƒd,ddd)d-fed.ƒd/d0d1d)d-fed2ƒdddd d-fed3ƒddd d d-fed4ƒdddd d-fed5ƒdd dd6d-fed7ƒd8dd9d d-fed:ƒdd8d9d d-fed;ƒd#d$ddd-fed<ƒdddd d*fed=ƒddd d d*fed>ƒdddd d*fed?ƒdd dd@d*fedƒdddddAfedBƒdCddDddAfedEƒdCddDdFdAfedGƒdCddHd6dIfedJƒdCddHd6dKfgZdLdM„Z dNdO„Z dPdQ„Z dRdS„Z dFS)TÚ Pbkdf2Testztest pbkdf2() supportz2passlib.crypto.digest.pbkdf2_hmac() z, Z cdedb5281bb2f801565a1122b2563515rUsATHENA.MIT.EDUraeburnrYr6Z 01dbee7f4a9e243e988b62c73cda935déZ@01dbee7f4a9e243e988b62c73cda935da05378b93244ec8f48a99e61ad799d86rKZ@5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddbc5e5142f708a31e2e62b1e13i°Z@d1daa78615f287e6a1c8b120d7062a493f98d203e6be49a6adf4fa574b6e64ees4VxxV4éZ@139c30c0966bc32ba55fdbf212530ac9c5ec59f1a452f5cc9ad940fea0598ed1s@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXspass phrase equals block sizeZ@9ccad6d468770cd51b10e6a68721be611a8b4d282601db3b36be9246915ec82asAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXspass phrase exceeds block sizeZ(0c60c80f961f0e71f3a9b524af6012062fe037a6rWr8Z(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1iZ23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038spasswordPASSWORDpasswords$saltSALTsaltSALTsaltSALTsaltSALTsaltéZ 56fa6aa75548099dcc37d7f03425e0c3s passwordssaltZ€887CFF169EA8335235D8004242AA7D6187A41E3187DF0CE14E256D85ED97A97357AAA8FF0A3871AB9EEFF458392F462F495487387F685B7472FC6C29E293F0A0shelloZ€9290F727ED06C38BA4549EF7DE25CF5642659211B7FC076F2D28FEFD71784BB8D8F6FB244A8CC5C06240631B97008565A120764C0EE9C2CB0073994D79080136i'r7Zsha512Z€55ac046e56e3089fec1691c22544b605f94185216dde0465e68b9d57c20dacbc49ca9cccf179b645991664b39d77ef317c71b845b1e30bd509112041d3a19783spasswdrZ€4ddcd8f60b98be21830cee5ef22701f9641a4418d04c0414aeff08876b34ab56a1d425a1225833549adb841b51c9b3176a272bdebba1d078478f62b397f33c8dsPasswordsNaCli€8Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9é(Z@9e83f279c040f2a11aa4a02b24c418f2d3cb39560c9627fa4f47e3bcc2897c3drXiZ@ea5808411eb0c7e830deab55096cee582761e22a9bc034e3ece925225b07bf46Z 89b69d0516f829893c696226650a8687Z@867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252Z@e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cZ@d197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5Z�6e23f27638084b0f7ea1734e0d9841f55dd29ea60a834466f3396bac801fac1eeb63802f03a0b4acd7603e3699c8b74437be83ff01ad7f55dac1ef60f4d56480c35ee68fd52c6936éHrZ e248fb6b13365146f8ac6307cc222812reé Z(e248fb6b13365146f8ac6307cc2228127872da6dNZPb1d5485772e6f76d5ebdc11b38d3eff0a5b2bd50dc11f937e86ecacd0cd40d1b9113e0734e3b76a3é>rZPea014cc01f78d3883cac364bb5d054e2be238fb0b6081795a9d84512126e3129062104d2183464c4rc CsZ|jD]N}|dd…\}}}}}t|ƒdkr4|dnd}t|||||ƒ}| ||¡qdS)r[Nrxér)Úpbkdf2_test_vectorsÚlenrtr!) r'r)r,r_r`rarbr:r.r/r/r0rc×s  zPbkdf2Test.test_knowncCs´ddlm}zddl}d}Wnty2d}Yn0| d|v|¡zddlm}|jdk}Wntytd}Yn0| d |v|¡dd lm }|r¤|  d |¡n |  d |¡dS) z$verify expected backends are presentr)ruNTFÚ fastpbkdf2©rtrz hashlib-ssl)rzbuiltin-from-byteszbuiltin-unpack) rrur�Ú ImportErrorr!rrtrPÚpasslib.utils.compatrZassertIn)r'rur�Zhas_fastpbkdf2rtZhas_hashlib_sslrr/r/r0Ú test_backendsßs"       zPbkdf2Test.test_backendscCsÎddd„}|ƒ|jt|dd �|jt|d d �|jt|d d �|dd �|jt|dd �|jt|d d �|jt|d d �|jt|d d �|jt|dd�|jt|dd�|jt|dd�|jt|dd�dS)rdrUrWrYNrcSst|||||ƒSrfr‚©r_r`rarbr:r/r/r0rhýsz&Pbkdf2Test.test_border..helperrnrlrÚxrolíÿOrxrjriZfoo©r:)rUrWrYNr)r"r9r#Ú OverflowErrorrqr/r/r0rrûs  zPbkdf2Test.test_bordercCs:d dd„}| t|dd�ƒd ¡| t|d d�ƒd ¡dS) ztest keylen==NonerUrWrYNrcSst|||||ƒSrfr‚r†r/r/r0rhsz.Pbkdf2Test.test_default_keylen..helperrˆr8rrK)rUrWrYNr)r!r€rqr/r/r0Útest_default_keylens zPbkdf2Test.test_default_keylen) r5rPrQrRÚjoinrurSr rrcr…rrrŠr/r/r/r0rvsØ þþþþþþþ þþþ üþ ø ý ý þ þ þü þ þ þ þ þ þû  þ  þ þ ý ý€¼Lrv)rRZ __future__rrZbinasciirrrZ passlib.excrr„rrrZpasslib.tests.utilsr r r r r rTrrtrurvr/r/r/r0Ús  4>