o
    °ó®gÓ®  ć                   @   sŌ  d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ eed	Zh d
£Ze d”Zedu rieZndd e d” ”  d”D ZeddgdZeekreddgdZ ndZ zd dl!m"Z"m#Z#m$Z$ W n e%y©   dZ"dZ#e& Z$Y nw zd dl'Z'W n e%y»   dZ'Y nw e
 (e'd”Z)dd Z*dZ+dd Z,G dd de
j-Z.G dd de
j-Z/e0dkrče
 1”  dS dS ) é    N)Ś	unhexlify)Śsupport)Ś_4GŚ
bigmemtest)Śimport_fresh_module)Śthreading_helper)Śwarnings_helper)ŚHTTPExceptionZgettotalrefcount>   Zsha3Śmd5Zblake2Śsha256Śsha512Śsha1ZPY_BUILTIN_HASHLIB_HASHESc                 C   s   h | ]}|  ” qS © )Śstrip)Ś.0Śmr   r   śG/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_hashlib.pyŚ	<setcomp>%   s    ’r   ś"ś,ŚhashlibŚ_hashlib)Zfresh)Zblocked)ŚHASHŚHASHXOFŚopenssl_md_meth_nameszrequires _blake2c                 C   sL   t | tsJ t| d}d}| D ]}|||d? d@  ||d@   7 }q|S )NZ0123456789abcdefŚ é   é   )Ś
isinstanceŚbytesŚrepr)ŚsŚhŚrŚir   r   r   ŚhexstrA   s   "r%   z(http://www.pythontest.net/hashlib/{}.txtc              	   c   s°    t  | ”}z	tj|dd}W n ttfy    t d |””w |+ |D ]}| ” }| 	d”s3|s4q&| 
d”}t |d ”|d< |V  q&W d    d S 1 sQw   Y  d S )Nzutf-8)ŚencodingzCould not retrieve {}ś#r   r   )ŚURLŚformatr   Zopen_urlresourceŚOSErrorr	   ŚunittestZSkipTestr   Ś
startswithŚsplitr   Śfromhex)Ś	hash_nameŚurlZtestdataŚlineŚpartsr   r   r   Śread_vectorsL   s"   
’
ś"’r3   c                       sj  e Zd ZdZddhZejdkpeZdd Z	 fddZ
ed	d
 Zedd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd±d&d'Zd(d) Zd*d+ Zed,d- Zd.d/ Z	0	1d²d2d3Z d4d5 Z!d6d7 Z"d8d9 Z#d:d; Z$ed<d= Z%d>d? Z&d@dA Z'dBdC Z(e) *e+j,e-dD k dE”e.e-dD dFd%dGdHdI Z/e) *e+j,e-dF k dE”e.e-dF dFd%dGdJdK Z0dLdM Z1dNdO Z2dPdQ Z3dRdS Z4dTdU Z5dVdW Z6dXdY Z7dZd[ Z8d\d] Z9d^d_ Z:d`da Z;dbdc Z<ddde Z=dfdg Z>dhdi Z?djdk Z@dldm ZAdndo ZBdpdq ZCdrds ZDdtdu ZEdvdw ZFedxdy ZGedzd{ ZHed|d} ZIed~d ZJedd ZKedd ZLedd ZMedd ZNedd ZOedd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZd d” Z[d¢d£ Z\d¤d„ Z]e^j_d¦d§ Z`dØd© ZaebjcdŖd« Zde) eefd1ud¬”d­d® ZgdÆd° Zh  ZiS )³ŚHashLibTestCase)r
   ŚMD5r   ZSHA1Śsha224ZSHA224r   ŚSHA256Śsha384ZSHA384r   ZSHA512Śblake2bŚblake2sŚsha3_224Śsha3_256Śsha3_384Śsha3_512Ś	shake_128Ś	shake_256r?   r@   Śposixc              
   C   sl   zt  |”W S  ty5 } z#| jr#|tv r*t d| ” W Y d}~dS W Y d}~dS W Y d}~dS d}~ww )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_moduleŚModuleNotFoundErrorŚ_warn_on_extension_importŚbuiltin_hashesŚwarningsŚwarn)ŚselfŚmodule_nameŚerrorr   r   r   Ś_conditional_import_modulei   s   
ž
žżz*HashLibTestCase._conditional_import_modulec              	      sų  t  } jD ]	}| | ” ” q  d”}|r| ddh” i  _|D ]}t   j|< q# j ” D ]\}}| tt	|” d |fdd}| |” q1  d”}| _
|r  t|d”   t|d”  j ” D ]"\}}t|d	| d }	|	rz|	  W n	 ty   Y qiw | |	” qi fd
d}
  d”}|r|
d   d”}|rØ|
d   d”}|r·|
d |
d   d”}|rĘ|
d |
d |rŠ|
d |
d   d”}|rļ|
d |
d |
d |
d |
d |
d tt j|i |¤ d S )NŚ_blake2r9   r:   c                 [   s.   | d u rt j|fi |¤S t j|| fi |¤S ©N)r   Śnew)ŚdataZ_algŚkwargsr   r   r   Ś_test_algorithm_via_hashlib_new   s   zAHashLibTestCase.__init__.<locals>._test_algorithm_via_hashlib_newr   Śopenssl_md5Zopenssl_sha1Zopenssl_c                    s"   t td| } j|   |” d S )NŚ__get_builtin_constructor)Śgetattrr   Śconstructors_to_testŚadd)ŚnameŚconstructor©rI   r   r   Śadd_builtin_constructor   s   z9HashLibTestCase.__init__.<locals>.add_builtin_constructorŚ_md5r
   Ś_sha1r   Ś_sha256r6   r   Ś_sha512r8   r   Ś_sha3r;   r<   r=   r>   r?   r@   )ŚsetŚsupported_hash_namesrW   ŚlowerrL   ŚupdaterV   ŚitemsrU   r   r   Ś
assertTrueŚhasattrŚ
ValueErrorŚsuperr4   Ś__init__)rI   ŚargsrQ   Z
algorithmsŚ	algorithmrM   ŚconstructorsrR   r   rY   r[   r\   r]   r^   r_   r`   ©Ś	__class__rZ   r   rj   r   sn   



ž





zHashLibTestCase.__init__c                 C   s   | j  ” }tj |”S rN   )rV   ŚvaluesŚ	itertoolsŚchainŚfrom_iterable)rI   rm   r   r   r   Śhash_constructors¼   s   
z!HashLibTestCase.hash_constructorsc                 C   s   t | jdr| j ” S d S )NŚget_fips_mode)rg   r   ru   rZ   r   r   r   Śis_fips_modeĮ   s   
zHashLibTestCase.is_fips_modec                 C   sL   t   dtd”}| jD ]}||dd}|j| jv r| d” q| ”  qd S )NŚbé
   F©Zusedforsecurityé   )ŚarrayŚrangert   rX   ŚshakesŚ	hexdigest)rI   ŚaŚconsŚcr   r   r   Śtest_hash_arrayČ   s   

ūzHashLibTestCase.test_hash_arrayc                 C   s"   |   tjtdd | jD ” d S )Nc                 s   s    | ]	}|  ” r|V  qd S rN   )Śislower)r   Z_algor   r   r   Ś	<genexpr>Ó   s    ’z=HashLibTestCase.test_algorithms_guaranteed.<locals>.<genexpr>)ŚassertEqualr   Śalgorithms_guaranteedra   rb   rZ   r   r   r   Śtest_algorithms_guaranteedŃ   s   ’z*HashLibTestCase.test_algorithms_guaranteedc                 C   s   |   ttj tj”” d S rN   )rf   ra   r   r   ŚissubsetŚalgorithms_availablerZ   r   r   r   Śtest_algorithms_availableÖ   s   ’z)HashLibTestCase.test_algorithms_availablec                 C   s   t jddd | jr|  d” | jD ]}|dd |ddd qt jddd t jdd | jd urC| jjddd | jjdd d S d S )Nr   Try   zskip in FIPS modeó    r
   )r   rO   rv   ŚskipTestrt   r
   r   rS   ©rI   r   r   r   r   Śtest_usedforsecurity_trueŚ   s   



žz)HashLibTestCase.test_usedforsecurity_truec                 C   sz   t jddd | jD ]}|dd |ddd q
t jddd t jdd | jd ur;| jjddd | jjdd d S d S )Nr   Fry   r   r
   )r   rO   rt   r
   r   rS   r   r   r   r   Śtest_usedforsecurity_falseē   s   


žz*HashLibTestCase.test_usedforsecurity_falsec                 C   s$   |   ttjd” |   ttjd” d S )Nzspam spam spam spam spamé   )ŚassertRaisesrh   r   rO   Ś	TypeErrorrZ   r   r   r   Śtest_unknown_hashņ   s   z!HashLibTestCase.test_unknown_hashc                 C   s   |   t d”jd” d S )Nr7   r   )r   r   rO   rX   rZ   r   r   r   Śtest_new_upper_to_lowerö   s   z'HashLibTestCase.test_new_upper_to_lowerc              	   C   sģ   t td}t td}|  t|d” zdd l}W n ty%   |  d” Y nw d tjd< | 	”  z|  t|d” W dt
 v rC|tjd< ntjd= ndt
 v rS|tjd< w tjd= w |  t|d” |d}|  ||j” |  t|d	dg” d S )
NrT   Z__builtin_constructor_cacheŚtestr   z_md5 module not availabler\   r
   é   r5   )rU   r   r   rh   r\   ŚImportErrorr   ŚsysŚmodulesŚclearŚlocalsr   ZassertIsr
   r   Śsorted)rI   Zget_builtin_constructorZbuiltin_constructor_cacher\   rY   r   r   r   Śtest_get_builtin_constructorł   s4   ’’’



ż
z,HashLibTestCase.test_get_builtin_constructorc                 C   s~   | j D ]9}|dd}|j| jv r(|  | d”t” |  t| d”| d”” q|  | ” t” |  t| ” | ” ” qd S )NFry   rz   )	rt   rX   r}   ŚassertIsInstanceŚdigestr   r   r%   r~   ©rI   r   r"   r   r   r   Śtest_hexdigest  s   

łzHashLibTestCase.test_hexdigestc                 C   s    d}| j D ]H}|dd}|j| jvrqtd urt|trq|j|jfD ])}|  t|d” |D ]}|  tt	f” || W d    q.1 sFw   Y  q.q#qd S )N)i    l   ö’ l   
    l            l   ö’’’ l   
        Fry   iö’’’)
rt   rX   r}   r   r   r   r~   r   rh   ŚOverflowError)rI   Zlarge_sizesr   r"   r   Ślengthr   r   r   Śtest_digest_length_overflow  s    


’’žłz+HashLibTestCase.test_digest_length_overflowc                 C   sr   | j D ]3}|dd}|  |jt” |j| jv r |  |j| j” n|  |j| j” |  |jtj	|jddj” qd S )NFry   )
rt   r   rX   Śstrrb   ŚassertInŚassertNotInr   r   rO   r    r   r   r   Śtest_name_attribute-  s   

žłz#HashLibTestCase.test_name_attributec                 C   s*  d}d}d}d}| j D ]}|dd}| |” | |” | |” | |” |j| jv r/d}nd}|dd}| || | | ” |  |j| |j| ” ||| | | dd}	|  |j| |	j| ” ||| | dd}
|
j| }|
 ” }| |” |  |j| |j| ” |  |
j| |” qd S )	Ns   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbs~   ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs   ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFry   )rz   r   )rt   rd   rX   r}   r   r   Ścopy)rI   ZaasZbeesZceesZdeesr   Zm1rk   Zm2Zm3Zm4Z	m4_digestZm4_copyr   r   r   Śtest_large_update:  s2   








čz!HashLibTestCase.test_large_updateFc                 K   sÄ   t |d }| ” }| j| }|  t |d” |D ]F}||fi |¤}	|s)|	 ” n|	 |”}
|  |
|d|||
t ||f ” |sD|	 ” n|	 |”}
t |”}|  |
|” |s_|  t ||	j	” qd S )Né   zrHash algorithm %s constructed using %s returned hexdigest %r for %d byte input data that should have hashed to %r.)
Ślenrc   rV   ZassertGreaterEqualr~   r   r   r   r.   Śdigest_size)rI   rX   rP   r~   ŚshakerQ   r£   rm   Śhash_object_constructorr   Zcomputedr   r   r   r   ŚcheckZ  s,   

’žž
ózHashLibTestCase.checkc                 C   s&   | j | }|D ]	}|  t|d” qd S )NZspam)rV   r   r   )rI   Zalgorithm_namerm   rÆ   r   r   r   Ścheck_no_unicodeo  s   
’z HashLibTestCase.check_no_unicodec                 C   ó@   |   d” |   d” |   d” |   d” |   d” |   d” d S )Nr
   r   r6   r   r8   r   ©r±   rZ   r   r   r   Śtest_no_unicodeu  ó   




zHashLibTestCase.test_no_unicodec                 C   s   |   d” |   d” d S )Nr9   r:   r³   rZ   r   r   r   Śtest_no_unicode_blake2}  s   
z&HashLibTestCase.test_no_unicode_blake2c                 C   r²   )Nr;   r<   r=   r>   r?   r@   r³   rZ   r   r   r   Śtest_no_unicode_sha3  rµ   z$HashLibTestCase.test_no_unicode_sha3r   Nc                 C   sČ   | j | }|D ]Z}|dd}|  |j|” |  |j|” |r7|  t| |”|” |  t| |”d| ” n|  t| ” |” |  t| ” d| ” |  |j|” |  | 	d”d t
|” qd S )NFry   r«   Ś_r   )rV   r   Ś
block_sizer­   r¬   r   r~   rX   r¦   r-   r    )rI   rX   r¹   r­   Zdigest_lengthrm   rÆ   r   r   r   r   Ścheck_blocksize_name  s"   

’’ņz$HashLibTestCase.check_blocksize_namec                 C   sX   |   ddd” |   ddd” |   ddd” |   ddd	” |   d
dd” |   ddd” d S )Nr
   é@   rz   r   é   r6   é   r   é    r8   é   é0   r   ©rŗ   rZ   r   r   r   Śtest_blocksize_name  s   z#HashLibTestCase.test_blocksize_namec                 C   s\   |   ddd” |   ddd” |   ddd	” |   d
dd” |   dddd” |   dddd” d S )Nr;   é   r½   r<   é   r¾   r=   éh   rĄ   r>   éH   r»   r?   éØ   r   r@   rĮ   rZ   r   r   r   Śtest_blocksize_name_sha3„  s   z(HashLibTestCase.test_blocksize_name_sha3c                 C   sl   | j | }|D ],}| }td urt|trq|  || d” |  |j|” |  |j|” |  |j|” qd S )Ni@  )rV   r   r   r   Z_capacity_bitsZ
_rate_bitsZ_suffix)rI   rX   ZcapacityZrateŚsuffixrm   rÆ   r   r   r   r   Ś
check_sha3­  s   
ųzHashLibTestCase.check_sha3c                 C   sd   |   dddd” |   dddd” |   dd	d
d” |   dddd” |   dddd” |   dddd” d S )Nr;   iĄ  i  ó   r<   é   i@  r=   i   i@  r>   é   i@  r?   é   i@  ó   r@   )rŹ   rZ   r   r   r   Śtest_extra_sha3¹  s   zHashLibTestCase.test_extra_sha3c                 C   s    |   ddd” |   ddd” d S )Nr9   ræ   r»   r:   r¾   rĮ   rZ   r   r   r   Śtest_blocksize_name_blake2Į  s   z*HashLibTestCase.test_blocksize_name_blake2c                 C   ó   | j ddddd d S )Nr
   r   Z d41d8cd98f00b204e9800998ecf8427eFry   ©r°   rZ   r   r   r   Śtest_case_md5_0Ę  ó   
žzHashLibTestCase.test_case_md5_0c                 C   rŅ   )Nr
   ó   abcZ 900150983cd24fb0d6963f7d28e17f72Fry   rÓ   rZ   r   r   r   Śtest_case_md5_1Ģ  rÕ   zHashLibTestCase.test_case_md5_1c                 C   rŅ   )Nr
   s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFry   rÓ   rZ   r   r   r   Śtest_case_md5_2Ņ  s   
üzHashLibTestCase.test_case_md5_2é   z!test cannot run on 32-bit systemsr   )ŚsizeZmemuseŚdry_runc                 C   ó   |   dd| d” d S )Nr
   ó   AZ c9af2dff37468ce5dfee8f2cfc0a9c6drÓ   ©rI   rŚ   r   r   r   Śtest_case_md5_hugeŚ  ó   z"HashLibTestCase.test_case_md5_hugec                 C   rÜ   )Nr
   rŻ   Z 28138d306ff1b8281f1a9067e1a1a2b3rÓ   rŽ   r   r   r   Śtest_case_md5_uintmaxß  rą   z%HashLibTestCase.test_case_md5_uintmaxc                 C   ó   |   ddd” d S )Nr   r   Z(da39a3ee5e6b4b0d3255bfef95601890afd80709rÓ   rZ   r   r   r   Śtest_case_sha1_0č  ó   ’z HashLibTestCase.test_case_sha1_0c                 C   rā   )Nr   rÖ   Z(a9993e364706816aba3e25717850c26c9cd0d89drÓ   rZ   r   r   r   Śtest_case_sha1_1ģ  rä   z HashLibTestCase.test_case_sha1_1c                 C   rā   )Nr   ó8   abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rÓ   rZ   r   r   r   Śtest_case_sha1_2š  ó   žz HashLibTestCase.test_case_sha1_2c                 C   ó   |   ddd d” d S )Nr   ó   aé@B Z(34aa973cd4c4daa4f61eeb2bdbad27316534016frÓ   rZ   r   r   r   Śtest_case_sha1_3õ  ó   ’z HashLibTestCase.test_case_sha1_3c                 C   rā   )Nr6   r   Z8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frÓ   rZ   r   r   r   Śtest_case_sha224_0ž  rä   z"HashLibTestCase.test_case_sha224_0c                 C   rā   )Nr6   rÖ   Z823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rÓ   rZ   r   r   r   Śtest_case_sha224_1  rä   z"HashLibTestCase.test_case_sha224_1c                 C   rā   )Nr6   rę   Z875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rÓ   rZ   r   r   r   Śtest_case_sha224_2  rč   z"HashLibTestCase.test_case_sha224_2c                 C   ré   )Nr6   rź   rė   Z820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rÓ   rZ   r   r   r   Śtest_case_sha224_3  rķ   z"HashLibTestCase.test_case_sha224_3c                 C   rā   )Nr   r   Z@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rÓ   rZ   r   r   r   Śtest_case_sha256_0  rä   z"HashLibTestCase.test_case_sha256_0c                 C   rā   )Nr   rÖ   Z@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrÓ   rZ   r   r   r   Śtest_case_sha256_1  rä   z"HashLibTestCase.test_case_sha256_1c                 C   rā   )Nr   rę   Z@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rÓ   rZ   r   r   r   Śtest_case_sha256_2  rč   z"HashLibTestCase.test_case_sha256_2c                 C   ré   )Nr   rź   rė   Z@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rÓ   rZ   r   r   r   Śtest_case_sha256_3  rķ   z"HashLibTestCase.test_case_sha256_3c                 C   rā   )Nr8   r   Z`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brÓ   rZ   r   r   r   Śtest_case_sha384_0"  rä   z"HashLibTestCase.test_case_sha384_0c                 C   rā   )Nr8   rÖ   Z`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rÓ   rZ   r   r   r   Śtest_case_sha384_1'  rä   z"HashLibTestCase.test_case_sha384_1c                 C   rā   )Nr8   óp   abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rÓ   rZ   r   r   r   Śtest_case_sha384_2,  ó   żz"HashLibTestCase.test_case_sha384_2c                 C   ré   )Nr8   rź   rė   Z`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rÓ   rZ   r   r   r   Śtest_case_sha384_33  rķ   z"HashLibTestCase.test_case_sha384_3c                 C   rā   )Nr   r   Zcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3erÓ   rZ   r   r   r   Śtest_case_sha512_09  rä   z"HashLibTestCase.test_case_sha512_0c                 C   rā   )Nr   rÖ   Zddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frÓ   rZ   r   r   r   Śtest_case_sha512_1>  rä   z"HashLibTestCase.test_case_sha512_1c                 C   rā   )Nr   rų   Z8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rÓ   rZ   r   r   r   Śtest_case_sha512_2C  rś   z"HashLibTestCase.test_case_sha512_2c                 C   ré   )Nr   rź   rė   Ze718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brÓ   rZ   r   r   r   Śtest_case_sha512_3J  rķ   z"HashLibTestCase.test_case_sha512_3c                 C   s  |   |j|” t|d D ]	}|d| d qd|d  }| jt||d |   |j|” t|d D ]	}|d| d q2d|d  }	| jt||	d |   |j|” td|d D ]}||d qX| jt|dd | jt|dd | jt||d d |   |j|” t|d D ]	}|d| d qd|d  }
| jt||
d |   |  ” |d	d ” ” tdd
D ]}||d q²| jt|dd | jt|d
d tdd
D ]}||d qĻ| jt|dd | jt|dd | jt|d
d tdd
D ]}||d qō| jt|dd | jt|d
d td|d D ]}||d q| jt|dd | jt||d d |dd |dd | jt|dd | jt	|dd |dd ||d | jt|dd | jt	||d d | jt
|d	d | jt
|d	d |  t
|d” |d	d	d	d	dddd
ddddd d S )Nr   rź   ©Śsalt)Śperson©r­   é’’’’r   ©Śkeyr   rĪ   )Śfanout)Śdepth)Ś
node_depth)Ś
inner_size)Ś	leaf_sizeģ   ’’ l        )Śnode_offset)rP   )Śstringr   é   rĢ   é   T)r  r  r  r­   r  r  r  r  r	  r
  Ś	last_node)r   Z	SALT_SIZEr|   r   rh   ZPERSON_SIZEZMAX_DIGEST_SIZEZMAX_KEY_SIZEr~   r¢   r   )rI   rY   Z	salt_sizeZperson_sizeZkey_sizer­   Z
max_offsetr$   r  r  r  r   r   r   Ścheck_blake2O  s   ’




ōzHashLibTestCase.check_blake2c                 C   sx   dd }|dd}|D ],}|D ]'}|||}|||}	|||d}
|  |
 ” ” |||	|d}|  | ” ” qq| ” S )Nc                 S   sT   d}d| |@ }d}t | }t| D ]}|| |@ }||}}|d? d@ ||< q|S )Nr  l   ­KZ= r   é   é’   )Ś	bytearrayr|   )r£   ŚseedŚmaskr   rw   Śoutr$   Śtr   r   r   Śselftest_seq  s   
z4HashLibTestCase.blake2_rfc7693.<locals>.selftest_seqr¾   r  )r  r­   )rd   r   r~   )rI   rY   Zmd_lenZin_lenr  ZouterZoutlenZinlenZindatar  ZunkeyedZkeyedr   r   r   Śblake2_rfc7693  s   



śzHashLibTestCase.blake2_rfc7693c                 C   óB   |   tjddddd” g d¢}g d¢}|  |  tj||”d” d S )Nrz   r»   l   ’’’’ )r¼   r¾   rĄ   r»   )r   r   ræ   é   r  rĶ   Z@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)r  r   r9   r   r  )rI   Z
b2b_md_lenZ
b2b_in_lenr   r   r   Śtest_blake2b“  ó   žzHashLibTestCase.test_blake2bc                 C   rā   )Nr9   r   Z786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerÓ   rZ   r   r   r   Śtest_case_blake2b_0½  ó   ’z#HashLibTestCase.test_case_blake2b_0c                 C   rā   )Nr9   rÖ   Zba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rÓ   rZ   r   r   r   Śtest_case_blake2b_1Ć  r!  z#HashLibTestCase.test_case_blake2b_1c                 C   ó*   | j ddddddddd	d
ddddd d S )Nr9   ó   fooZ 920568b0c5873b2f0ab67bedb6cf1b2brz   ó   baró   bazó   bingr«   r   r   rŁ   é   r  T©r­   r  r  r  r  r  r  r  r	  r
  r  rÓ   rZ   r   r   r   Ś test_case_blake2b_all_parametersÉ  ó   
ōz0HashLibTestCase.test_case_blake2b_all_parametersc                 C   ó4   t dD ]\}}}t |”}| jd|||d qd S )Nr9   r  ©r3   r   r.   r°   ©rI   Śmsgr  Śmdr   r   r   Śtest_blake2b_vectorsŪ  ó   
žz$HashLibTestCase.test_blake2b_vectorsc                 C   r  )Né   r¾   l   ’’’ )rz   r¼   r½   r¾   )r   r   r»   éA   r  rĶ   Z@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)r  r   r:   r   r  )rI   Z
b2s_md_lenZ
b2s_in_lenr   r   r   Śtest_blake2sį  r  zHashLibTestCase.test_blake2sc                 C   rā   )Nr:   r   Z@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rÓ   rZ   r   r   r   Śtest_case_blake2s_0ź  r!  z#HashLibTestCase.test_case_blake2s_0c                 C   rā   )Nr:   rÖ   Z@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rÓ   rZ   r   r   r   Śtest_case_blake2s_1ļ  r!  z#HashLibTestCase.test_case_blake2s_1c                 C   r#  )Nr:   r$  Z bf2a8f7fe3c555012a6f8046e646bc75rz   r%  r&  r'  r«   r   r   rŁ   r(  r  Tr)  rÓ   rZ   r   r   r   Ś test_case_blake2s_all_parametersō  r+  z0HashLibTestCase.test_case_blake2s_all_parametersc                 C   r,  )Nr:   r  r-  r.  r   r   r   Śtest_blake2s_vectors  r2  z$HashLibTestCase.test_blake2s_vectorsc                 C   rā   )Nr;   r   Z86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rÓ   rZ   r   r   r   Śtest_case_sha3_224_0  rä   z$HashLibTestCase.test_case_sha3_224_0c                 C   ó$   t dD ]\}}|  d||” qd S )Nr;   ©r3   r°   ©rI   r/  r0  r   r   r   Śtest_case_sha3_224_vector  ó   ’z)HashLibTestCase.test_case_sha3_224_vectorc                 C   rā   )Nr<   r   Z@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arÓ   rZ   r   r   r   Śtest_case_sha3_256_0  rä   z$HashLibTestCase.test_case_sha3_256_0c                 C   r;  )Nr<   r<  r=  r   r   r   Śtest_case_sha3_256_vector  r?  z)HashLibTestCase.test_case_sha3_256_vectorc                 C   rā   )Nr=   r   Z`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rÓ   rZ   r   r   r   Śtest_case_sha3_384_0  rä   z$HashLibTestCase.test_case_sha3_384_0c                 C   r;  )Nr=   r<  r=  r   r   r   Śtest_case_sha3_384_vector!  r?  z)HashLibTestCase.test_case_sha3_384_vectorc                 C   rā   )Nr>   r   Za69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rÓ   rZ   r   r   r   Śtest_case_sha3_512_0%  rä   z$HashLibTestCase.test_case_sha3_512_0c                 C   r;  )Nr>   r<  r=  r   r   r   Śtest_case_sha3_512_vector*  r?  z)HashLibTestCase.test_case_sha3_512_vectorc                 C   ó$   |   dddd” |   dddd” d S )Nr?   r   Z@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crÓ   rZ   r   r   r   Śtest_case_shake_128_0.  ó
   žz%HashLibTestCase.test_case_shake_128_0c                 C   ó&   t dD ]\}}|  d||d” qd S )Nr?   Tr<  r=  r   r   r   Śtest_case_shake128_vector4  ó   ’z)HashLibTestCase.test_case_shake128_vectorc                 C   rF  )Nr@   r   Z@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rÓ   rZ   r   r   r   Śtest_case_shake_256_08  rH  z%HashLibTestCase.test_case_shake_256_0c                 C   rI  )Nr@   Tr<  r=  r   r   r   Śtest_case_shake256_vector>  rK  z)HashLibTestCase.test_case_shake256_vectorc                 C   sŗ   d}| j D ]%}|dd}| d” | d| ” | d” |d| dd}| d” qt ” }| d” | d| ” | d” |  | ” d” t dd|  d ”}|  | ” d” d S )Ni   Fry   ó   1ó   #ó   xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rt   rd   r   r   r   r~   )rI   Zgil_minsizer   r   r   r   r   Śtest_gilB  s*   





žžzHashLibTestCase.test_gilc           	         sĢ   t  ” d}d}|d  t   | ” ” } fdd}g }t|D ]'}t d|  }|  |d” |  |t| d” tj||fd}| 	|” q"|D ]}| 
”  qL|D ]}| ”  qU|  | ” ” d S )	NrŁ   s   swineflui@ c                    sB   d}|t  k r  |||   ” || 7 }|t  k sd S d S )Nr   )r¬   rd   )Ś
chunk_sizeŚindex©rP   Zhasherr   r   Śhash_in_chunksm  s
   žz=HashLibTestCase.test_threaded_hashing.<locals>.hash_in_chunksrx   r   )Śtargetrk   )r   r   r~   r|   r¬   ZassertGreaterr   Ś	threadingŚThreadŚappendŚstartŚjoin)	rI   Znum_threadsZsmallest_dataZexpected_hashrU  ŚthreadsZ	threadnumrR  Śthreadr   rT  r   Śtest_threaded_hashing_  s(   ’

z%HashLibTestCase.test_threaded_hashingc                 C   s"   | j }|d ur|  |t” d S d S rN   )rv   r   Śint)rI   Z	fips_moder   r   r   Śtest_get_fips_mode  s   ’z"HashLibTestCase.test_get_fips_modec              
   C   s   | j  ” D ]<\}}| d”rq|D ]/}z| }W n	 ty!   Y qw | j|d t | t|” W d    q1 s;w   Y  qqd S )N)Zsha3_r®   Zblake)rY   )rV   re   r,   rh   ŚsubTestr   Ścheck_disallow_instantiationŚtype)rI   rl   rm   rY   r"   r   r   r   Śtest_disallow_instantiation  s   

’’śūz+HashLibTestCase.test_disallow_instantiationzneed _hashlibc                 C   s   t  | t” t  | t” d S rN   )r   rb  r   r   rZ   r   r   r   Ś test_hash_disallow_instantiation  s   z0HashLibTestCase.test_hash_disallow_instantiationc                 C   s¢   | j  ” D ]I\}}|D ]B}zt| }W n	 ty   Y qw | j|d! |  td” d|_W d    n1 s9w   Y  W d    q1 sHw   Y  qqd S )N)Ś	hash_typezimmutable typeF)rV   re   rc  rh   ra  ŚassertRaisesRegexr   Śvalue)rI   rl   rm   rY   rf  r   r   r   Śtest_readonly_types  s   ’’’śžz#HashLibTestCase.test_readonly_types)F)r   r   N)jŚ__name__Ś
__module__Ś__qualname__rb   r}   ŚosrX   ŚCOMPILED_WITH_PYDEBUGrE   rL   rj   Śpropertyrt   rv   r   r   r   r   r   r   r   r   r”   r¤   rØ   rŖ   r°   r±   r“   Śrequires_blake2r¶   r·   rŗ   rĀ   rČ   rŹ   rŠ   rŃ   rŌ   r×   rŲ   r+   ŚskipIfr   Śmaxsizer   r   rß   rį   rć   rå   rē   rģ   rī   rļ   rš   rń   rņ   ró   rō   rõ   rö   r÷   rł   rū   rü   rż   rž   r’   r  r  r  r   r"  r*  r1  r5  r6  r7  r8  r9  r:  r>  r@  rA  rB  rC  rD  rE  rG  rJ  rL  rM  rQ  r   Zreap_threadsr^  r`  r   Zcpython_onlyrd  Ś
skipUnlessr   re  ri  Ś__classcell__r   r   rn   r   r4   \   sŚ    	J

	

 

’
	O










#

r4   c                	   @   sj  e Zd Zg d¢Zdddddedfdddd	ded
fdddd	dedfgZe d”dfe d”dfe d”dfe d”dfe d”dfge d”dfe d”dfe d”dfe d”dfe d”dfge d”dfe d”dfe d”dfe d”d fe d!”dfgd"Zd#d$ Z	e
 edu d%”d&d' Ze
 eed(d)”d*d+ Ze
 eed,d-”d.d/ Zd0d1 ZdS )2ŚKDFTests))ó   passwordó   saltr   N)rv  rw  r«   N)rv  rw  é   N)s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsaltrx  r  )s	   pass words   sa ltrx  rz   r   rz   r   Z77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906rv  s   NaClrĶ   r3  Zfdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640s   pleaseletmeins   SodiumChloridei @  Z7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887Z(0c60c80f961f0e71f3a9b524af6012062fe037a6NZ(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038é   Z 56fa6aa75548099dcc37d7f03425e0c3Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9é(   Z 89b69d0516f829893c696226650a8687Z867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fceZe1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4eZd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5Z8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8r»   Z 9d9e9c4cd21fe4be24d5b8244c759665)r   r   r   c                 C   są  | j  ” D ]q\}}||vrqt| jD ]b\}}|\}}}	}
|| \}}|r'|}
|||||	|
}|  ||||||	|
f” ||t|t||	|
}|  ||” ||t|t||	|
}|  ||” |
d u ru|||||	}|  ||||||	f” qq|  td” |dddd W d    n1 sw   Y  d|v rī|  	t
|dddd” |  	t
|ddd	d” |  	t|dddd
” |  	t|dddd” |  	t|ddddd
” |  	t|ddddd” |ddddd d}|  || j d d
 d
 ” d S d S )Nzunsupported hash typeŚunknowns   passrw  r   r   s   sha1Śpassr  r   r  rv  )r/   Śpasswordr  Z
iterationsŚdklen)Śpbkdf2_resultsre   Ś	enumerateŚpbkdf2_test_vectorsr   Ś
memoryviewr  rg  rh   r   r   )rI   Zpbkdf2Z	supportedZdigest_nameŚresultsr$   Zvectorr}  r  Śroundsr~  ŚexpectedZoverwrite_dklenr  r   r   r   Ś_test_pbkdf2_hmacå  sl   ’

’

’
’š’’’’’’’’ėzKDFTests._test_pbkdf2_hmacztest requires builtin_hashlibc                 C   s<   t  ”  |  tjt” W d    d S 1 sw   Y  d S rN   )r   Zcheck_warningsr  Śbuiltin_hashlibŚpbkdf2_hmacrF   rZ   r   r   r   Śtest_pbkdf2_hmac_py  s
   
’"’zKDFTests.test_pbkdf2_hmac_pyr  z   test requires OpenSSL > 1.0c                 C   s   |   tjt” d S rN   )r  Śopenssl_hashlibr  r   rZ   r   r   r   Śtest_pbkdf2_hmac_c  s   zKDFTests.test_pbkdf2_hmac_cŚscryptz   test requires OpenSSL > 1.1c           
   
   C   s  | j D ]\}}}}}}tj|||||d}|  ||” qtjdddddd |  t” tjdddddd W d    n1 s@w   Y  |  t” tjdddddd W d    n1 s_w   Y  |  t” t d” W d    n1 syw   Y  |  t” t dd” W d    n1 sw   Y  |  t” tjdddddd	 W d    n1 s³w   Y  d
D ]$}|  tttf” tjdd|ddd W d    qŗ1 sŁw   Y  qŗdD ]%}|  tttf” tjddd|dd W d    qį1 sw   Y  qįdD ]'}|  tttf” tjdddd|d W d    q	1 s*w   Y  q	dD ](}|  tttf” tjddddd|d W d    q31 sUw   Y  q3dD ](}	|  tttf” tjddddd|	d W d    q^1 sw   Y  q^d S )N)r  Śnr#   Śprv  rw  r«   r3  r   r}  r  r   )r  r   r   N)r  r   N)r  N)r  r  r#   r  Śmaxmem)r  r  r#   r  r~  )Śscrypt_test_vectorsr   r  r   r   r   rh   r¢   )
rI   r}  r  r  r#   r  r  Śresultr  r~  r   r   r   Śtest_scrypt"  sX   ’’’’’’ ’$’’$’’$’’zKDFTests.test_scryptc                 C   s    |   dtj” |   dtj” d S )NZ
blake2b512zsha3-512)r§   r   r   rZ   r   r   r   Śtest_normalized_nameI  s   zKDFTests.test_normalized_name)rj  rk  rl  r  r   r  r   r.   r  r  r+   rq  r  r  rs  rg   r  r  r   r  r  r   r   r   r   ru  ¬  sn    ż	’ų
’’’’õžžžžóź&1
’
’
%ru  Ś__main__)2r{   Zbinasciir   r   rB   rq   rm  r   Z	sysconfigrW  r+   rG   r   r   Ztest.supportr   r   Ztest.support.import_helperr   r   r   Zhttp.clientr	   rg   rn  Zdefault_builtin_hashesZget_config_varrF   r   rc   r-   r  r  r   r   r   r   r   Ś	frozensetrM   rs  rp  r%   r(   r3   ZTestCaser4   ru  rj  Śmainr   r   r   r   Ś<module>   sr   

’
ż’	      V #’