o
    HXîhª³  ã                   @   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$m%Z% W n e&y¯   dZ"dZ#e'ƒ Z$dd„ Z%Y nw zd dl(Z(W n e&yÁ   dZ(Y nw e
 )e(d¡Z*ej+ddZ,e
 )e, d¡Z-dd„ Z.dZ/dd„ Z0G d d!„ d!e
j1ƒZ2G d"d#„ d#e
j1ƒZ3e4d$krûe
 5¡  dS dS )%é    N)Ú	unhexlify)Úsupport)Ú_4GÚ
bigmemtest)Úimport_fresh_module)Úthreading_helper)Úwarnings_helper)ÚHTTPExceptionZgettotalrefcount>   Úmd5Zblake2Zsha3Úsha512Úsha1Úsha256ZPY_BUILTIN_HASHLIB_HASHESc                 C   s   h | ]}|  ¡ ’qS © )Ústrip)Ú.0Úmr   r   ú;/opt/python-3.10.19/usr/lib/python3.10/test/test_hashlib.pyÚ	<setcomp>%   s    ÿr   ú"ú,ÚhashlibÚ_hashlib)Zfresh)Zblocked)ÚHASHÚHASHXOFÚopenssl_md_meth_namesÚget_fips_modec                   C   s   dS ©Nr   r   r   r   r   r   r   9   s   r   zrequires _blake2T)Zubzrequires _sha3c                 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   ÚhexstrH   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_vectorsS   s"   €
ÿ
ú"ÿr5   c                       sÆ  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ed.d/„ ƒZ 	0	1d´d2d3„Z!d4d5„ Z"ed6d7„ ƒZ#d8d9„ Z$e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„ ƒƒZ0e* +e,j-e.dF k dE¡e/e.dF dFd%dGdJdK„ ƒƒZ1e* +e,j-e.dF k dE¡e/e.dF dFd%dGdLdM„ ƒƒZ2dNdO„ Z3dPdQ„ Z4dRdS„ Z5dTdU„ Z6dVdW„ Z7dXdY„ Z8dZd[„ Z9d\d]„ Z:d^d_„ Z;d`da„ Z<dbdc„ Z=ddde„ Z>dfdg„ Z?dhdi„ Z@djdk„ ZAdldm„ ZBdndo„ ZCdpdq„ ZDdrds„ ZEdtdu„ ZFdvdw„ ZGdxdy„ ZHedzd{„ ƒZIed|d}„ ƒZJed~d„ ƒZKed€d„ ƒZLed‚dƒ„ ƒZMed„d…„ ƒZNed†d‡„ ƒZOedˆd‰„ ƒZPedŠd‹„ ƒZQedŒd„ ƒZRedŽd„ ƒZSedd‘„ ƒZTed’d“„ ƒZUed”d•„ ƒZVed–d—„ ƒZWed˜d™„ ƒZXedšd›„ ƒZYedœd„ ƒZZdždŸ„ Z[d d¡„ Z\d¢d£„ Z]d¤d¥„ Z^d¦d§„ Z_e`jad¨d©„ ƒZbdªd«„ Zcedjed¬d­„ ƒZfe* gehd1ud®¡d¯d°„ ƒZid±d²„ Zj‡  ZkS )µÚ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_256rA   rB   Ú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_modulep   s   
þ
þ€ýz*HashLibTestCase._conditional_import_modulec              	      s  t ƒ }ˆ jD ]	}| | ¡ ¡ qˆ  d¡}|r| ddh¡ i ˆ _|D ]}tr-| d¡r-q#t ƒ ˆ j|< q#ˆ j 	¡ D ]\}}| t
t|ƒ¡ d |fdd„}| |¡ q9ˆ  d¡}|ˆ _|r”ˆ  t|dƒ¡ ˆ  t|d	ƒ¡ ˆ j 	¡ D ]"\}}t
|d
| d ƒ}	|	r“z|	ƒ  W n	 ty   Y qqw | |	¡ qq‡ fdd„}
ˆ  d¡}|r¥|
dƒ ˆ  d¡}|r°|
dƒ ˆ  d¡}|r¿|
dƒ |
dƒ ˆ  d¡}|rÎ|
dƒ |
dƒ |rØ|
dƒ |
dƒ tsùˆ  d¡}|rù|
dƒ |
dƒ |
dƒ |
dƒ |
dƒ |
dƒ ttˆ ƒj|i |¤Ž d S )NÚ_blake2r;   r<   Úsha3_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©rK   r   r   Úadd_builtin_constructor¤   s   z9HashLibTestCase.__init__.<locals>.add_builtin_constructorÚ_md5r
   Ú_sha1r   Ú_sha256r8   r   Ú_sha512r:   r   Ú_sha3r=   r>   r?   r@   rA   rB   )ÚsetÚsupported_hash_namesrZ   ÚlowerrN   ÚupdaterY   Ú	SKIP_SHA3r.   ÚitemsrX   r   r   Ú
assertTrueÚhasattrÚ
ValueErrorÚsuperr6   Ú__init__)rK   ÚargsrT   Z
algorithmsÚ	algorithmrO   ÚconstructorsrU   r   r\   r^   r_   r`   ra   rb   rc   ©Ú	__class__r]   r   rn   y   st   



þ
€




zHashLibTestCase.__init__c                 C   s   | j  ¡ }tj |¡S rQ   )rY   ÚvaluesÚ	itertoolsÚchainÚfrom_iterable)rK   rq   r   r   r   Úhash_constructorsÆ   s   
z!HashLibTestCase.hash_constructorsc                 C   s   t ƒ S rQ   )r   r]   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Úrangerx   r[   ÚshakesÚ	hexdigest)rK   Ú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 rQ   )Úislower)r   Z_algor   r   r   Ú	<genexpr>Ú   s   € ÿz=HashLibTestCase.test_algorithms_guaranteed.<locals>.<genexpr>)ÚassertEqualr   Úalgorithms_guaranteedrd   re   r]   r   r   r   Útest_algorithms_guaranteedØ   s   ÿz*HashLibTestCase.test_algorithms_guaranteedc                 C   sD   |   ttjƒ tj¡¡ |  dtj¡ tjD ]	}tj|dd}qd S )NZ	undefinedFr|   )rj   rd   r   r‰   ÚissubsetÚalgorithms_availableÚassertNotInrR   )rK   r[   Údigestr   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   Tr|   zskip in FIPS modeó    r
   )r   rR   ry   ÚskipTestrx   r
   r   rV   ©rK   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   Fr|   r   r
   )r   rR   rx   r
   r   rV   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é   )ÚassertRaisesrl   r   rR   Ú	TypeErrorr]   r   r   r   Útest_unknown_hashý   s   z!HashLibTestCase.test_unknown_hashc                 C   s   |   t d¡jd¡ d S )Nr9   r   )rˆ   r   rR   r[   r]   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 )
NrW   Z__builtin_constructor_cacheÚtestr   z_md5 module not availabler_   r
   é   r7   )rX   r   r–   rl   r_   ÚImportErrorr‘   ÚsysÚmodulesÚclearÚlocalsr—   ZassertIsr
   rˆ   Úsorted)rK   Zget_builtin_constructorZbuiltin_constructor_cacher_   r\   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 )NFr|   r}   )	rx   r[   r€   ÚassertIsInstancerŽ   r!   rˆ   r'   r   ©rK   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   ƒ n1 sFw   Y  q.q#qd S )N)i    l   öÿ l   
    l            l   öÿÿÿ l   
        Fr|   iöÿÿÿ)
rx   r[   r€   r   r    rŽ   r   r–   rl   ÚOverflowError)rK   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 )NFr|   )
rx   r£   r[   Ústrre   ÚassertInr   rˆ   r   rR   r¤   r   r   r   Útest_name_attribute8  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   ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFr|   )r}   r   )rx   rg   r[   r€   rˆ   rŽ   Úcopy)rK   ZaasZbeesZceesZdeesrƒ   Zm1ro   Zm2Zm3Zm4Z	m4_digestZm4_copyr   r   r   Útest_large_updateE  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.)
Úlenrf   rY   ZassertGreaterEqualr   rˆ   rŽ   r!   r0   Údigest_size)rK   r[   rS   r   ÚshakerT   r§   rq   Úhash_object_constructorr   ZcomputedrŽ   r   r   r   Úchecke  s,   

ÿþþ
€ózHashLibTestCase.checkc                 C   s&   | j | }|D ]	}|  t|d¡ qd S )NZspam)rY   r–   r—   )rK   Zalgorithm_namerq   r²   r   r   r   Úcheck_no_unicodez  s   
ÿz HashLibTestCase.check_no_unicodec                 C   ó@   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nr
   r   r8   r   r:   r   ©r´   r]   r   r   r   Útest_no_unicode€  s   




zHashLibTestCase.test_no_unicodec                 C   s   |   d¡ |   d¡ d S )Nr;   r<   r¶   r]   r   r   r   Útest_no_unicode_blake2ˆ  s   
z&HashLibTestCase.test_no_unicode_blake2c                 C   rµ   )Nr=   r>   r?   r@   rA   rB   r¶   r]   r   r   r   Útest_no_unicode_sha3  s   




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 )NFr|   r®   Ú_r   )rY   rˆ   Ú
block_sizer°   r¯   rŽ   r   r[   rª   r/   r"   )rK   r[   r»   r°   Zdigest_lengthrq   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
   é@   r}   r   é   r8   é   r   é    r:   é€   é0   r   ©r¼   r]   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½   rA   é¨   r   rB   rÃ   r]   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@  )rY   r   r    rˆ   Z_capacity_bitsZ
_rate_bitsZ_suffix)rK   r[   ZcapacityZrateÚsuffixrq   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@  rA   é   i@  ó   rB   )rÌ   r]   r   r   r   Útest_extra_sha3Æ  s   zHashLibTestCase.test_extra_sha3c                 C   s    |   ddd¡ |   ddd¡ d S )Nr;   rÁ   r½   r<   rÀ   rÃ   r]   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 d41d8cd98f00b204e9800998ecf8427eFr|   ©r³   r]   r   r   r   Útest_case_md5_0Ô  ó   
þzHashLibTestCase.test_case_md5_0c                 C   rÔ   )Nr
   ó   abcZ 900150983cd24fb0d6963f7d28e17f72Fr|   rÕ   r]   r   r   r   Útest_case_md5_1Ú  r×   zHashLibTestCase.test_case_md5_1c                 C   rÔ   )Nr
   s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFr|   rÕ   r]   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Õ   ©rK   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   s4   t  ¡ }| d¡ | dd ¡ |  | ¡ d¡ dS )z,Regression test for gh-98517 CVE-2022-37454.ó   ì   ÿÿ Z880762e8ce6700f114fec0f621fd97c4b9c00147fa052215294cceeedN)r   r=   rg   rˆ   r   )rK   rÜ   r$   r   r   r   Útest_sha3_update_overflowò  s   
z)HashLibTestCase.test_sha3_update_overflowc                 C   ó   |   ddd¡ d S )Nr   r   Z(da39a3ee5e6b4b0d3255bfef95601890afd80709rÕ   r]   r   r   r   Útest_case_sha1_0ÿ  ó   ÿz HashLibTestCase.test_case_sha1_0c                 C   rç   )Nr   rØ   Z(a9993e364706816aba3e25717850c26c9cd0d89drÕ   r]   r   r   r   Útest_case_sha1_1  ré   z HashLibTestCase.test_case_sha1_1c                 C   rç   )Nr   ó8   abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rÕ   r]   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Õ   r]   r   r   r   Útest_case_sha1_3  ó   ÿz HashLibTestCase.test_case_sha1_3c                 C   rç   )Nr8   r   Z8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frÕ   r]   r   r   r   Útest_case_sha224_0  ré   z"HashLibTestCase.test_case_sha224_0c                 C   rç   )Nr8   rØ   Z823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rÕ   r]   r   r   r   Útest_case_sha224_1  ré   z"HashLibTestCase.test_case_sha224_1c                 C   rç   )Nr8   rë   Z875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rÕ   r]   r   r   r   Útest_case_sha224_2  rí   z"HashLibTestCase.test_case_sha224_2c                 C   rî   )Nr8   rï   rð   Z820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rÕ   r]   r   r   r   Útest_case_sha224_3"  rò   z"HashLibTestCase.test_case_sha224_3c                 C   rç   )Nr   r   Z@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rÕ   r]   r   r   r   Útest_case_sha256_0'  ré   z"HashLibTestCase.test_case_sha256_0c                 C   rç   )Nr   rØ   Z@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrÕ   r]   r   r   r   Útest_case_sha256_1+  ré   z"HashLibTestCase.test_case_sha256_1c                 C   rç   )Nr   rë   Z@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rÕ   r]   r   r   r   Útest_case_sha256_2/  rí   z"HashLibTestCase.test_case_sha256_2c                 C   rî   )Nr   rï   rð   Z@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rÕ   r]   r   r   r   Útest_case_sha256_34  rò   z"HashLibTestCase.test_case_sha256_3c                 C   rç   )Nr:   r   Z`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brÕ   r]   r   r   r   Útest_case_sha384_09  ré   z"HashLibTestCase.test_case_sha384_0c                 C   rç   )Nr:   rØ   Z`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rÕ   r]   r   r   r   Útest_case_sha384_1>  ré   z"HashLibTestCase.test_case_sha384_1c                 C   rç   )Nr:   óp   abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rÕ   r]   r   r   r   Útest_case_sha384_2C  ó   ýz"HashLibTestCase.test_case_sha384_2c                 C   rî   )Nr:   rï   rð   Z`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rÕ   r]   r   r   r   Útest_case_sha384_3J  rò   z"HashLibTestCase.test_case_sha384_3c                 C   rç   )Nr   r   Z€cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3erÕ   r]   r   r   r   Útest_case_sha512_0P  ré   z"HashLibTestCase.test_case_sha512_0c                 C   rç   )Nr   rØ   Z€ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frÕ   r]   r   r   r   Útest_case_sha512_1U  ré   z"HashLibTestCase.test_case_sha512_1c                 C   rç   )Nr   rý   Z€8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rÕ   r]   r   r   r   Útest_case_sha512_2Z  rÿ   z"HashLibTestCase.test_case_sha512_2c                 C   rî   )Nr   rï   rð   Z€e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brÕ   r]   r   r   r   Útest_case_sha512_3a  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_sizerå   l        )Únode_offset)rS   )Ústringr   é   rÎ   é   T)r  r  r  r°   r  r  r  r  r  r  Ú	last_node)rˆ   Z	SALT_SIZEr   r–   rl   ZPERSON_SIZEZMAX_DIGEST_SIZEZMAX_KEY_SIZEr   r¦   r—   )rK   r\   Z	salt_sizeZperson_sizeZkey_sizer°   Z
max_offsetr&   r  r  r  r   r   r   Úcheck_blake2f  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‚   rz   Úoutr&   Útr   r   r   Úselftest_seq¶  s   
z4HashLibTestCase.blake2_rfc7693.<locals>.selftest_seqrÀ   r  )r  r°   )rg   rŽ   r   )rK   r\   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 )Nr}   r½   l   ÿÿÿÿ )r¾   rÀ   rÂ   r½   )r   r›   rÁ   é   r  rÏ   Z@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)r  r   r;   rˆ   r  )rK   Z
b2b_md_lenZ
b2b_in_lenr   r   r   Útest_blake2bË  ó   þzHashLibTestCase.test_blake2bc                 C   rç   )Nr;   r   Z€786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerÕ   r]   r   r   r   Útest_case_blake2b_0Ô  ó   ÿz#HashLibTestCase.test_case_blake2b_0c                 C   rç   )Nr;   rØ   Z€ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rÕ   r]   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 )Nr;   ó   fooZ 920568b0c5873b2f0ab67bedb6cf1b2br}   ó   baró   bazó   bingr®   r›   r   rÛ   é   r  T©r°   r  r  r  r  r  r  r  r  r  r  rÕ   r]   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 )Nr;   r
  ©r5   r!   r0   r³   ©rK   Úmsgr  Úmdr   r   r   Útest_blake2b_vectorsò  ó   
þz$HashLibTestCase.test_blake2b_vectorsc                 C   r   )Né   rÀ   l   ÿÿÿ )r}   r¾   r¿   rÀ   )r   r›   r½   éA   r  rÏ   Z@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)r  r   r<   rˆ   r  )rK   Z
b2s_md_lenZ
b2s_in_lenr   r   r   Útest_blake2sø  r#  zHashLibTestCase.test_blake2sc                 C   rç   )Nr<   r   Z@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rÕ   r]   r   r   r   Útest_case_blake2s_0  r%  z#HashLibTestCase.test_case_blake2s_0c                 C   rç   )Nr<   rØ   Z@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rÕ   r]   r   r   r   Útest_case_blake2s_1  r%  z#HashLibTestCase.test_case_blake2s_1c                 C   r'  )Nr<   r(  Z bf2a8f7fe3c555012a6f8046e646bc75r}   r)  r*  r+  r®   r›   r   rÛ   r,  r  Tr-  rÕ   r]   r   r   r   Ú test_case_blake2s_all_parameters  r/  z0HashLibTestCase.test_case_blake2s_all_parametersc                 C   r0  )Nr<   r
  r1  r2  r   r   r   Útest_blake2s_vectors  r6  z$HashLibTestCase.test_blake2s_vectorsc                 C   rç   )Nr=   r   Z86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rÕ   r]   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=   ©r5   r³   ©rK   r3  r4  r   r   r   Útest_case_sha3_224_vector(  ó   ÿz)HashLibTestCase.test_case_sha3_224_vectorc                 C   rç   )Nr>   r   Z@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arÕ   r]   r   r   r   Útest_case_sha3_256_0-  r%  z$HashLibTestCase.test_case_sha3_256_0c                 C   r?  )Nr>   r@  rA  r   r   r   Útest_case_sha3_256_vector2  rC  z)HashLibTestCase.test_case_sha3_256_vectorc                 C   rç   )Nr?   r   Z`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rÕ   r]   r   r   r   Útest_case_sha3_384_07  r%  z$HashLibTestCase.test_case_sha3_384_0c                 C   r?  )Nr?   r@  rA  r   r   r   Útest_case_sha3_384_vector=  rC  z)HashLibTestCase.test_case_sha3_384_vectorc                 C   rç   )Nr@   r   Z€a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rÕ   r]   r   r   r   Útest_case_sha3_512_0B  r%  z$HashLibTestCase.test_case_sha3_512_0c                 C   r?  )Nr@   r@  rA  r   r   r   Útest_case_sha3_512_vectorH  rC  z)HashLibTestCase.test_case_sha3_512_vectorc                 C   ó$   |   dddd¡ |   dddd¡ d S )NrA   r   Z@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crÕ   r]   r   r   r   Útest_case_shake_128_0M  ó
   þz%HashLibTestCase.test_case_shake_128_0c                 C   ó&   t dƒD ]\}}|  d||d¡ qd S )NrA   Tr@  rA  r   r   r   Útest_case_shake128_vectorS  ó   ÿz)HashLibTestCase.test_case_shake128_vectorc                 C   rJ  )NrB   r   Z@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rÕ   r]   r   r   r   Útest_case_shake_256_0W  rL  z%HashLibTestCase.test_case_shake_256_0c                 C   rM  )NrB   Tr@  rA  r   r   r   Útest_case_shake256_vector]  rO  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   Fr|   ó   1ó   #ó   xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rx   rg   r   r   rˆ   r   )rK   Zgil_minsizerƒ   r   r   r   r   Útest_gila  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 r   )r¯   rg   )Ú
chunk_sizeÚindex©rS   Zhasherr   r   Úhash_in_chunksŒ  s
   þz=HashLibTestCase.test_threaded_hashing.<locals>.hash_in_chunksr{   r   )Útargetro   )r   r   r   r   r¯   ZassertGreaterrˆ   Ú	threadingÚThreadÚappendÚstartÚjoin)	rK   Znum_threadsZsmallest_dataZexpected_hashrY  ÚthreadsZ	threadnumrV  Úthreadr   rX  r   Útest_threaded_hashing~  s(   ÿ

z%HashLibTestCase.test_threaded_hashingc                 C   s"   | j }|d ur|  |t¡ d S d S rQ   )ry   r£   Úint)rK   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   ƒ n1 s;w   Y  qqd S )N)rP   r±   Zblake)r\   )rY   ri   r.   rl   ÚsubTestr   Úcheck_disallow_instantiationÚtype)rK   rp   rq   r\   r$   r   r   r   Útest_disallow_instantiation§  s   

ÿÿ€úûz+HashLibTestCase.test_disallow_instantiationzneed _hashlibc                 C   s   t  | t¡ t  | t¡ d S rQ   )r   rf  r   r   r]   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   ƒ n1 sHw   Y  qqd S )N)Ú	hash_typezimmutable typeF)rY   ri   rg  rl   re  ÚassertRaisesRegexr—   Úvalue)rK   rp   rq   r\   rj  r   r   r   Útest_readonly_types½  s    ÿÿ€ÿ€úþz#HashLibTestCase.test_readonly_types)F)r   r   N)lÚ__name__Ú
__module__Ú__qualname__re   r€   Úosr[   ÚCOMPILED_WITH_PYDEBUGrG   rN   rn   Úpropertyrx   ry   r…   rŠ   r   r“   r”   r˜   r™   r¢   r¥   r¨   r«   r­   r³   r´   r·   Úrequires_blake2r¸   Úrequires_sha3r¹   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&  r.  r5  r9  r:  r;  r<  r=  r>  rB  rD  rE  rF  rG  rH  rI  rK  rN  rP  rQ  rU  r   Zreap_threadsrb  rd  r   Zcpython_onlyrh  Ú
skipUnlessr   ri  rm  Ú__classcell__r   r   rr   r   r6   c   sö    	M

	

 


ÿ


	O


















#

r6   c                	   @   sz  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-¡e
jeƒ d.d/d0d1„ ƒƒZd2d3„ ZdS )4ÚKDFTests))ó   passwordó   saltr•   N)r{  r|  r®   N)r{  r|  é   N)s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsaltr}  r	  )s	   pass words   sa ltr}  r}   r   r}   r•   Z€77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906r{  s   NaClrÏ   r7  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 sw   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.*Úunknowns   passr|  r•   r   s   sha1Úpassr  r   r	  r{  )r1   Úpasswordr  Z
iterationsÚdklen)Úpbkdf2_resultsri   Ú	enumerateÚpbkdf2_test_vectorsrˆ   Ú
memoryviewr  rk  rl   r–   r—   )rK   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 rQ   )r   Zcheck_warningsr‹  Úbuiltin_hashlibÚpbkdf2_hmacrH   r]   r   r   r   Útest_pbkdf2_hmac_py5  s
   
ÿ"ÿzKDFTests.test_pbkdf2_hmac_pyr  z   test requires OpenSSL > 1.0c                 C   s   |   tjt¡ d S rQ   )r‹  Úopenssl_hashlibr  r   r]   r   r   r   Útest_pbkdf2_hmac_c<  s   zKDFTests.test_pbkdf2_hmac_cÚscryptz   test requires OpenSSL > 1.1zscrypt is blocked in FIPS mode)Úreasonc           
   
   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   ƒ n1 sÙw   Y  qºdD ]%}|  tttf¡ tjddd|dd W d   ƒ n	1 sw   Y  qádD ]&}|  tttf¡ tjdddd|d W d   ƒ n	1 s)w   Y  q	dD ]'}|  tttf¡ tjddddd|d W d   ƒ n	1 sSw   Y  q2dD ]'}	|  tttf¡ tjddddd|	d W d   ƒ n	1 s}w   Y  q\d S )N)r  Únr%   Úpr{  r|  r®   r7  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—   rl   r¦   )
rK   r‚  r  r“  r%   r”  rŠ  Úresultr•  rƒ  r   r   r   Útest_scryptA  sb   ÿÿÿÿÿÿ€ÿ€ÿ€ÿÿ€ÿÿ€ÿzKDFTests.test_scryptc                 C   s    |   dtj¡ |   dtj¡ d S )NZ
blake2b512zsha3-512)r   r   rŒ   r]   r   r   r   Útest_normalized_namei  s   zKDFTests.test_normalized_name)rn  ro  rp  r†  r   r–  r!   r0   r„  r‹  r-   rv  rŒ  rŽ  rx  rk   r  r  r   r   r˜  r™  r   r   r   r   rz  Ë  sp    ý	ÿø
ÿÿÿÿõþþþþóê&1
ÿ
ÿ%rz  Ú__main__)6r~   Zbinasciir   r   rD   ru   rq  r   Z	sysconfigr[  r-   rI   rš   r   Ztest.supportr   r   Ztest.support.import_helperr   r   r   Zhttp.clientr	   rk   rr  Zdefault_builtin_hashesZget_config_varrH   r   rf   r/   r  rŒ  r   r   r   r   r   rœ   Ú	frozensetrO   rx  rt  Zcheck_sanitizerrh   ru  r'   r*   r5   ZTestCaser6   rz  rn  Úmainr   r   r   r   Ú<module>   sx   

ÿûÿ	      n $ÿ