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>md5sha1sha256Zsha3Zblake2sha512ZPY_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 _sha3cCs6d}d}|D]$}|||d?d@||d@7}q |S)NZ0123456789abcdefr )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 startswithsplitbytesfromhex) hash_nameurlZtestdatalinepartsr r r read_vectorsPs  r.cseZdZdZddhZejdkp 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)rMD5r ZSHA1sha224ZSHA224r SHA256sha384ZSHA384r ZSHA512blake2bblake2ssha3_224sha3_256sha3_384sha3_512 shake_128 shake_256r:r;posixc CsRz t|WStyL}z(|jr8|tvr8td|WYd}~n d}~00dS)Nz%Did a C extension fail to compile? %s) 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_blake2r4r5c[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 constructorrDr radd_builtin_constructorsz9HashLibTestCase.__init__..add_builtin_constructor_md5r_sha1r _sha256r1r _sha512r3r _sha3r6r7r8r9r:r;)setsupported_hash_namesrRlowerrGupdaterQitemsrPrr assertTruehasattr ValueErrorsuperr/__init__)rDargsrLZ algorithms algorithmrH constructorsrMrrTrVrWrXrYrZr[ __class__rUrrevsj            zHashLibTestCase.__init__cCs|j}tj|SrI)rQvalues itertoolschain from_iterable)rDrhr r rhash_constructorss z!HashLibTestCase.hash_constructorscCst|jdr|jSdSdS)N get_fips_mode)rbrrprUr r r is_fips_modes  zHashLibTestCase.is_fips_modecCsLtdtd}|jD]0}||dd}|j|jvr>|dq|qdS)Nb FZusedforsecurity)arrayrangerorSshakes hexdigest)rDaconscr r rtest_hash_arrays     zHashLibTestCase.test_hash_arraycCs"|tjtdd|jDdS)Ncss|]}|r|VqdSrI)islower)rZ_algor r r sz=HashLibTestCase.test_algorithms_guaranteed..) assertEqualralgorithms_guaranteedr\r]rUr r rtest_algorithms_guaranteedsz*HashLibTestCase.test_algorithms_guaranteedcCs|ttjtjdSrI)rar\rrissubsetalgorithms_availablerUr r rtest_algorithms_availablesz)HashLibTestCase.test_algorithms_availablecCstjddd|jr|d|jD]}|dd|dddq$tjdddtjdd|jdur|jjddd|jjdddS)Nr Trtzskip in FIPS moder)rrJrqskipTestrorrrNrDr{r r rtest_usedforsecurity_trues     z)HashLibTestCase.test_usedforsecurity_truecCsvtjddd|jD]}|dd|dddqtjdddtjdd|jdurr|jjddd|jjdddS)Nr Frtrr)rrJrorrrNrr r rtest_usedforsecurity_falses    z*HashLibTestCase.test_usedforsecurity_falsecCs$|ttjd|ttjddS)Nzspam spam spam spam spam) assertRaisesrcrrJ TypeErrorrUr r rtest_unknown_hashsz!HashLibTestCase.test_unknown_hashcCs|tdjddS)Nr2r )rrrJrSrUr 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) NrOZ__builtin_constructor_cachetestrz_md5 module not availablerWrr0)rPrrrcrW ImportErrorrsysmodulesclearlocalsrZassertIsrrsorted)rDZget_builtin_constructorZbuiltin_constructor_cacherWrTr r rtest_get_builtin_constructors2        z,HashLibTestCase.test_get_builtin_constructorcCs~|jD]r}|dd}|j|jvrP||dt|t|d|dq||t|t||qdS)NFrtru) rorSrxassertIsInstancedigestr(rr ryrDr{rr 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 Frti) rorSrxr isinstancerryrrc OverflowError)rDZ large_sizesr{rrlengthr r rtest_digest_length_overflow!s   z+HashLibTestCase.test_digest_length_overflowcCsr|jD]f}|dd}||jt|j|jvr@||j|jn||j|j||jtj |jddjqdS)NFrt) rorrSstrr]assertIn assertNotInrrrJrr 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~ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccsddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFrt)rur )ror_rSrxrrcopy) rDZaasZbeesZceesZdeesr{Zm1rfZm2Zm3Zm4Z 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^rQZassertGreaterEqualryrrr(r) digest_size) rDrSrKryZshakerLrrhhash_object_constructorrZcomputedrr r rcheck^s(     zHashLibTestCase.checkcCs&|j|}|D]}|t|dqdS)NZspam)rQrr)rDZalgorithm_namerhrr r rcheck_no_unicodess z HashLibTestCase.check_no_unicodecCs@|d|d|d|d|d|ddS)Nrr r1r r3r rrUr r rtest_no_unicodeys      zHashLibTestCase.test_no_unicodecCs|d|ddS)Nr4r5rrUr r rtest_no_unicode_blake2s z&HashLibTestCase.test_no_unicode_blake2cCs@|d|d|d|d|d|ddS)Nr6r7r8r9r:r;rrUr 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)NFrtr_r) rQr block_sizerrrryrSrr'repr)rDrSrrZ digest_lengthrhrrr r rcheck_blocksize_names   z$HashLibTestCase.check_blocksize_namecCsX|ddd|ddd|ddd|ddd |d d d |d d ddS)Nr@rur r1r r30r rrUr r rtest_blocksize_names z#HashLibTestCase.test_blocksize_namecCs\|ddd|ddd|ddd |d d d |d ddd|dddd dS)Nr6rr7rr8hrr9Hrr:rr;rrUr r rtest_blocksize_name_sha3s z(HashLibTestCase.test_blocksize_name_sha3cCsl|j|}|D]X}|}tdur,t|tr,q|||d||j|||j|||j|qdS)Ni@)rQrrrZ_capacity_bitsZ _rate_bitsZ_suffix)rDrSZcapacityZratesuffixrhrrr r r check_sha3s zHashLibTestCase.check_sha3cCsd|dddd|dddd|dd d d|d d d d|dddd|dddddS)Nr6iir7i@r8ii@r9i@r:i@r;)rrUr r rtest_extra_sha3s zHashLibTestCase.test_extra_sha3cCs |ddd|ddddS)Nr4rrr5rrrUr r rtest_blocksize_name_blake2sz*HashLibTestCase.test_blocksize_name_blake2cCs|jddddddS)NrrZ d41d8cd98f00b204e9800998ecf8427eFrtrrUr r rtest_case_md5_0szHashLibTestCase.test_case_md5_0cCs|jddddddS)NrabcZ 900150983cd24fb0d6963f7d28e17f72FrtrrUr r rtest_case_md5_1szHashLibTestCase.test_case_md5_1cCs|jddddddS)Nrs>ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFrtrrUr r rtest_case_md5_2s zHashLibTestCase.test_case_md5_2z!test cannot run on 32-bit systemsr)sizeZmemusedry_runcCs|dd|ddS)NrAZ c9af2dff37468ce5dfee8f2cfc0a9c6drrDrr r rtest_case_md5_hugesz"HashLibTestCase.test_case_md5_hugecCs|dd|ddS)NrrZ 28138d306ff1b8281f1a9067e1a1a2b3rrr r rtest_case_md5_uintmaxsz%HashLibTestCase.test_case_md5_uintmaxcCs|ddddS)Nr rZ(da39a3ee5e6b4b0d3255bfef95601890afd80709rrUr r rtest_case_sha1_0sz HashLibTestCase.test_case_sha1_0cCs|ddddS)Nr rZ(a9993e364706816aba3e25717850c26c9cd0d89drrUr r rtest_case_sha1_1sz HashLibTestCase.test_case_sha1_1cCs|ddddS)Nr 8abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rrUr r rtest_case_sha1_2sz HashLibTestCase.test_case_sha1_2cCs|dddddS)Nr a@BZ(34aa973cd4c4daa4f61eeb2bdbad27316534016frrUr r rtest_case_sha1_3s z HashLibTestCase.test_case_sha1_3cCs|ddddS)Nr1rZ8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frrUr r rtest_case_sha224_0sz"HashLibTestCase.test_case_sha224_0cCs|ddddS)Nr1rZ823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rrUr r rtest_case_sha224_1 sz"HashLibTestCase.test_case_sha224_1cCs|ddddS)Nr1rZ875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rrUr r rtest_case_sha224_2 sz"HashLibTestCase.test_case_sha224_2cCs|dddddS)Nr1rrZ820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rrUr r rtest_case_sha224_3s z"HashLibTestCase.test_case_sha224_3cCs|ddddS)Nr rZ@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rrUr r rtest_case_sha256_0sz"HashLibTestCase.test_case_sha256_0cCs|ddddS)Nr rZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrrUr r rtest_case_sha256_1sz"HashLibTestCase.test_case_sha256_1cCs|ddddS)Nr rZ@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rrUr r rtest_case_sha256_2sz"HashLibTestCase.test_case_sha256_2cCs|dddddS)Nr rrZ@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rrUr r rtest_case_sha256_3$s z"HashLibTestCase.test_case_sha256_3cCs|ddddS)Nr3rZ`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brrUr r rtest_case_sha384_0)sz"HashLibTestCase.test_case_sha384_0cCs|ddddS)Nr3rZ`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rrUr r rtest_case_sha384_1.sz"HashLibTestCase.test_case_sha384_1cCs|ddddS)Nr3pabcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rrUr r rtest_case_sha384_23sz"HashLibTestCase.test_case_sha384_2cCs|dddddS)Nr3rrZ`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rrUr r rtest_case_sha384_3:s z"HashLibTestCase.test_case_sha384_3cCs|ddddS)Nr rZcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3errUr r rtest_case_sha512_0@sz"HashLibTestCase.test_case_sha512_0cCs|ddddS)Nr rZddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frrUr r rtest_case_sha512_1Esz"HashLibTestCase.test_case_sha512_1cCs|ddddS)Nr rZ8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rrUr r rtest_case_sha512_2Jsz"HashLibTestCase.test_case_sha512_2cCs|dddddS)Nr rrZe718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brrUr 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)rK)stringrrT) rrrrrrrrrr last_node) rZ SALT_SIZErwrrcZ PERSON_SIZEZMAX_DIGEST_SIZEZ MAX_KEY_SIZEryrr) rDrTZ salt_sizeZ person_sizeZkey_sizerZ max_offsetrrrrr 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) bytearrayrw)rseedmaskrzrroutrtr r r selftest_seqs    z4HashLibTestCase.blake2_rfc7693..selftest_seqrr)rr)r_rry) rDrTZmd_lenZin_lenr ZouterZoutlenZinlenZindatarZunkeyedZkeyedr r rblake2_rfc7693s    zHashLibTestCase.blake2_rfc7693cCsB|tjdddddgd}gd}||tj||ddS)Nrurl)rrrr)rrrrrZ@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)rrr4rr )rDZ b2b_md_lenZ b2b_in_lenr r r test_blake2bszHashLibTestCase.test_blake2bcCs|ddddS)Nr4rZ786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerrUr r rtest_case_blake2b_0sz#HashLibTestCase.test_case_blake2b_0cCs|ddddS)Nr4rZba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rrUr r rtest_case_blake2b_1sz#HashLibTestCase.test_case_blake2b_1cCs*|jddddddddd d d d d dddS)Nr4fooZ 920568b0c5873b2f0ab67bedb6cf1b2brubarbazbingrrrrrT rrrrrrrrrrrrrUr r r test_case_blake2b_all_parameterssz0HashLibTestCase.test_case_blake2b_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr4rr.r(r)rrDmsgrmdr r rtest_blake2b_vectorss z$HashLibTestCase.test_blake2b_vectorscCsB|tjdddddgd}gd}||tj||ddS)Nrl)rurrr)rrrArrZ@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)rrr5rr )rDZ b2s_md_lenZ b2s_in_lenr r r test_blake2sszHashLibTestCase.test_blake2scCs|ddddS)Nr5rZ@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rrUr r rtest_case_blake2s_0sz#HashLibTestCase.test_case_blake2s_0cCs|ddddS)Nr5rZ@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rrUr r rtest_case_blake2s_1sz#HashLibTestCase.test_case_blake2s_1cCs*|jddddddddd d d d d dddS)Nr5rZ bf2a8f7fe3c555012a6f8046e646bc75rurrrrrrrrrTrrrUr r r test_case_blake2s_all_parameterssz0HashLibTestCase.test_case_blake2s_all_parameterscCs4tdD]&\}}}t|}|jd|||dqdS)Nr5rrrr r rtest_blake2s_vectors s z$HashLibTestCase.test_blake2s_vectorscCs|ddddS)Nr6rZ86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rrUr r rtest_case_sha3_224_0sz$HashLibTestCase.test_case_sha3_224_0cCs$tdD]\}}|d||qdS)Nr6r.rrDrrr r rtest_case_sha3_224_vectorsz)HashLibTestCase.test_case_sha3_224_vectorcCs|ddddS)Nr7rZ@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arrUr r rtest_case_sha3_256_0sz$HashLibTestCase.test_case_sha3_256_0cCs$tdD]\}}|d||qdS)Nr7r$r%r r rtest_case_sha3_256_vector"sz)HashLibTestCase.test_case_sha3_256_vectorcCs|ddddS)Nr8rZ`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rrUr r rtest_case_sha3_384_0'sz$HashLibTestCase.test_case_sha3_384_0cCs$tdD]\}}|d||qdS)Nr8r$r%r r rtest_case_sha3_384_vector-sz)HashLibTestCase.test_case_sha3_384_vectorcCs|ddddS)Nr9rZa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rrUr r rtest_case_sha3_512_02sz$HashLibTestCase.test_case_sha3_512_0cCs$tdD]\}}|d||qdS)Nr9r$r%r r rtest_case_sha3_512_vector8sz)HashLibTestCase.test_case_sha3_512_vectorcCs$|dddd|dddddS)Nr:rZ@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crrUr 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@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rrUr 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)NiFrt1#xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)ror_rr rry)rDZ 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)rr_) chunk_sizeindexrKZhasherr rhash_in_chunkss z=HashLibTestCase.test_threaded_hashing..hash_in_chunksrsr)targetrf) rr ryrwrZ assertGreaterr threadingThreadappendstartjoin) rDZ num_threadsZ smallest_dataZ expected_hashr8threadsZ threadnumr5threadr r7rtest_threaded_hashingrs(     z%HashLibTestCase.test_threaded_hashingcCs|j}|dur||tdSrI)rqrint)rDZ 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)assertRaisesRegexrrrrUr r rtest_internal_typess$z#HashLibTestCase.test_internal_types)F)rrN)g__name__ __module__ __qualname__r]rxosrSCOMPILED_WITH_PYDEBUGr@rGrepropertyrorqr}rrrrrrrrrrrrrrrequires_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 rirr/`s J                  O                       #r/c @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 passwordssaltrUrurrurZ77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906rSsNaClrrZfdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640s pleaseletmeinsSodiumChloridei@Z7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887Z(0c60c80f961f0e71f3a9b524af6012062fe037a6NZ(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038Z 56fa6aa75548099dcc37d7f03425e0c3Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(Z 89b69d0516f829893c696226650a8687Z867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fceZe1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4eZd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5Z8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8rZ 9d9e9c4cd21fe4be24d5b8244c759665)r r 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 typeunknownspassrTrr ssha1passrrrrS)r*passwordrZ iterationsdklen) pbkdf2_resultsr` enumeratepbkdf2_test_vectorsr memoryviewrrDrcrr)rDZpbkdf2Z supportedZ digest_nameresultsrZvectorrZrroundsr[expectedZoverwrite_dklenrr r r_test_pbkdf2_hmacsd          .     zKDFTests._test_pbkdf2_hmacztest requires builtin_hashlibcCs|tjtdSrI)rcbuiltin_hashlib pbkdf2_hmacrArUr r rtest_pbkdf2_hmac_pyszKDFTests.test_pbkdf2_hmac_pyrez test requires OpenSSL > 1.0cCs|tjtdSrI)rcopenssl_hashlibrerrUr 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)rnrprSrTrrrrZrr)rrrN)rrN)rN)rrjrrkmaxmem)rrjrrkr[)scrypt_test_vectorsrrirrrrcr) rDrZrrjrrkrbresultrlr[r r r test_scryptsB 2 2 ( , 4888*zKDFTests.test_scryptcCs |dtj|dtjdS)NZ blake2b512zsha3-512)rrrrUr r rtest_normalized_nameBszKDFTests.test_normalized_name)rFrGrHr^rrmr(r)r\rcr%rNrdrfrPrbrgrhrrorpr r r rrRsl         &1     %rR__main__)1rvZbinasciirrr=rlrIrZ sysconfigr:r%rBrrZ test.supportrrrZ http.clientrrbrJZdefault_builtin_hashesZget_config_varrAr r^r'rgrdrrrrr frozensetrHrPrLr[rMr r"r.ZTestCaser/rRrFmainr r r r sn             N