o
    eœA  ã                   @   sd  d dl Z d dlZd dlZd dl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mZ G dd„ dejƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZi fdd „Zed!kr°d dlZd"d#„ Zej d#d$ dS dS )%é    N)Ú	unhexlifyÚhexlify)Útobytes)Ústrxor_c)Úlist_test_cases)ÚBLAKE2bÚBLAKE2sc                   @   st   e Z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„ ZdS )Ú
Blake2Testc                 C   sæ   | j j| jd}| j j|jfD ]U}td| jd dƒD ]}||d}|  |j|d ¡ qtd| jd ƒD ]}||d}|  |j|¡ q3|d| jd ¡ }|| jd d¡ ¡ }|  ||¡ |dd| jd	 q| ¡ }|  |j| j¡ d S )
N©Údigest_bitsé   é   ©Údigest_bytesó   )Údatar   ó   Aó   5)r   Úkeyr   )	ÚBLAKE2ÚnewÚmax_bitsÚrangeÚassertEqualÚdigest_sizeÚ	max_bytesÚdigestÚupdate)ÚselfÚhÚnew_funcZdbitsZhobjZdbytesZdigest1Zdigest2© r!   úPD:\Projects\ConvertPro\env\Lib\site-packages\Crypto/SelfTest/Hash/test_BLAKE2.pyÚtest_new_positive.   s   

zBlake2Test.test_new_positivec                 C   sÂ   | j j| jd}| j j|jfD ]O}| jt|| j| jd | jt|dd | jt|| jd d | jt|dd | jt|dd | jt|| jd d | jt|| jdd	 | jt|| jdd
 qd S )Nr
   )r   r   r   r   r   é   é   Ústring©r   r   )r   r   )r   r   r   ÚassertRaisesÚ	TypeErrorr   Ú
ValueError)r   r   r    r!   r!   r"   Útest_new_negativeD   s0   þÿÿþþòzBlake2Test.test_new_negativec                 C   s(   | j jdd ¡ }|  t|ƒ| j¡ d S )Ns   abc©r   )r   r   r   r   Úlenr   )r   r   r!   r!   r"   Útest_default_digest_sizeY   s   z#Blake2Test.test_default_digest_sizec                 C   sr   ddg}| j j| jd}| |d ¡ |d ¡ | ¡ }| j j| jd}| |d |d  ¡ |  | ¡ |¡ d S )NsÈ   







































































































































































































s,  r   r   r   )r   r   r   r   r   r   )r   Úpiecesr   r   r!   r!   r"   Útest_update]   s   zBlake2Test.test_updatec                 C   s$   | j j| jd}|  t|jd¡ d S )Nr   r&   )r   r   r   r(   r)   r   )r   r   r!   r!   r"   Útest_update_negativef   s   zBlake2Test.test_update_negativec                 C   s@   | j j| jd}| ¡ }|  | ¡ |¡ |  t|tdƒƒ¡ d S )Nr   s   digest)r   r   r   r   r   Ú
assertTrueÚ
isinstanceÚtype)r   r   r   r!   r!   r"   Útest_digestj   s   zBlake2Test.test_digestc                 C   s    d}| j jd|d d… d}| ¡ }|  t|j|dd … ¡ | j jd|d ¡ }| j jd|d d… dd}|  | ¡ |¡ | |dd … ¡ |  | ¡ |¡ d S )Ns   rrrrttté   é   )r   r   T)r   r   Zupdate_after_digest)r   r   r   r(   r)   r   r   )r   Úmsgr   Zdig1Zdig2r!   r!   r"   Útest_update_after_digests   s   z#Blake2Test.test_update_after_digestc                 C   s\   | j j| jd}| ¡ }| ¡ }|  t|ƒt|ƒ¡ |  | ¡ |¡ |  t	|t
dƒƒ¡ d S )Nr
   r   )r   r   r   r   Ú	hexdigestr   r   r   r2   r3   r4   )r   Úmacr   r:   r!   r!   r"   Útest_hex_digest„   s   zBlake2Test.test_hex_digestc                 C   sB   | j j| jdd}| ¡ }| |¡ t|dƒ}|  t|j|¡ d S )Nó   4r'   éÿ   )r   r   r   r   Úverifyr   r(   r*   )r   r   r;   Z	wrong_macr!   r!   r"   Útest_verify   s
   

zBlake2Test.test_verifyc                 C   s8   | j j| jdd}| ¡ }| |¡ |  t|jd¡ d S )Nr=   r'   Z4556)r   r   r   r:   Z	hexverifyr(   r*   )r   r   r;   r!   r!   r"   Útest_hexverify—   s   
zBlake2Test.test_hexverifyc                    sš   d| j  d }| jD ](}| jj|d‰ |  ˆ j|t|d ƒ ¡ | jj|dd‰ |  t‡ fdd„¡ q
d| j	fD ]}|| jv r@q8|  t‡ fd	d„¡ q8d S )
Nz1.3.6.1.4.1.1722.12.2.Ú.r
   r   s   secret)r   r   c                      ó   ˆ j S ©N©Úoidr!   ©r   r!   r"   Ú<lambda>¦   ó    z%Blake2Test.test_oid.<locals>.<lambda>c                      rC   rD   rE   r!   rG   r!   r"   rH   «   rI   )
Úoid_variantÚdigest_bits_oidr   r   r   rF   Ústrr(   ÚAttributeErrorr   )r   Úprefixr   r!   rG   r"   Útest_oid   s   

ýzBlake2Test.test_oidc                 C   s¸   d}d}t |ƒ}t |ƒ}| jj||d}| jj||d}d|d d…< d|d d…< |  | ¡ | ¡ ¡ t |ƒ}| j ¡ }| j ¡ }| |¡ | |¡ d|d d…< |  | ¡ | ¡ ¡ d S )Nó   0000000000000000ó    ©r   r   ó   ÿr   )Ú	bytearrayr   r   r   r   r   )r   r   r   Zkey_baZdata_baÚh1Úh2r!   r!   r"   Útest_bytearray­   s    



zBlake2Test.test_bytearrayc           
      C   sâ   d}d}dd„ }dd„ }||fD ]^}||ƒ}||ƒ}| j j||d}| j j||d}	|js9d|d d	…< d|d d	…< |  | ¡ |	 ¡ ¡ ||ƒ}| j  ¡ }| j  ¡ }	| |¡ |	 |¡ |jsdd|d d	…< |  | ¡ |	 ¡ ¡ qd S )
NrP   rQ   c                 S   s   t | ƒS rD   )Ú
memoryviewr,   r!   r!   r"   Ú	get_mv_roÍ   s   z-Blake2Test.test_memoryview.<locals>.get_mv_roc                 S   s   t t| ƒƒS rD   )rX   rT   r,   r!   r!   r"   Ú	get_mv_rwÐ   ó   z-Blake2Test.test_memoryview.<locals>.get_mv_rwrR   rS   r   )r   r   Úreadonlyr   r   r   )
r   r   r   rY   rZ   Zget_mvZkey_mvZdata_mvrU   rV   r!   r!   r"   Útest_memoryviewÈ   s,   



èzBlake2Test.test_memoryviewN)Ú__name__Ú
__module__Ú__qualname__r#   r+   r.   r0   r1   r5   r9   r<   r@   rA   rO   rW   r]   r!   r!   r!   r"   r	   ,   s    		r	   c                   @   ó    e Zd ZeZdZdZdZdZdS )ÚBlake2bTesté   é@   )é    r6   i€  rc   Ú1N)	r^   r_   r`   r   r   r   r   rK   rJ   r!   r!   r!   r"   rb   î   ó    rb   c                   @   ra   )ÚBlake2sTestr6   é    )é€   re   éà   r6   Ú2N)	r^   r_   r`   r   r   r   r   rK   rJ   r!   r!   r!   r"   rh   û   rg   rh   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBlake2OfficialTestVectorc                 C   sà   d}g }t |dƒ]}t|ƒD ]O\}}| ¡ dks| d¡rqt d| |¡}|s.td| ƒ‚| d¡r=tt	| d¡ƒƒ}nd}|dkrH|}	d	}q|d	krQ|}
d
}q|}d}| 
|	|
|f¡ qW d   ƒ |S 1 siw   Y  |S )NÚinÚrtÚ ú#z%s:	([0-9A-Fa-f]*)ú&Incorrect test vector format (line %d)r   ó    r   Úhash)ÚopenÚ	enumerateÚstripÚ
startswithÚreÚmatchr*   Úgroupr   r   Úappend)r   Útest_vector_fileÚexpectedÚtest_vectorsÚtest_vector_fdÚline_numberÚlineÚresZ	bin_valueÚ
input_datar   Úresultr!   r!   r"   Ú_load_tests
  s8   ÿ
é
ÿçz$Blake2OfficialTestVector._load_testsc                 C   sš   d| j f}| j  ¡ d }d| j  | _zdd l}W n ty.   t d| j  t¡ g | _Y d S w t	j
 |j¡}t	j
 t	j
j|g|¢R Ž |¡}|  |¡| _d S )NÚHashz	-test.txtú%s testsr   ú'Warning: skipping extended tests for %s)ÚnameÚlowerÚdescriptionÚpycryptodome_test_vectorsÚImportErrorÚwarningsÚwarnÚUserWarningr€   ÚosÚpathÚdirnameÚ__file__Újoinr‡   ©r   Z	dir_compsÚ	file_namerŽ   Zinit_dirZfull_file_namer!   r!   r"   ÚsetUp(  s   
ÿüzBlake2OfficialTestVector.setUpc                 C   sB   | j D ]\}}}| jj|| jd}| |¡ |  | ¡ |¡ qd S )N)r   r   )r€   r   r   r   r   r   r   )r   r…   r   r†   r;   r!   r!   r"   ÚrunTest:  s
   
ýz Blake2OfficialTestVector.runTestN©r^   r_   r`   r‡   rš   r›   r!   r!   r!   r"   rn     s    rn   c                   @   ó   e Zd ZeZdZdZdS )ÚBlake2bOfficialTestVectorr   rd   N©r^   r_   r`   r   r   r‹   r   r!   r!   r!   r"   rž   A  ó    rž   c                   @   r   )ÚBlake2sOfficialTestVectorr   ri   N©r^   r_   r`   r   r   r‹   r   r!   r!   r!   r"   r¡   J  r    r¡   c                   @   rm   )ÚBlake2TestVector1c              	   C   s’   g }t |dƒ8}t|ƒD ]*\}}| ¡ dks| d¡rqt d|¡}|s*td| ƒ‚| tt	| 
d¡ƒƒ¡ qW d   ƒ |S 1 sBw   Y  |S )Nrp   rq   rr   zdigest: ([0-9A-Fa-f]*)rs   r   )rv   rw   rx   ry   rz   r{   r*   r}   r   r   r|   )r   r~   r€   r   r‚   rƒ   r„   r!   r!   r"   r‡   U  s    ÿø
ÿ
ö
zBlake2TestVector1._load_testsc                 C   ó   d| j f}d}d| j  | _zdd l}W n ty)   t d| j  t¡ g | _Y d S w tj	 
|j¡}tj	 tj	j|g|¢R Ž |¡}|  |¡| _d S )Nrˆ   ztv1.txtr‰   r   rŠ   ©r‹   r   rŽ   r   r   r‘   r’   r€   r“   r”   r•   r–   r—   r‡   r˜   r!   r!   r"   rš   c  ó   
ÿüzBlake2TestVector1.setUpc                 C   s^   | j D ])}t|ƒ}d}tdƒD ]}| jj|d}| |¡ | ¡ | }q|  | ¡ |¡ qd S )Nrt   éd   r   )r€   r-   r   r   r   r   r   r   )r   Útvr   Ú	next_dataÚ_r   r!   r!   r"   r›   t  s   

ùzBlake2TestVector1.runTestNrœ   r!   r!   r!   r"   r£   S  s    r£   c                   @   ó   e Zd ZeZdZdS )ÚBlake2bTestVector1r   N)r^   r_   r`   r   r   r‹   r!   r!   r!   r"   r¬   €  ó    r¬   c                   @   r«   )ÚBlake2sTestVector1r   N)r^   r_   r`   r   r   r‹   r!   r!   r!   r"   r®   ‡  r­   r®   c                   @   rm   )ÚBlake2TestVector2c           	      C   s¨   g }t |dƒC}t|ƒD ]5\}}| ¡ dks| d¡rqt d|¡}|s*td| ƒ‚t| d¡ƒ}t	t
| d¡ƒƒ}| ||f¡ qW d   ƒ |S 1 sMw   Y  |S )Nrp   rq   rr   z"digest\(([0-9]+)\): ([0-9A-Fa-f]*)rs   r   é   )rv   rw   rx   ry   rz   r{   r*   Úintr|   r   r   r}   )	r   r~   r€   r   r‚   rƒ   r„   Úkey_sizer†   r!   r!   r"   r‡     s$   ÿ÷
ÿõzBlake2TestVector2._load_testsc                 C   r¤   )Nrˆ   ztv2.txtr‰   r   rŠ   r¥   r˜   r!   r!   r"   rš   Ÿ  r¦   zBlake2TestVector2.setUpc                 C   sb   | j D ]+\}}d}tdƒD ]}| jj| jd| d}| |¡ | ¡ | }q|  | ¡ |¡ qd S )Nrt   r§   r   r'   )r€   r   r   r   r   r   r   r   )r   r²   r†   r©   rª   r   r!   r!   r"   r›   °  s   
ÿ
ùzBlake2TestVector2.runTestNrœ   r!   r!   r!   r"   r¯   Ž  s    r¯   c                   @   r   )ÚBlake2bTestVector2r   rd   NrŸ   r!   r!   r!   r"   r³   ¼  r    r³   c                   @   r   )ÚBlake2sTestVector2r   ri   Nr¢   r!   r!   r!   r"   r´   Å  r    r´   c                 C   sh   g }|t tƒ7 }| tƒ ¡ | tƒ ¡ | tƒ ¡ |t tƒ7 }| tƒ ¡ | tƒ ¡ | t	ƒ ¡ |S rD   )
r   rb   r}   rž   r¬   r³   rh   r¡   r®   r´   )ÚconfigÚtestsr!   r!   r"   Ú	get_testsÎ  s   r·   Ú__main__c                   C   s   t  tƒ ¡S rD   )ÚunittestZ	TestSuiter·   r!   r!   r!   r"   Úsuiteà  r[   rº   )ZdefaultTest)!r“   rz   r¹   r   Úbinasciir   r   ZCrypto.Util.py3compatr   ZCrypto.Util.strxorr   ZCrypto.SelfTest.st_commonr   ZCrypto.Hashr   r   ZTestCaser	   rb   rh   rn   rž   r¡   r£   r¬   r®   r¯   r³   r´   r·   r^   rº   Úmainr!   r!   r!   r"   Ú<module>   s8    C9		-.		ü