o
    HXh                     @   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re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re
5  dS dS )%    N)	unhexlify)support)_4G
bigmemtest)import_fresh_module)threading_helper)warnings_helper)HTTPExceptionZgettotalrefcount>   Zsha3sha512sha1Zblake2md5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   s6   d}d}| D ]}|||d? d@  ||d@   7 }q|S )NZ0123456789abcdef       r   )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splitbytesfromhex)	hash_nameurlZtestdatalinepartsr   r   r   read_vectorsS   s"   

"r3   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dd&d'Zd(d) Zd*d+ Zed,d- Zed.d/ Z 	0	1dd2d3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dd ZLedd ZMedd ZNedd ZOedd ZPedd ZQedd ZRedd ZSedd ZTedd ZUedd ZVedd ZWedd ZXedd ZYedd ZZdd Z[dd Z\dd Z]dd Z^dd Z_e`jadd Zbdd Zcedjedd Zfe*gehd1uddd Zidd 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_256r?   r@   posixc              
   C   sn   	 zt |W S  ty6 } 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 )Nz%Did a C extension fail to compile? %s)	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 }	|	rz|	  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_blake2r9   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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_namesrX   lowerrL   updaterW   	SKIP_SHA3r+   itemsrV   r   r   
assertTruehasattr
ValueErrorsuperr4   __init__)rI   argsrR   Z
algorithms	algorithmrM   constructorsrS   r   rZ   r\   r]   r^   r_   r`   ra   	__class__r[   r   rl   y   st   









zHashLibTestCase.__init__c                 C   s   | j  }tj|S rO   )rW   values	itertoolschainfrom_iterable)rI   ro   r   r   r   hash_constructors   s   
z!HashLibTestCase.hash_constructorsc                 C   s   t  S rO   )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rangerv   rY   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 rO   )islower)r   Z_algor   r   r   	<genexpr>   s    z=HashLibTestCase.test_algorithms_guaranteed.<locals>.<genexpr>)assertEqualr   algorithms_guaranteedrb   rc   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	undefinedFrz   )rh   rb   r   r   issubsetalgorithms_availableassertNotInrP   )rI   rY   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   Trz   zskip in FIPS mode    r   )r   rP   rw   skipTestrv   r   r   rT   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   Frz   r   r   )r   rP   rv   r   r   rT   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   )assertRaisesrj   r   rP   	TypeErrorr[   r   r   r   test_unknown_hash   s   z!HashLibTestCase.test_unknown_hashc                 C   s   |  tdjd d S )Nr7   r   )r   r   rP   rY   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 )
NrU   Z__builtin_constructor_cachetestr   z_md5 module not availabler]   r      r5   )rV   r   r   rj   r]   ImportErrorr   sysmodulesclearlocalsr   ZassertIsr   r   sorted)rI   Zget_builtin_constructorZbuiltin_constructor_cacher]   rZ   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 )NFrz   r{   )	rv   rY   r~   assertIsInstancer   r-   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    n1 sFw   Y  q.q#qd S )N)i    l    l   
    l            l    l   
        Frz   i)
rv   rY   r~   r   
isinstancer   r   r   rj   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 )NFrz   )
rv   r   rY   strrc   assertInr   r   r   rP   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   ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddFrz   )r{   r   )rv   re   rY   r~   r   r   copy)rI   ZaasZbeesZceesZdeesr   Zm1rm   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.)
lenrd   rW   ZassertGreaterEqualr   r   r   r-   r.   digest_size)rI   rY   rQ   r   shakerR   r   ro   hash_object_constructorr   Zcomputedr   r   r   r   checke  s,   


zHashLibTestCase.checkc                 C   s&   | j | }|D ]	}| t|d qd S )NZspam)rW   r   r   )rI   Zalgorithm_namero   r   r   r   r   check_no_unicodez  s   
z HashLibTestCase.check_no_unicodec                 C   @   |  d |  d |  d |  d |  d |  d d S )Nr   r   r6   r   r8   r
   r   r[   r   r   r   test_no_unicode  s   




zHashLibTestCase.test_no_unicodec                 C   s   |  d |  d d S )Nr9   r:   r   r[   r   r   r   test_no_unicode_blake2  s   
z&HashLibTestCase.test_no_unicode_blake2c                 C   r   )Nr;   r<   r=   r>   r?   r@   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 )NFrz   r   _r   )rW   r   
block_sizer   r   r   r   rY   r   r,   repr)rI   rY   r   r   Zdigest_lengthro   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      r6      r       r8      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   r?      r   r@   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@  )rW   r   r   r   Z_capacity_bitsZ
_rate_bitsZ_suffix)rI   rY   ZcapacityZratesuffixro   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   r[   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   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 d41d8cd98f00b204e9800998ecf8427eFrz   r   r[   r   r   r   test_case_md5_0     
zHashLibTestCase.test_case_md5_0c                 C   r   )Nr      abcZ 900150983cd24fb0d6963f7d28e17f72Frz   r   r[   r   r   r   test_case_md5_1  r   zHashLibTestCase.test_case_md5_1c                 C   r   )Nr   s>   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Z d174ab98d277d9f5a5611c2c9f419d9fFrz   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   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   s6   	 t  }|d |dd  | | d d S )N       Z880762e8ce6700f114fec0f621fd97c4b9c00147fa052215294cceeed)r   r;   re   r   r   )rI   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   )Nr6   r   Z8d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42fr   r[   r   r   r   test_case_sha224_0  r   z"HashLibTestCase.test_case_sha224_0c                 C   r   )Nr6   r   Z823097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7r   r[   r   r   r   test_case_sha224_1  r   z"HashLibTestCase.test_case_sha224_1c                 C   r   )Nr6   r   Z875388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525r   r[   r   r   r   test_case_sha224_2  r   z"HashLibTestCase.test_case_sha224_2c                 C   r   )Nr6   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   )Nr8   r   Z`38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95br   r[   r   r   r   test_case_sha384_09  r   z"HashLibTestCase.test_case_sha384_0c                 C   r   )Nr8   r   Z`cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7r   r[   r   r   r   test_case_sha384_1>  r   z"HashLibTestCase.test_case_sha384_1c                 C   r   )Nr8   p   abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstuZ`09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039r   r[   r   r   r   test_case_sha384_2C     z"HashLibTestCase.test_case_sha384_2c                 C   r   )Nr8   r   r   Z`9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b07b8b3dc38ecc4ebae97ddd87f3d8985r   r[   r   r   r   test_case_sha384_3J  r   z"HashLibTestCase.test_case_sha384_3c                 C   r   )Nr
   r   Zcf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3er   r[   r   r   r   test_case_sha512_0P  r   z"HashLibTestCase.test_case_sha512_0c                 C   r   )Nr
   r   Zddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49fr   r[   r   r   r   test_case_sha512_1U  r   z"HashLibTestCase.test_case_sha512_1c                 C   r   )Nr
   r   Z8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909r   r[   r   r   r   test_case_sha512_2Z  r   z"HashLibTestCase.test_case_sha512_2c                 C   r   )Nr
   r   r   Ze718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09br   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 qd|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)rQ   )stringr      r      T)r  r  r  r   r  r  r  r  r  r  	last_node)r   Z	SALT_SIZEr}   r   rj   ZPERSON_SIZEZMAX_DIGEST_SIZEZMAX_KEY_SIZEr   r   r   )rI   rZ   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   rx   outr#   tr   r   r   selftest_seq  s   
z4HashLibTestCase.blake2_rfc7693.<locals>.selftest_seqr   r  )r  r   )re   r   r   )rI   rZ   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   r9   r   r  )rI   Z
b2b_md_lenZ
b2b_in_lenr   r   r   test_blake2b     zHashLibTestCase.test_blake2bc                 C   r   )Nr9   r   Z786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2cer   r[   r   r   r   test_case_blake2b_0     z#HashLibTestCase.test_case_blake2b_0c                 C   r   )Nr9   r   Zba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923r   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 )Nr9      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 )Nr9   r
  r3   r-   r.   r   rI   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  )rI   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;   r3   r   rI   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   Za69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26r   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 )Nr?   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 )Nr?   Tr@  rA  r   r   r   test_case_shake128_vectorS     z)HashLibTestCase.test_case_shake128_vectorc                 C   rJ  )Nr@   r   Z@46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fTZ46b9r   r[   r   r   r   test_case_shake_256_0W  rL  z%HashLibTestCase.test_case_shake_256_0c                 C   rM  )Nr@   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   Frz      1   #   xZ@1cfceca95989f51f658e3f3ffe7f1cd43726c9e088c13ee10b46f57cef135b94)rv   re   r   r   r   r   )rI   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   re   )
chunk_sizeindexrQ   Zhasherr   r   hash_in_chunks  s
   z=HashLibTestCase.test_threaded_hashing.<locals>.hash_in_chunksry   r   )targetrm   )r   r   r   r}   r   ZassertGreaterr   	threadingThreadappendstartjoin)	rI   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 rO   )rw   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    n1 s;w   Y  qqd S )N)rN   r   Zblake)rZ   )rW   rg   r+   rj   subTestr   check_disallow_instantiationtype)rI   rn   ro   rZ   r!   r   r   r   test_disallow_instantiation  s   

z+HashLibTestCase.test_disallow_instantiationzneed _hashlibc                 C   s   t | t t | t d S rO   )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)rW   rg   rg  rj   re  assertRaisesRegexr   value)rI   rn   ro   rZ   rj  r   r   r   test_readonly_types  s    z#HashLibTestCase.test_readonly_types)F)r   r   N)l__name__
__module____qualname__rc   r~   osrY   COMPILED_WITH_PYDEBUGrE   rL   rl   propertyrv   rw   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   rp   r   r4   c   s    	M

	

 





	O


















#

r4   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   Z77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906r{  s   NaClr   r7  Zfdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640s   pleaseletmeins   SodiumChloridei @  Z7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887Z(0c60c80f961f0e71f3a9b524af6012062fe037a6NZ(ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957Z(4b007901b765489abead49d926f721d065a429c1Z23d2eec4fe41c849b80c8d83662c0e44a8b291a964cf2f07038   Z 56fa6aa75548099dcc37d7f03425e0c3Z@120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17bZ@ae4d0c95af6b46d32d0adff928f06dd02a303f8ef3c251dfd6e2d85a95474c43Z@c5e478d59288c841aa530db6845c4c8d962893a001ce4e11a4963873aa98134aZP348c89dbcbd32b2f32d814b8116e84cf2b17347ebc1800181c4e2a1fb8dd53e1c635518c7dac47e9(   Z 89b69d0516f829893c696226650a8687Z867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fceZe1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4eZd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5Z8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8r   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{  )r/   passwordr  Z
iterationsdklen)pbkdf2_resultsrg   	enumeratepbkdf2_test_vectorsr   
memoryviewr  rk  rj   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 rO   )r   Zcheck_warningsr  builtin_hashlibpbkdf2_hmacrF   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 rO   )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 sw   Y  | t tjdddddd	 W d    n1 sw   Y  d
D ]$}| tttf tjdd|ddd W d    n1 sw   Y  qdD ]%}| tttf tjddd|dd W d    n	1 sw   Y  qd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   rj   r   )
rI   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-   r.   r  r  r*   rv  r  r  rx  ri   r  r  r   r   r  r  r   r   r   r   rz    sp    	
&1

%rz  __main__)6r|   Zbinasciir   r   rB   rs   rq  r   Z	sysconfigr[  r*   rG   r   r   Ztest.supportr   r   Ztest.support.import_helperr   r   r   Zhttp.clientr	   ri   rr  Zdefault_builtin_hashesZget_config_varrF   r   rd   r,   r  r  r   r   r   r   r   r   	frozensetrM   rx  rt  Zcheck_sanitizerrf   ru  r$   r'   r3   ZTestCaser4   rz  rn  mainr   r   r   r   <module>   sx   

	      n $