a 5dg@sddlZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m Z ddlmZmZmZddlmZeedZhdZedZedureZnd d ed d DZed dgdZeekred dgdZndZzddlmZm Z m!Z!Wn"e"y4dZdZ e#Z!Yn0z ddl$Z$Wne"yZdZ$Yn0e %e$dZ&z ddl'Z'Wne"ydZ'Yn0e %e'dZ(ddZ)dZ*ddZ+Gddde j,Z-Gddde j,Z.e/dkre 0dS)N) unhexlify)support)_4G bigmemtestimport_fresh_module) HTTPExceptionZgettotalrefcount>Zsha3Zblake2sha1sha256sha512md5ZPY_BUILTIN_HASHLIB_HASHEScCsh|] }|qS)strip).0mr r -/usr/local/lib/python3.9/test/test_hashlib.py "sr",hashlib_hashlib)Zfresh)Zblocked)HASHHASHXOFopenssl_md_meth_nameszrequires _blake2zrequires _sha3cCsLt|tsJt|d}d}|D]$}|||d?d@||d@7}q"|S)NZ0123456789abcdef) isinstancebytesrepr)shrir r rhexstrEs "r#z(http://www.pythontest.net/hashlib/{}.txtc cst|}zt|}Wn&ttfy>td|Yn0|T|D]>}|}| dsJ|sfqJ| d}t |d|d<|VqJWdn1s0YdS)NzCould not retrieve {}#rr) URLformatrZopen_urlresourceOSErrorrunittestZSkipTestr startswithsplitrfromhex) hash_nameurlZtestdatalinepartsr r r read_vectorsPs  r0cseZdZdZddhZejdkp eZddZ fddZ e d d Z e d d Z d dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zdd&d'Zd(d)Zd*d+Zed,d-Zed.d/Z dd2d3Z!d4d5Z"ed6d7Z#d8d9Z$ed:d;Z%edd?Z'd@dAZ(dBdCZ)e*+e,j-e.dDkdEe/e.dDdFd%dGdHdIZ0e*+e,j-e.dFkdEe/e.dFdFd%dGdJdKZ1dLdMZ2dNdOZ3dPdQZ4dRdSZ5dTdUZ6dVdWZ7dXdYZ8dZd[Z9d\d]Z:d^d_Z;d`daZdfdgZ?dhdiZ@djdkZAdldmZBdndoZCdpdqZDdrdsZEdtduZFdvdwZGedxdyZHedzd{ZIed|d}ZJed~dZKeddZLeddZMeddZNeddZOeddZPeddZQeddZReddZSeddZTeddZUeddZVeddZWeddZXeddZYeddZZeddZ[eddZ\eddZ]ddZ^e_j`ddZaddZbe*cedd1udddZeZfS)HashLibTestCase)r MD5rZSHA1sha224ZSHA224r SHA256sha384ZSHA384r ZSHA512blake2bblake2ssha3_224sha3_256sha3_384sha3_512 shake_128 shake_256r<r=posixc CsRz t|WStyL}z(|jr8|tvr8td|WYd}~n d}~00dS)z@Import a module and return a reference to it or None on failure.z%Did a C extension fail to compile? %sN) importlib import_moduleModuleNotFoundError_warn_on_extension_importbuiltin_hasheswarningswarn)self module_nameerrorr r r_conditional_import_modulems  $z*HashLibTestCase._conditional_import_modulec st}jD]}||q d}|r<|ddhi_|D]}tj|<qFjD]0\}}|tt |d|fdd}||qbd}|_ |r t |d t |djD]F\}}t|d |d} | rz | Wnt yYq0|| qԇfd d } d } | r@| d d} | rX| dd} | rx| d| dd}|r| d| d|r| d| dd}|r| d| d| d| d| d| dttj|i|dS)N_blake2r6r7c[s.|durtj|fi|Stj||fi|SN)rnew)dataZ_algkwargsr r r_test_algorithm_via_hashlib_newszAHashLibTestCase.__init__.._test_algorithm_via_hashlib_newr openssl_md5Z openssl_sha1Zopenssl_cs"ttd|}j||dS)N__get_builtin_constructor)getattrrconstructors_to_testadd)name constructorrFr radd_builtin_constructorsz9HashLibTestCase.__init__..add_builtin_constructor_md5r _sha1r_sha256r3r _sha512r5r _sha3r8r9r:r;r<r=)setsupported_hash_namesrTlowerrIupdaterSitemsrRrr assertTruehasattr ValueErrorsuperr1__init__)rFargsrNZ algorithms algorithmrJ constructorsrOrrVrXrYrZr[r\r] __class__rWrrgvsj            zHashLibTestCase.__init__cCs|j}tj|SrK)rSvalues itertoolschain from_iterable)rFrjr r rhash_constructorss z!HashLibTestCase.hash_constructorscCst|jdr|jSdSdS)N get_fips_mode)rdrrrrWr r r is_fips_modes  zHashLibTestCase.is_fips_modecCsLtdtd}|jD]0}||dd}|j|jvr>|dq|qdS)Nb FZusedforsecurity)arrayrangerqrUshakes hexdigest)rFaconscr r rtest_hash_arrays     zHashLibTestCase.test_hash_arraycCs"|tjtdd|jDdS)Ncss|]}|r|VqdSrK)islower)rZ_algor r r sz=HashLibTestCase.test_algorithms_guaranteed..) assertEqualralgorithms_guaranteedr^r_rWr r rtest_algorithms_guaranteedsz*HashLibTestCase.test_algorithms_guaranteedcCs|ttjtjdSrK)rcr^rrissubsetalgorithms_availablerWr r rtest_algorithms_availablesz)HashLibTestCase.test_algorithms_availablecCstjddd|jr|d|jD]}|dd|dddq$tjdddtjdd|jdur|jjddd|jjdddS)Nr Trvzskip in FIPS moder )rrLrsskipTestrqr rrPrFr}r r rtest_usedforsecurity_trues     z)HashLibTestCase.test_usedforsecurity_truecCsvtjddd|jD]}|dd|dddqtjdddtjdd|jdurr|jjddd|jjdddS)Nr Frvrr )rrLrqr rrPrr r rtest_usedforsecurity_falses    z*HashLibTestCase.test_usedforsecurity_falsecCs$|ttjd|ttjddS)Nzspam spam spam spam spam) assertRaisesrerrL TypeErrorrWr r rtest_unknown_hashsz!HashLibTestCase.test_unknown_hashcCs|tdjddS)Nr4r )rrrLrUrWr r rtest_new_upper_to_lowersz'HashLibTestCase.test_new_upper_to_lowerc Csttd}ttd}|t|dz ddl}WntyJ|dYn0dtjd<| z0|t|dWdt vr|tjd<qtjd=n dt vr|tjd<ntjd=0|t |d|d}| ||j |t|d dgdS) NrQZ__builtin_constructor_cachetestrz_md5 module not availablerYr r2)rRrrrerY ImportErrorrsysmodulesclearlocalsrZassertIsr rsorted)rFZget_builtin_constructorZbuiltin_constructor_cacherYrVr r rtest_get_builtin_constructors2        z,HashLibTestCase.test_get_builtin_constructorcCs~|jD]r}|dd}|j|jvrP||dt|t|d|dq||t|t||qdS)NFrvrw) rqrUrzassertIsInstancedigestrrr#r{rFr}r r r rtest_hexdigests   zHashLibTestCase.test_hexdigestc Csd}|jD]}|dd}|j|jvr&q tdur:t|tr:q |j|jfD]R}|t|d|D]:}|tt f||Wdq\1s0Yq\qFq dS)N)i ll lll Frvi) rqrUrzrrrr{rre OverflowError)rFZ large_sizesr}r rlengthr r rtest_digest_length_overflow!s   z+HashLibTestCase.test_digest_length_overflowcCsr|jD]f}|dd}||jt|j|jvr@||j|jn||j|j||jtj |jddjqdS)NFrv) rqrrUstrr_assertIn assertNotInrrrLrr r rtest_name_attribute1s   z#HashLibTestCase.test_name_attributec Cs,d}d}d}d}|jD]}|dd}|||||||||j|jvr`d}nd}|dd}|||||||j||j||||||dd} ||j|| j|||||dd} | j|} | } | |||j|| j||| j|| qdS) Nsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbs~ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFrv)rwr )rqrarUrzrrcopy) rFZaasZbeesZceesZdeesr}Zm1rhZm2Zm3Zm4Z m4_digestZm4_copyr r rtest_large_update>s0          z!HashLibTestCase.test_large_updateFc Kst|d}|}|j|}|t|d|D]}||fi|} |sR| n| |} || |d||| t||f|s| n| |} t|} || | |s2|t| | j q2dS)NzrHash algorithm %s constructed using %s returned hexdigest %r for %d byte input data that should have hashed to %r.) lenr`rSZassertGreaterEqualr{rrrr+ digest_size) rFrUrMr{ZshakerNrrjhash_object_constructorrZcomputedrr r rcheck^s(     zHashLibTestCase.checkcCs&|j|}|D]}|t|dqdS)NZspam)rSrr)rFZalgorithm_namerjrr r rcheck_no_unicodess z HashLibTestCase.check_no_unicodecCs@|d|d|d|d|d|ddS)Nr rr3r r5r rrWr r rtest_no_unicodeys      zHashLibTestCase.test_no_unicodecCs|d|ddS)Nr6r7rrWr r rtest_no_unicode_blake2s z&HashLibTestCase.test_no_unicode_blake2cCs@|d|d|d|d|d|ddS)Nr8r9r:r;r<r=rrWr r rtest_no_unicode_sha3s      z$HashLibTestCase.test_no_unicode_sha3rNcCs|j|}|D]}|dd}||j|||j||rn|t||||t||d|n,|t|||t|d|||j||| ddt |qdS)NFrvr_r) rSr block_sizerrrr{rUrr*r)rFrUrrZ digest_lengthrjrrr r rcheck_blocksize_names   z$HashLibTestCase.check_blocksize_namecCsX|ddd|ddd|ddd|ddd |d d d |d d ddS)Nr @rwrr3r r50r rrWr r rtest_blocksize_names z#HashLibTestCase.test_blocksize_namecCs\|ddd|ddd|ddd |d d d |d ddd|dddd dS)Nr8rr9rr:hrr;Hrr<rr=rrWr r rtest_blocksize_name_sha3s z(HashLibTestCase.test_blocksize_name_sha3cCsl|j|}|D]X}|}tdur,t|tr,q|||d||j|||j|||j|qdS)Ni@)rSrrrZ_capacity_bitsZ _rate_bitsZ_suffix)rFrUZcapacityZratesuffixrjrrr r r check_sha3s zHashLibTestCase.check_sha3cCsd|dddd|dddd|dd d d|d d d d|dddd|dddddS)Nr8iir9i@r:ii@r;i@r<i@r=)rrWr r rtest_extra_sha3s zHashLibTestCase.test_extra_sha3cCs |ddd|ddddS)Nr6rrr7rrrWr r rtest_blocksize_name_blake2sz*HashLibTestCase.test_blocksize_name_blake2cCs|jddddddS)Nr rZ d41d8cd98f00b204e9800998ecf8427eFrvrrWr r rtest_case_md5_0szHashLibTestCase.test_case_md5_0cCs|jddddddS)Nr abcZ 900150983cd24fb0d6963f7d28e17f72FrvrrWr r rtest_case_md5_1szHashLibTestCase.test_case_md5_1cCs|jddddddS)Nr s>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFrvrrWr r rtest_case_md5_2s zHashLibTestCase.test_case_md5_2z!test cannot run on 32-bit systemsr)sizeZmemusedry_runcCs|dd|ddS)Nr AZ c9af2dff37468ce5dfee8f2cfc0a9c6drrFrr r rtest_case_md5_hugesz"HashLibTestCase.test_case_md5_hugecCs|dd|ddS)Nr rZ 28138d306ff1b8281f1a9067e1a1a2b3rrr r rtest_case_md5_uintmaxsz%HashLibTestCase.test_case_md5_uintmaxcCs|ddddS)NrrZ(da39a3ee5e6b4b0d3255bfef95601890afd80709rrWr r rtest_case_sha1_0sz HashLibTestCase.test_case_sha1_0cCs|ddddS)NrrZ(a9993e364706816aba3e25717850c26c9cd0d89drrWr r rtest_case_sha1_1sz HashLibTestCase.test_case_sha1_1cCs|ddddS)Nr8abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rrWr r rtest_case_sha1_2sz HashLibTestCase.test_case_sha1_2cCs|dddddS)Nra@BZ(34aa973cd4c4daa4f61eeb2bdbad27316534016frrWr r rtest_case_sha1_3s z HashLibTestCase.test_case_sha1_3cCs|ddddS)Nr3rZ8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frrWr r rtest_case_sha224_0sz"HashLibTestCase.test_case_sha224_0cCs|ddddS)Nr3rZ823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rrWr r rtest_case_sha224_1 sz"HashLibTestCase.test_case_sha224_1cCs|ddddS)Nr3rZ875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rrWr r rtest_case_sha224_2 sz"HashLibTestCase.test_case_sha224_2cCs|dddddS)Nr3rrZ820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rrWr r rtest_case_sha224_3s z"HashLibTestCase.test_case_sha224_3cCs|ddddS)Nr rZ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rrWr r rtest_case_sha256_0sz"HashLibTestCase.test_case_sha256_0cCs|ddddS)Nr rZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrrWr r rtest_case_sha256_1sz"HashLibTestCase.test_case_sha256_1cCs|ddddS)Nr rZ@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rrWr r rtest_case_sha256_2sz"HashLibTestCase.test_case_sha256_2cCs|dddddS)Nr rrZ@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rrWr r rtest_case_sha256_3$s z"HashLibTestCase.test_case_sha256_3cCs|ddddS)Nr5rZ`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brrWr r rtest_case_sha384_0)sz"HashLibTestCase.test_case_sha384_0cCs|ddddS)Nr5rZ`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rrWr r rtest_case_sha384_1.sz"HashLibTestCase.test_case_sha384_1cCs|ddddS)Nr5pabcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rrWr r rtest_case_sha384_23sz"HashLibTestCase.test_case_sha384_2cCs|dddddS)Nr5rrZ`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rrWr r rtest_case_sha384_3:s z"HashLibTestCase.test_case_sha384_3cCs|ddddS)Nr rZcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3errWr r rtest_case_sha512_0@sz"HashLibTestCase.test_case_sha512_0cCs|ddddS)Nr rZddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frrWr r rtest_case_sha512_1Esz"HashLibTestCase.test_case_sha512_1cCs|ddddS)Nr rZ8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rrWr r rtest_case_sha512_2Jsz"HashLibTestCase.test_case_sha512_2cCs|dddddS)Nr rrZe718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brrWr r rtest_case_sha512_3Qs z"HashLibTestCase.test_case_sha512_3c Cs"||j|t|dD]}|d|dqd|d}|jt||d||j|t|dD]}|d|dqdd|d} |jt|| d||j|td|dD]}||dq|jt|dd|jt|dd|jt||dd||j|t|dD]}|d|dqd|d} |jt|| d|||d dtdd D]}||d qf|jt|dd |jt|d d tdd D]}||d q|jt|dd |jt|dd |jt|d d tdd D]}||d q|jt|dd |jt|d d td|dD]}||dq.|jt|dd|jt||dd|dd|dd|jt|dd|jt |dd|dd||d|jt|dd|jt ||dd|jt |d d|jt |d d|t |d|d d d d dddd ddddd dS)Nrrsalt)personrrkeyrr)fanout)depth) node_depth) inner_size) leaf_sizel) node_offset)rM)stringrrT) rrrrrrrrrr last_node) rZ SALT_SIZEryrreZ PERSON_SIZEZMAX_DIGEST_SIZEZ MAX_KEY_SIZEr{rr) rFrVZ salt_sizeZ person_sizeZkey_sizerZ max_offsetr"rrrr r r check_blake2Vs          zHashLibTestCase.check_blake2c Csxdd}|dd}|D]X}|D]N}|||}|||} |||d} || ||| |d} || qq|S)NcSsTd}d||@}d}t|}t|D]*}|||@}||}}|d?d@||<q$|S)NrlKZ=r) bytearrayry)rseedmaskr|rtoutr"tr r r selftest_seqs    z4HashLibTestCase.blake2_rfc7693..selftest_seqrr)rr)rarr{) rFrVZmd_lenZin_lenr ZouterZoutlenZinlenZindatarZunkeyedZkeyedr r rblake2_rfc7693s    zHashLibTestCase.blake2_rfc7693cCsB|tjdddddgd}gd}||tj||ddS)Nrwrl)rrrr)rrrrrZ@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)rrr6rr )rFZ b2b_md_lenZ b2b_in_lenr r r test_blake2bszHashLibTestCase.test_blake2bcCs|ddddS)Nr6rZ786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerrWr r rtest_case_blake2b_0sz#HashLibTestCase.test_case_blake2b_0cCs|ddddS)Nr6rZba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rrWr r rtest_case_blake2b_1sz#HashLibTestCase.test_case_blake2b_1cCs*|jddddddddd d d d d dddS)Nr6fooZ 920568b0c5873b2f0ab67bedb6cf1b2brwbarbazbingrrrrrT rrrrrrrrrrrrrWr r r test_case_blake2b_all_parameterssz0HashLibTestCase.test_case_blake2b_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr6rr0rr+rrFmsgrmdr r rtest_blake2b_vectorss z$HashLibTestCase.test_blake2b_vectorscCsB|tjdddddgd}gd}||tj||ddS)Nrl)rwrrr)rrrArrZ@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)rrr7rr )rFZ b2s_md_lenZ b2s_in_lenr r r test_blake2sszHashLibTestCase.test_blake2scCs|ddddS)Nr7rZ@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rrWr r rtest_case_blake2s_0sz#HashLibTestCase.test_case_blake2s_0cCs|ddddS)Nr7rZ@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rrWr r rtest_case_blake2s_1sz#HashLibTestCase.test_case_blake2s_1cCs*|jddddddddd d d d d dddS)Nr7rZ bf2a8f7fe3c555012a6f8046e646bc75rwrrrrrrrrrTrrrWr r r test_case_blake2s_all_parameterssz0HashLibTestCase.test_case_blake2s_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr7rrrr r rtest_blake2s_vectors s z$HashLibTestCase.test_blake2s_vectorscCs|ddddS)Nr8rZ86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rrWr r rtest_case_sha3_224_0sz$HashLibTestCase.test_case_sha3_224_0cCs$tdD]\}}|d||qdS)Nr8r0rrFrrr r rtest_case_sha3_224_vectorsz)HashLibTestCase.test_case_sha3_224_vectorcCs|ddddS)Nr9rZ@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arrWr r rtest_case_sha3_256_0sz$HashLibTestCase.test_case_sha3_256_0cCs$tdD]\}}|d||qdS)Nr9r$r%r r rtest_case_sha3_256_vector"sz)HashLibTestCase.test_case_sha3_256_vectorcCs|ddddS)Nr:rZ`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rrWr r rtest_case_sha3_384_0'sz$HashLibTestCase.test_case_sha3_384_0cCs$tdD]\}}|d||qdS)Nr:r$r%r r rtest_case_sha3_384_vector-sz)HashLibTestCase.test_case_sha3_384_vectorcCs|ddddS)Nr;rZa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rrWr r rtest_case_sha3_512_02sz$HashLibTestCase.test_case_sha3_512_0cCs$tdD]\}}|d||qdS)Nr;r$r%r r rtest_case_sha3_512_vector8sz)HashLibTestCase.test_case_sha3_512_vectorcCs$|dddd|dddddS)Nr<rZ@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crrWr r rtest_case_shake_128_0=s z%HashLibTestCase.test_case_shake_128_0cCs&tdD]\}}|d||dqdS)Nr<Tr$r%r r rtest_case_shake128_vectorDsz)HashLibTestCase.test_case_shake128_vectorcCs$|dddd|dddddS)Nr=rZ@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rrWr r rtest_case_shake_256_0Is z%HashLibTestCase.test_case_shake_256_0cCs&tdD]\}}|d||dqdS)Nr=Tr$r%r r rtest_case_shake256_vectorPsz)HashLibTestCase.test_case_shake256_vectorcCsd}|jD]J}|dd}|d|d||d|d|dd}|dq t}|d|d||d||dtdd|d}||ddS)NiFrv1#xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rqrarr rr{)rFZ gil_minsizer}rr r rtest_gilUs*       zHashLibTestCase.test_gilc std}d}|dt|}fdd}g}t|D]N}td|}||d||t|dtj||fd}| |qD|D] }| q|D] }| q||dS) Nrsswineflui@ cs4d}|tkr0|||||7}qdS)Nr)rra) chunk_sizeindexrMZhasherr rhash_in_chunkss z=HashLibTestCase.test_threaded_hashing..hash_in_chunksrur)targetrh) rrr{ryrZ assertGreaterr threadingThreadappendstartjoin) rFZ num_threadsZ smallest_dataZ expected_hashr8threadsZ threadnumr5threadr r7rtest_threaded_hashingrs(     z%HashLibTestCase.test_threaded_hashingcCs|j}|dur||tdSrK)rsrint)rFZ fips_moder r rtest_get_fips_modesz"HashLibTestCase.test_get_fips_modez need _hashlibcCsh|tdtWdn1s(0Y|tdtWdn1sZ0YdS)Nzcannot create 'HASH' instancez cannot create 'HASHXOF' instance)assertRaisesRegexrrrrWr r rtest_internal_typess$z#HashLibTestCase.test_internal_types)F)rrN)g__name__ __module__ __qualname__r_rzosrUCOMPILED_WITH_PYDEBUGrBrIrgpropertyrqrsrrrrrrrrrrrrrrrrequires_blake2r requires_sha3rrrrrrrrrrr(skipIfrmaxsizerrrrrrrrrrrrrrrrrrrrrrrrrr r rrrrrrr r!r"r#r&r'r(r)r*r+r,r-r.r/r0r4rZ reap_threadsrArC skipUnlessrrE __classcell__r r rkrr1`s J                  O                       #r1c @sjeZdZgdZdddddedfdddd ded fd d d d dedfgZeddfeddfeddfeddfeddfgeddfeddfeddfeddfeddfgeddfeddfeddfedd fed!dfgd"Zd#d$Z e e dud%d&d'Z e eed(d)d*d+Ze eed,d-d.d/Zd0d1ZdS)2KDFTests))passwordsaltrN)rSrTrN)rSrTN)spasswordPASSWORDpasswords$saltSALTsaltSALTsaltSALTsaltSALTsaltrUr)s passwordssaltrUrwrrwrZ77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906rSsNaClrrZfdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640s pleaseletmeinsSodiumChloridei@Z7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887Z(0c60c80f961f0e71f3a9b524af6012062fe037a6NZ(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038Z 56fa6aa75548099dcc37d7f03425e0c3Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(Z 89b69d0516f829893c696226650a8687Z867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fceZe1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4eZd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5Z8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8rZ 9d9e9c4cd21fe4be24d5b8244c759665)rr r c Cs|jD]\}}||vrq t|jD]\}}|\}}} } ||\} } | rN| } ||||| | } || | |||| | f||t|t|| | } || | ||t|t|| | } || | | dur&||||| } || | |||| fq&q |td|ddddWdn1s 0Yd|vr| t |dddd| t |ddd d| t|dddd | t|dddd | t|ddddd | t|ddddd |dd dddd } || |jdd d dS)Nzunsupported hash typeunknownspassrTrrssha1passrrrrS)r,passwordrZ iterationsdklen) pbkdf2_resultsrb enumeratepbkdf2_test_vectorsr memoryviewrrDrerr)rFZpbkdf2Z supportedZ digest_nameresultsr"ZvectorrZrroundsr[expectedZoverwrite_dklenrr r r_test_pbkdf2_hmacsd          .     zKDFTests._test_pbkdf2_hmacztest requires builtin_hashlibcCs|tjtdSrK)rcbuiltin_hashlib pbkdf2_hmacrCrWr r rtest_pbkdf2_hmac_pyszKDFTests.test_pbkdf2_hmac_pyrez test requires OpenSSL > 1.0cCs|tjtdSrK)rcopenssl_hashlibrerrWr r rtest_pbkdf2_hmac_cszKDFTests.test_pbkdf2_hmac_cscryptz test requires OpenSSL > 1.1c Cs|jD]0\}}}}}}tj|||||d}|||qtjdddddd|t$tjddddddWdn1s0Y|t$tjddddddWdn1s0Y|ttdWdn1s0Y|ttddWdn1s*0Y|t$tjdddddd Wdn1sj0Yd D]L}|tttf$tjdd|dddWdn1s0Yqxd D]L}|tttf$tjddd|ddWdn1s 0Yqd D]L}|tttf$tjdddd|dWdn1s\0Yqd D]N}|tttf&tjddddd|d Wdn1s0Yqnd D]N} |tttf&tjddddd| dWdn1s0YqdS)N)rnr!prSrTrrrrZrr)rrrN)rrN)rN)rrjr!rkmaxmem)rrjr!rkr[)scrypt_test_vectorsrrirrrrer) rFrZrrjr!rkrbresultrlr[r r r test_scryptsB 2 2 ( , 4888*zKDFTests.test_scryptcCs |dtj|dtjdS)NZ blake2b512zsha3-512)rrrrWr r rtest_normalized_nameBszKDFTests.test_normalized_name)rFrGrHr^rrmrr+r\rcr(rNrdrfrPrdrgrhrrorpr r r rrRsl         &1     %rR__main__)1rxZbinasciirrr?rnrIrZ sysconfigr:r(rDrrZ test.supportrrrZ http.clientrrdrJZdefault_builtin_hashesZget_config_varrCr r`r*rgrdrrrrr frozensetrJrPrLr]rMr#r%r0ZTestCaser1rRrFmainr r r r sn             N