a
    äze…®  ã                   @   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mZ d dlmZ eedƒZh d£Ze d¡Zedu r²e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0 zd dl%Z%W n e#yf   dZ%Y n0 e
 &e%d¡Z'zd dl(Z(W n e#y˜   dZ(Y n0 ej)ddZ*e
 &e* o´e(d¡Z+dd„ Z,dZ-dd„ Z.G dd„ de
j/ƒZ0G dd „ d e
j/ƒZ1e2d!kre
 3¡  dS )"é    N)Ú	unhexlify)Úsupport)Ú_4GÚ
bigmemtestÚimport_fresh_module)ÚHTTPExceptionZgettotalrefcount>   Zblake2Úsha1Úmd5Zsha3Úsha512Úsha256ZPY_BUILTIN_HASHLIB_HASHESc                 C   s   h | ]}|  ¡ ’qS © )Ústrip)Ú.0Úmr   r   ú'/usr/lib/python3.9/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   6   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   ÚhexstrJ   s    "r%   z(http://www.pythontest.net/hashlib/{}.txtc              	   c   s¬   t  | ¡}zt |¡}W n& ttfy>   t d |¡¡‚Y n0 |T |D ]>}| ¡ }| 	d¡sJ|sfqJ| 
d¡}t |d ¡|d< |V  qJW d   ƒ n1 sž0    Y  d S )Nz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_vectorsU   s    

r2   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 d°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„ ƒZZedždŸ„ ƒZ[ed d¡„ ƒZ\ed¢d£„ ƒZ]ed¤d¥„ ƒZ^d¦d§„ Z_e`jad¨d©„ ƒZbdªd«„ Zce* deed1ud¬¡d­d®„ ƒZf‡  ZgS )±Ú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   sR   zt  |¡W S  tyL } z(| jr8|tv r8t d| ¡ W Y d}~n
d}~0 0 dS )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_moduler   s    $z*HashLibTestCase._conditional_import_modulec              	      s  t ƒ }ˆ jD ]}| | ¡ ¡ qˆ  d¡}|r<| ddh¡ i ˆ _|D ] }trZ| d¡rZqFt ƒ ˆ j|< qFˆ j 	¡ D ]0\}}| t
t|ƒ¡ d |fdd„}| |¡ qrˆ  d¡}|ˆ _|r,ˆ  t|dƒ¡ ˆ  t|d	ƒ¡ ˆ j 	¡ D ]F\}}t
|d
| d ƒ}	|	räz
|	ƒ  W n ty   Y qä0 | |	¡ qä‡ fdd„}
ˆ  d¡}|rP|
dƒ ˆ  d¡}|rh|
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Ú_blake2r8   r9   Z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©rH   r   r   Úadd_builtin_constructor¦   s    z9HashLibTestCase.__init__.<locals>.add_builtin_constructorÚ_md5r	   Ú_sha1r   Ú_sha256r5   r   Ú_sha512r7   r
   Ú_sha3r:   r;   r<   r=   r>   r?   )ÚsetÚsupported_hash_namesrV   ÚlowerrK   ÚupdaterU   Ú	SKIP_SHA3r+   ÚitemsrT   r   r   Ú
assertTrueÚhasattrÚ
ValueErrorÚsuperr3   Ú__init__)rH   ÚargsrP   Z
algorithmsÚ	algorithmrL   ÚconstructorsrQ   r   rX   rZ   r[   r\   r]   r^   r_   ©Ú	__class__rY   r   rj   {   sp    








zHashLibTestCase.__init__c                 C   s   | j  ¡ }tj |¡S rM   )rU   ÚvaluesÚ	itertoolsÚchainÚfrom_iterable)rH   rm   r   r   r   Úhash_constructorsÈ   s    
z!HashLibTestCase.hash_constructorsc                 C   s   t ƒ S rM   )r   rY   r   r   r   Úis_fips_modeÍ   s    zHashLibTestCase.is_fips_modec                 C   sL   t   dtdƒ¡}| jD ]0}||dd}|j| jv r>| d¡ q| ¡  qd S )NÚbé
   F©Zusedforsecurityé   )ÚarrayÚrangert   rW   ÚshakesÚ	hexdigest)rH   Ú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 rM   )Úislower)r   Z_algor   r   r   Ú	<genexpr>Ü   s   ÿz=HashLibTestCase.test_algorithms_guaranteed.<locals>.<genexpr>)ÚassertEqualr   Úalgorithms_guaranteedr`   ra   rY   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	undefinedFrx   )rf   r`   r   r…   ÚissubsetÚalgorithms_availableÚassertNotInrN   )rH   rW   Ú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r‚| jjddd | jjdd d S )Nr   Trx   zskip in FIPS modeó    r	   )r   rN   ru   ÚskipTestrt   r	   r   rR   ©rH   r   r   r   r   Útest_usedforsecurity_trueç   s    



z)HashLibTestCase.test_usedforsecurity_truec                 C   sv   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rr| jjddd | jjdd d S )Nr   Frx   rŒ   r	   )r   rN   rt   r	   r   rR   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   rN   Ú	TypeErrorrY   r   r   r   Útest_unknown_hashÿ   s    z!HashLibTestCase.test_unknown_hashc                 C   s   |   t d¡jd¡ d S )Nr6   r   )r„   r   rN   rW   rY   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yJ   |  d¡ Y n0 d tjd< | 	¡  z0|  t|d¡ W dt
ƒ v r†|tjd< q°tjd= n dt
ƒ v r¦|tjd< ntjd= 0 |  t|d¡ |dƒ}|  ||j¡ |  t|ƒd	dg¡ d S )
NrS   Z__builtin_constructor_cacheÚtestr   z_md5 module not availabler[   r	   é   r4   )rT   r   r’   rh   r[   ÚImportErrorr   ÚsysÚmodulesÚclearÚlocalsr“   ZassertIsr	   r„   Úsorted)rH   Zget_builtin_constructorZbuiltin_constructor_cacher[   rX   r   r   r   Útest_get_builtin_constructor  s2    ÿÿ


ý

z,HashLibTestCase.test_get_builtin_constructorc                 C   s~   | j D ]r}|dd}|j| jv rP|  | d¡t¡ |  t| d¡ƒ| d¡¡ q|  | ¡ t¡ |  t| ¡ ƒ| ¡ ¡ qd S )NFrx   ry   )	rt   rW   r|   ÚassertIsInstancerŠ   r   r„   r%   r}   ©rH   r   r"   r   r   r   Útest_hexdigest   s    

zHashLibTestCase.test_hexdigestc                 C   s    d}| j D ]}|dd}|j| jvr&q
td ur:t|tƒr:q
|j|jfD ]R}|  t|d¡ |D ]:}|  tt	f¡ ||ƒ W d   ƒ q\1 sŒ0    Y  q\qFq
d S )N)i    l   öÿ l   
    l            l   öÿÿÿ l   
        Frx   iöÿÿÿ)
rt   rW   r|   r   r   rŠ   r}   r’   rh   ÚOverflowError)rH   Zlarge_sizesr   r"   rŠ   Úlengthr   r   r   Útest_digest_length_overflow*  s    

z+HashLibTestCase.test_digest_length_overflowc                 C   sr   | j D ]f}|dd}|  |jt¡ |j| jv r@|  |j| j¡ n|  |j| j¡ |  |jtj	|jddj¡ qd S )NFrx   )
rt   rŸ   rW   Ústrra   ÚassertInr‰   r„   r   rN   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   ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFrx   )ry   r   )rt   rc   rW   r|   r„   rŠ   Úcopy)rH   ZaasZbeesZceesZdeesr   Zm1rk   Zm2Zm3Zm4Z	m4_digestZm4_copyr   r   r   Útest_large_updateG  s0    







z!HashLibTestCase.test_large_updateFc                 K   sÄ   t |ƒd }| ¡ }| j| }|  t |ƒd¡ |D ]Œ}||fi |¤Ž}	|sR|	 ¡ n|	 |¡}
|  |
|d|||
t |ƒ|f ¡ |sˆ|	 ¡ n|	 |¡}
t |¡}|  |
|¡ |s2|  t |ƒ|	j	¡ q2d S )Né   zrHash algorithm %s constructed using %s returned hexdigest %r for %d byte input data that should have hashed to %r.)
Úlenrb   rU   ZassertGreaterEqualr}   r„   rŠ   r   r-   Údigest_size)rH   rW   rO   r}   ZshakerP   r£   rm   Úhash_object_constructorr   ZcomputedrŠ   r   r   r   Úcheckg  s(    

ÿþþ
zHashLibTestCase.checkc                 C   s&   | j | }|D ]}|  t|d¡ qd S )NZspam)rU   r’   r“   )rH   Zalgorithm_namerm   r­   r   r   r   Úcheck_no_unicode|  s    
z HashLibTestCase.check_no_unicodec                 C   s@   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nr	   r   r5   r   r7   r
   ©r¯   rY   r   r   r   Útest_no_unicode‚  s    




zHashLibTestCase.test_no_unicodec                 C   s   |   d¡ |   d¡ d S )Nr8   r9   r°   rY   r   r   r   Útest_no_unicode_blake2Š  s    
z&HashLibTestCase.test_no_unicode_blake2c                 C   s@   |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ |   d¡ d S )Nr:   r;   r<   r=   r>   r?   r°   rY   r   r   r   Útest_no_unicode_sha3  s    




z$HashLibTestCase.test_no_unicode_sha3r   Nc                 C   sÈ   | j | }|D ]´}|dd}|  |j|¡ |  |j|¡ |rn|  t| |¡ƒ|¡ |  t| |¡ƒd| ¡ n,|  t| ¡ ƒ|¡ |  t| ¡ ƒd| ¡ |  |j|¡ |  | 	d¡d t
|ƒ¡ qd S )NFrx   rª   Ú_r   )rU   r„   Ú
block_sizer¬   r«   rŠ   r}   rW   r¦   r,   r    )rH   rW   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	   é@   ry   r   é   r5   é   r   é    r7   é€   é0   r
   ©r¶   rY   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½   rY   r   r   r   Útest_blocksize_name_sha3³  s    z(HashLibTestCase.test_blocksize_name_sha3c                 C   sl   | j | }|D ]X}|ƒ }td ur,t|tƒr,q|  || d¡ |  |j|¡ |  |j|¡ |  |j|¡ qd S )Ni@  )rU   r   r   r„   Z_capacity_bitsZ
_rate_bitsZ_suffix)rH   rW   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Æ   rY   r   r   r   Útest_extra_sha3È  s    zHashLibTestCase.test_extra_sha3c                 C   s    |   ddd¡ |   ddd¡ d S )Nr8   r»   r·   r9   rº   r½   rY   r   r   r   Útest_blocksize_name_blake2Ñ  s    z*HashLibTestCase.test_blocksize_name_blake2c                 C   s   | j ddddd d S )Nr	   rŒ   Z d41d8cd98f00b204e9800998ecf8427eFrx   ©r®   rY   r   r   r   Útest_case_md5_0Ö  s    þzHashLibTestCase.test_case_md5_0c                 C   s   | j ddddd d S )Nr	   ó   abcZ 900150983cd24fb0d6963f7d28e17f72Frx   rÎ   rY   r   r   r   Útest_case_md5_1Ü  s    þzHashLibTestCase.test_case_md5_1c                 C   s   | j ddddd d S )Nr	   s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFrx   rÎ   rY   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   s   |   dd| d¡ d S )Nr	   ó   AZ c9af2dff37468ce5dfee8f2cfc0a9c6drÎ   ©rH   rÔ   r   r   r   Útest_case_md5_hugeê  s    z"HashLibTestCase.test_case_md5_hugec                 C   s   |   dd| d¡ d S )Nr	   rÖ   Z 28138d306ff1b8281f1a9067e1a1a2b3rÎ   r×   r   r   r   Útest_case_md5_uintmaxï  s    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:   rc   r„   r}   )rH   rÔ   r"   r   r   r   Útest_sha3_update_overflowô  s    
z)HashLibTestCase.test_sha3_update_overflowc                 C   s   |   ddd¡ d S )Nr   rŒ   Z(da39a3ee5e6b4b0d3255bfef95601890afd80709rÎ   rY   r   r   r   Útest_case_sha1_0  s    ÿz HashLibTestCase.test_case_sha1_0c                 C   s   |   ddd¡ d S )Nr   rÐ   Z(a9993e364706816aba3e25717850c26c9cd0d89drÎ   rY   r   r   r   Útest_case_sha1_1  s    ÿz HashLibTestCase.test_case_sha1_1c                 C   s   |   ddd¡ d S )Nr   ó8   abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqZ(84983e441c3bd26ebaae4aa1f95129e5e54670f1rÎ   rY   r   r   r   Útest_case_sha1_2	  s    þz HashLibTestCase.test_case_sha1_2c                 C   s   |   ddd d¡ d S )Nr   ó   aé@B Z(34aa973cd4c4daa4f61eeb2bdbad27316534016frÎ   rY   r   r   r   Útest_case_sha1_3  s    ÿz HashLibTestCase.test_case_sha1_3c                 C   s   |   ddd¡ d S )Nr5   rŒ   Z8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42frÎ   rY   r   r   r   Útest_case_sha224_0  s    ÿz"HashLibTestCase.test_case_sha224_0c                 C   s   |   ddd¡ d S )Nr5   rÐ   Z823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7rÎ   rY   r   r   r   Útest_case_sha224_1  s    ÿz"HashLibTestCase.test_case_sha224_1c                 C   s   |   ddd¡ d S )Nr5   rß   Z875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525rÎ   rY   r   r   r   Útest_case_sha224_2  s    þz"HashLibTestCase.test_case_sha224_2c                 C   s   |   ddd d¡ d S )Nr5   rá   râ   Z820794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67rÎ   rY   r   r   r   Útest_case_sha224_3$  s    ÿz"HashLibTestCase.test_case_sha224_3c                 C   s   |   ddd¡ d S )Nr   rŒ   Z@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855rÎ   rY   r   r   r   Útest_case_sha256_0)  s    ÿz"HashLibTestCase.test_case_sha256_0c                 C   s   |   ddd¡ d S )Nr   rÐ   Z@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adrÎ   rY   r   r   r   Útest_case_sha256_1-  s    ÿz"HashLibTestCase.test_case_sha256_1c                 C   s   |   ddd¡ d S )Nr   rß   Z@248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1rÎ   rY   r   r   r   Útest_case_sha256_21  s    þz"HashLibTestCase.test_case_sha256_2c                 C   s   |   ddd d¡ d S )Nr   rá   râ   Z@cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0rÎ   rY   r   r   r   Útest_case_sha256_36  s    ÿz"HashLibTestCase.test_case_sha256_3c                 C   s   |   ddd¡ d S )Nr7   rŒ   Z`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95brÎ   rY   r   r   r   Útest_case_sha384_0;  s    ÿz"HashLibTestCase.test_case_sha384_0c                 C   s   |   ddd¡ d S )Nr7   rÐ   Z`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7rÎ   rY   r   r   r   Útest_case_sha384_1@  s    ÿz"HashLibTestCase.test_case_sha384_1c                 C   s   |   ddd¡ d S )Nr7   óp   abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039rÎ   rY   r   r   r   Útest_case_sha384_2E  s    ýz"HashLibTestCase.test_case_sha384_2c                 C   s   |   ddd d¡ d S )Nr7   rá   râ   Z`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985rÎ   rY   r   r   r   Útest_case_sha384_3L  s    ÿz"HashLibTestCase.test_case_sha384_3c                 C   s   |   ddd¡ d S )Nr
   rŒ   Z€cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3erÎ   rY   r   r   r   Útest_case_sha512_0R  s    ÿz"HashLibTestCase.test_case_sha512_0c                 C   s   |   ddd¡ d S )Nr
   rÐ   Z€ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49frÎ   rY   r   r   r   Útest_case_sha512_1W  s    ÿz"HashLibTestCase.test_case_sha512_1c                 C   s   |   ddd¡ d S )Nr
   rî   Z€8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909rÎ   rY   r   r   r   Útest_case_sha512_2\  s    ýz"HashLibTestCase.test_case_sha512_2c                 C   s   |   ddd d¡ d S )Nr
   rá   râ   Z€e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09brÎ   rY   r   r   r   Útest_case_sha512_3c  s    ÿ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 qdd|d  }	| jt||	d |   |j|¡ td|d ƒD ]}||d q°| 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 qf| 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)rO   )Ú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“   )rH   rX   Z	salt_sizeZperson_sizeZkey_sizer¬   Z
max_offsetr$   rö   r÷   rû   r   r   r   Úcheck_blake2h  s„    ÿ



ôzHashLibTestCase.check_blake2c                 C   sx   dd„ }|dd}|D ]X}|D ]N}|||ƒ}|||ƒ}	|||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~   rv   Úoutr$   Útr   r   r   Úselftest_seq¸  s    
z4HashLibTestCase.blake2_rfc7693.<locals>.selftest_seqrº   rø   )rû   r¬   )rc   rŠ   r}   )rH   rX   Zmd_lenZin_lenr  ZouterZoutlenZinlenZindatarû   ZunkeyedZkeyedr   r   r   Úblake2_rfc7693·  s    



zHashLibTestCase.blake2_rfc7693c                 C   sB   |   tjddddd¡ g d¢}g d¢}|  |  tj||¡d¡ d S )Nry   r·   l   ÿÿÿÿ )r¸   rº   r¼   r·   )r   r—   r»   é   r  rÉ   Z@c23a7800d98123bd10f506c61e29da5603d763b8bbad2e737f5e765a7bccd475)r  r   r8   r„   r  )rH   Z
b2b_md_lenZ
b2b_in_lenr   r   r   Útest_blake2bÍ  s    þzHashLibTestCase.test_blake2bc                 C   s   |   ddd¡ d S )Nr8   rŒ   Z€786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cerÎ   rY   r   r   r   Útest_case_blake2b_0Ö  s    ÿz#HashLibTestCase.test_case_blake2b_0c                 C   s   |   ddd¡ d S )Nr8   rÐ   Z€ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923rÎ   rY   r   r   r   Útest_case_blake2b_1Ü  s    ÿz#HashLibTestCase.test_case_blake2b_1c                 C   s*   | j ddddddddd	d
ddddd d S )Nr8   ó   fooZ 920568b0c5873b2f0ab67bedb6cf1b2bry   ó   baró   bazó   bingrª   r—   r   rÓ   é   r  T©r¬   rû   rö   r÷   rü   rý   r   r  rþ   rÿ   r  rÎ   rY   r   r   r   Ú test_case_blake2b_all_parametersâ  s    ôz0HashLibTestCase.test_case_blake2b_all_parametersc                 C   s4   t dƒD ]&\}}}t |¡}| jd|||d qd S )Nr8   rú   ©r2   r   r-   r®   ©rH   Úmsgrû   Úmdr   r   r   Útest_blake2b_vectorsô  s    
z$HashLibTestCase.test_blake2b_vectorsc                 C   sB   |   tjddddd¡ g d¢}g d¢}|  |  tj||¡d¡ d S )Né   rº   l   ÿÿÿ )ry   r¸   r¹   rº   )r   r—   r·   éA   r  rÉ   Z@6a411f08ce25adcdfb02aba641451cec53c598b24f4fc787fbdc88797f4c1dfe)r  r   r9   r„   r  )rH   Z
b2s_md_lenZ
b2s_in_lenr   r   r   Útest_blake2sú  s    þzHashLibTestCase.test_blake2sc                 C   s   |   ddd¡ d S )Nr9   rŒ   Z@69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9rÎ   rY   r   r   r   Útest_case_blake2s_0  s    ÿz#HashLibTestCase.test_case_blake2s_0c                 C   s   |   ddd¡ d S )Nr9   rÐ   Z@508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982rÎ   rY   r   r   r   Útest_case_blake2s_1  s    ÿz#HashLibTestCase.test_case_blake2s_1c                 C   s*   | j ddddddddd	d
ddddd d S )Nr9   r  Z bf2a8f7fe3c555012a6f8046e646bc75ry   r  r  r  rª   r—   r   rÓ   r  r  Tr  rÎ   rY   r   r   r   Ú test_case_blake2s_all_parameters  s    ôz0HashLibTestCase.test_case_blake2s_all_parametersc                 C   s4   t dƒD ]&\}}}t |¡}| jd|||d qd S )Nr9   rú   r  r  r   r   r   Útest_blake2s_vectors  s    
z$HashLibTestCase.test_blake2s_vectorsc                 C   s   |   ddd¡ d S )Nr:   rŒ   Z86b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7rÎ   rY   r   r   r   Útest_case_sha3_224_0%  s    ÿz$HashLibTestCase.test_case_sha3_224_0c                 C   s$   t dƒD ]\}}|  d||¡ qd S )Nr:   ©r2   r®   ©rH   r  r  r   r   r   Útest_case_sha3_224_vector*  s    z)HashLibTestCase.test_case_sha3_224_vectorc                 C   s   |   ddd¡ d S )Nr;   rŒ   Z@a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434arÎ   rY   r   r   r   Útest_case_sha3_256_0/  s    ÿz$HashLibTestCase.test_case_sha3_256_0c                 C   s$   t dƒD ]\}}|  d||¡ qd S )Nr;   r(  r)  r   r   r   Útest_case_sha3_256_vector4  s    z)HashLibTestCase.test_case_sha3_256_vectorc                 C   s   |   ddd¡ d S )Nr<   rŒ   Z`0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004rÎ   rY   r   r   r   Útest_case_sha3_384_09  s    ÿz$HashLibTestCase.test_case_sha3_384_0c                 C   s$   t dƒD ]\}}|  d||¡ qd S )Nr<   r(  r)  r   r   r   Útest_case_sha3_384_vector?  s    z)HashLibTestCase.test_case_sha3_384_vectorc                 C   s   |   ddd¡ d S )Nr=   rŒ   Z€a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26rÎ   rY   r   r   r   Útest_case_sha3_512_0D  s    ÿz$HashLibTestCase.test_case_sha3_512_0c                 C   s$   t dƒD ]\}}|  d||¡ qd S )Nr=   r(  r)  r   r   r   Útest_case_sha3_512_vectorJ  s    z)HashLibTestCase.test_case_sha3_512_vectorc                 C   s$   |   dddd¡ |   dddd¡ d S )Nr>   rŒ   Z@7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26TZ7f9crÎ   rY   r   r   r   Útest_case_shake_128_0O  s
    þz%HashLibTestCase.test_case_shake_128_0c                 C   s&   t dƒD ]\}}|  d||d¡ qd S )Nr>   Tr(  r)  r   r   r   Útest_case_shake128_vectorV  s    z)HashLibTestCase.test_case_shake128_vectorc                 C   s$   |   dddd¡ |   dddd¡ d S )Nr?   rŒ   Z@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9rÎ   rY   r   r   r   Útest_case_shake_256_0[  s
    þz%HashLibTestCase.test_case_shake_256_0c                 C   s&   t dƒD ]\}}|  d||d¡ qd S )Nr?   Tr(  r)  r   r   r   Útest_case_shake256_vectorb  s    z)HashLibTestCase.test_case_shake256_vectorc                 C   sº   d}| j D ]J}|dd}| d¡ | d| ¡ | d¡ |d| dd}| d¡ q
t ¡ }| d¡ | d| ¡ | d¡ |  | ¡ d¡ t dd|  d ¡}|  | ¡ d¡ d S )Ni   Frx   ó   1ó   #ó   xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rt   rc   r   r   r„   r}   )rH   Zgil_minsizer   r   r   r   r   Útest_gilg  s*    





þþzHashLibTestCase.test_gilc           	         sÌ   t  ¡ ‰d}d}|d ‰ t  ˆ | ¡ ¡ }‡ ‡fdd„}g }t|ƒD ]N}tˆ ƒd|  }|  |d¡ |  |t|ƒ d¡ tj||fd}| 	|¡ qD|D ]}| 
¡  q˜|D ]}| ¡  qª|  |ˆ ¡ ¡ d S )	NrÓ   s   swineflui@ c                    s4   d}|t ˆ ƒk r0ˆ ˆ |||  … ¡ || 7 }qd S r   )r«   rc   )Ú
chunk_sizeÚindex©rO   Zhasherr   r   Úhash_in_chunks’  s    z=HashLibTestCase.test_threaded_hashing.<locals>.hash_in_chunksrw   r   )Útargetrk   )r   r   r}   r{   r«   ZassertGreaterr„   Ú	threadingÚThreadÚappendÚstartÚjoin)	rH   Znum_threadsZsmallest_dataZexpected_hashr<  ÚthreadsZ	threadnumr9  Úthreadr   r;  r   Útest_threaded_hashing„  s(    ÿ

z%HashLibTestCase.test_threaded_hashingc                 C   s   | j }|d ur|  |t¡ d S rM   )ru   rŸ   Úint)rH   Z	fips_moder   r   r   Útest_get_fips_mode¨  s    z"HashLibTestCase.test_get_fips_modezneed _hashlibc                 C   sh   |   td¡ tƒ  W d   ƒ n1 s(0    Y  |   td¡ tƒ  W d   ƒ n1 sZ0    Y  d S )Nzcannot create 'HASH' instancez cannot create 'HASHXOF' instance)ÚassertRaisesRegexr“   r   r   rY   r   r   r   Útest_internal_types­  s    ÿ$ÿz#HashLibTestCase.test_internal_types)F)r   r   N)hÚ__name__Ú
__module__Ú__qualname__ra   r|   ÚosrW   ÚCOMPILED_WITH_PYDEBUGrD   rK   rj   Úpropertyrt   ru   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  r  r"  r#  r$  r%  r&  r'  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r8  r   Zreap_threadsrE  rG  Ú
skipUnlessr   rI  Ú__classcell__r   r   rn   r   r3   e   sö   	M

	
 


  ÿ



	O






















#r3   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)rW  rX  rª   N)rW  rX  é   N)s   passwordPASSWORDpasswords$   saltSALTsaltSALTsaltSALTsaltSALTsaltrY  rù   )s	   pass words   sa ltrY  ry   rŒ   ry   r‘   Z€77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906rW  s   NaClrÉ   r   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 ]â\}}||vrq
t| jƒD ]Ä\}}|\}}}	}
|| \}}|rN|}
|||||	|
ƒ}|  ||||||	|
f¡ ||t|ƒt|ƒ|	|
ƒ}|  ||¡ ||t|ƒt|ƒ|	|
ƒ}|  ||¡ |
d u r&|||||	ƒ}|  ||||||	f¡ q&q
|  td¡ |ddddƒ W d   ƒ n1 s 0    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 )Nz.*unsupported.*Úunknowns   passrX  r‘   r   s   sha1Úpassrö   r   rù   rW  )r.   Úpasswordrö   Z
iterationsÚdklen)Úpbkdf2_resultsre   Ú	enumerateÚpbkdf2_test_vectorsr„   Ú
memoryviewr	  rH  rh   r’   r“   )rH   Zpbkdf2Z	supportedZdigest_nameÚresultsr$   Zvectorr^  rö   Úroundsr_  ÚexpectedZoverwrite_dklenr  r   r   r   Ú_test_pbkdf2_hmacó  sd    ÿ

ÿ

ÿ
ÿ.
ÿÿÿÿÿÿÿzKDFTests._test_pbkdf2_hmacztest requires builtin_hashlibc                 C   s   |   tjt¡ d S rM   )rg  Úbuiltin_hashlibÚpbkdf2_hmacrE   rY   r   r   r   Útest_pbkdf2_hmac_py$  s    zKDFTests.test_pbkdf2_hmac_pyri  z   test requires OpenSSL > 1.0c                 C   s   |   tjt¡ d S rM   )rg  Úopenssl_hashlibri  r   rY   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 ]0\}}}}}}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€0    Y  |  t¡$ tjdddddd W d   ƒ n1 s¾0    Y  |  t¡ t d¡ W d   ƒ n1 sò0    Y  |  t¡ t dd¡ W d   ƒ n1 s*0    Y  |  t¡$ tjdddddd	 W d   ƒ n1 sj0    Y  d
D ]L}|  tttf¡$ tjdd|ddd W d   ƒ n1 s¸0    Y  qxdD ]L}|  tttf¡$ tjddd|dd W d   ƒ n1 s
0    Y  qÊdD ]L}|  tttf¡$ tjdddd|d W d   ƒ n1 s\0    Y  qdD ]N}|  tttf¡& tjddddd|d W d   ƒ n1 s°0    Y  qndD ]N}	|  tttf¡& tjddddd|	d W d   ƒ n1 s0    Y  qÂd S )N)rö   Únr#   ÚprW  rX  rª   r   r‘   r^  rö   rõ   )rù   r   r‘   N)rù   r   N)rù   N)rö   ro  r#   rp  Úmaxmem)rö   ro  r#   rp  r_  )Úscrypt_test_vectorsr   rm  r„   r’   r“   rh   r¢   )
rH   r^  rö   ro  r#   rp  rf  Úresultrq  r_  r   r   r   Útest_scrypt-  sB    22(,4888ÿ*ÿzKDFTests.test_scryptc                 C   s    |   dtj¡ |   dtj¡ d S )NZ
blake2b512zsha3-512)r‰   r   rˆ   rY   r   r   r   Útest_normalized_nameU  s    zKDFTests.test_normalized_name)rJ  rK  rL  rb  r   rr  r   r-   r`  rg  r*   rR  rh  rj  rT  rg   rk  rl  r   r   rt  ru  r   r   r   r   rV  º  sn   ý	ÿø
ÿÿÿÿõþþþþóê&1
ÿ
ÿ%rV  Ú__main__)4rz   Zbinasciir   r   rA   rq   rM  r™   Z	sysconfigr>  r*   rF   r–   r   Ztest.supportr   r   r   Zhttp.clientr   rg   rN  Zdefault_builtin_hashesZget_config_varrE   r   rb   r,   rk  rh  r   r   r   r   r   r˜   Ú	frozensetrL   rT  rP  r_   Zcheck_sanitizerrd   rQ  r%   r'   r2   ZTestCaser3   rV  rJ  Úmainr   r   r   r   Ú<module>	   sr   

ÿ

	      [ !
