U
    Š¾úgÊ?  ã                   @   sb  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 )%é    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 ]ª}td| jd dƒD ] }||d}|  |j|d ¡ q4td| jd ƒD ]}||d}|  |j|¡ qf|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!   úH/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/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 ]ž}| 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   s.    þÿÿþþ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 ]P}| jj|d‰ |  ˆ j|t|d ƒ ¡ | jj|dd‰ |  t‡ fdd„¡ qd| j	fD ]$}|| jkr€qp|  t‡ fd	d„¡ qpd S )
Nz1.3.6.1.4.1.1722.12.2.Ú.r
   r   s   secret)r   r   c                      s   ˆ j S ©N©Úoidr!   ©r   r!   r"   Ú<lambda>¦   ó    z%Blake2Test.test_oid.<locals>.<lambda>c                      s   ˆ j S rC   rD   r!   rF   r!   r"   rG   «   rH   )
Úoid_variantÚdigest_bits_oidr   r   r   rE   Ústrr(   ÚAttributeErrorr   )r   Úprefixr   r!   rF   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srd|d d	…< d|d d	…< |  | ¡ |	 ¡ ¡ ||ƒ}| j  ¡ }| j  ¡ }	| |¡ |	 |¡ |jsÈd|d d	…< |  | ¡ |	 ¡ ¡ q d S )
NrO   rP   c                 S   s   t | ƒS rC   )Ú
memoryviewr,   r!   r!   r"   Ú	get_mv_roÍ   s    z-Blake2Test.test_memoryview.<locals>.get_mv_roc                 S   s   t t| ƒƒS rC   )rW   rS   r,   r!   r!   r"   Ú	get_mv_rwÐ   s    z-Blake2Test.test_memoryview.<locals>.get_mv_rwrQ   rR   r   )r   r   Úreadonlyr   r   r   )
r   r   r   rX   rY   Zget_mvZkey_mvZdata_mvrT   rU   r!   r!   r"   Útest_memoryviewÈ   s*    



zBlake2Test.test_memoryviewN)Ú__name__Ú
__module__Ú__qualname__r#   r+   r.   r0   r1   r5   r9   r<   r@   rA   rN   rV   r[   r!   r!   r!   r"   r	   ,   s   		r	   c                   @   s    e Zd ZeZdZdZdZdZdS )ÚBlake2bTesté   é@   )é    r6   i€  r`   Ú1N)	r\   r]   r^   r   r   r   r   rJ   rI   r!   r!   r!   r"   r_   î   s
   r_   c                   @   s    e Zd ZeZdZdZdZdZdS )ÚBlake2sTestr6   é    )é€   rb   éà   r6   Ú2N)	r\   r]   r^   r   r   r   r   rJ   rI   r!   r!   r!   r"   rd   û   s
   rd   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBlake2OfficialTestVectorc              	   C   sÊ   d}g }t |dƒ®}t|ƒD ]ž\}}| ¡ dks| d¡r<qt d| |¡}|s\td| ƒ‚| d¡rztt	| d¡ƒƒ}nd}|dkr|}	d	}q|d	kr¢|}
d
}q|}d}| 
|	|
|f¡ qW 5 Q R X |S )NÚinÚrtÚ ú#z%s:	([0-9A-Fa-f]*)ú&Incorrect test vector format (line %d)r   rH   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
  s0    ÿ
z$Blake2OfficialTestVector._load_testsc                 C   sš   d| j f}| j  ¡ d }d| j  | _zdd l}W n. tk
r^   t d| j  t¡ g | _Y d S X t	j
 |j¡}t	j
 t	j
j|f|žŽ |¡}|  |¡| _d S )NÚHashz	-test.txtú%s testsr   ú'Warning: skipping extended tests for %s)ÚnameÚlowerÚdescriptionÚpycryptodome_test_vectorsÚImportErrorÚwarningsÚwarnÚUserWarningrz   Ú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 ]6\}}}| jj|| jd}| |¡ |  | ¡ |¡ qd S )N)r   r   )rz   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"   ri     s   ri   c                   @   s   e Zd ZeZdZdZdS )ÚBlake2bOfficialTestVectorr   ra   N©r\   r]   r^   r   r   r…   r   r!   r!   r!   r"   r—   A  s   r—   c                   @   s   e Zd ZeZdZdZdS )ÚBlake2sOfficialTestVectorr   re   N©r\   r]   r^   r   r   r…   r   r!   r!   r!   r"   r™   J  s   r™   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBlake2TestVector1c              	   C   s|   g }t |dƒd}t|ƒD ]T\}}| ¡ dks| d¡r8qt d|¡}|sTtd| ƒ‚| tt	| 
d¡ƒƒ¡ qW 5 Q R X |S )Nrk   rl   rm   zdigest: ([0-9A-Fa-f]*)rn   r   )rp   rq   rr   rs   rt   ru   r*   rw   r   r   rv   )r   rx   rz   r{   r|   r}   r~   r!   r!   r"   r   U  s    ÿ$zBlake2TestVector1._load_testsc                 C   s   d| j f}d}d| j  | _zdd l}W n. tk
rT   t d| j  t¡ g | _Y d S X tj	 
|j¡}tj	 tj	j|f|žŽ |¡}|  |¡| _d S )Nr‚   ztv1.txtrƒ   r   r„   ©r…   r‡   rˆ   r‰   rŠ   r‹   rŒ   rz   r   rŽ   r   r   r‘   r   r’   r!   r!   r"   r”   c  s    
ÿzBlake2TestVector1.setUpc                 C   s^   | j D ]R}t|ƒ}d}tdƒD ](}| jj|d}| |¡ | ¡ | }q|  | ¡ |¡ qd S )NrH   éd   r   )rz   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                   @   s   e Zd ZeZdZdS )ÚBlake2bTestVector1r   N)r\   r]   r^   r   r   r…   r!   r!   r!   r"   r¡   €  s   r¡   c                   @   s   e Zd ZeZdZdS )ÚBlake2sTestVector1r   N)r\   r]   r^   r   r   r…   r!   r!   r!   r"   r¢   ‡  s   r¢   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚBlake2TestVector2c           	   	   C   s’   g }t |dƒz}t|ƒD ]j\}}| ¡ dks| d¡r8qt d|¡}|sTtd| ƒ‚t| d¡ƒ}t	t
| d¡ƒƒ}| ||f¡ qW 5 Q R X |S )Nrk   rl   rm   z"digest\(([0-9]+)\): ([0-9A-Fa-f]*)rn   r   é   )rp   rq   rr   rs   rt   ru   r*   Úintrv   r   r   rw   )	r   rx   rz   r{   r|   r}   r~   Úkey_sizer€   r!   r!   r"   r     s    ÿzBlake2TestVector2._load_testsc                 C   s   d| j f}d}d| j  | _zdd l}W n. tk
rT   t d| j  t¡ g | _Y d S X tj	 
|j¡}tj	 tj	j|f|žŽ |¡}|  |¡| _d S )Nr‚   ztv2.txtrƒ   r   r„   rœ   r’   r!   r!   r"   r”   Ÿ  s    
ÿzBlake2TestVector2.setUpc                 C   sb   | j D ]V\}}d}tdƒD ]0}| jj| jd| d}| |¡ | ¡ | }q|  | ¡ |¡ qd S )NrH   r   r   r'   )rz   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                   @   s   e Zd ZeZdZdZdS )ÚBlake2bTestVector2r   ra   Nr˜   r!   r!   r!   r"   r§   ¼  s   r§   c                   @   s   e Zd ZeZdZdZdS )ÚBlake2sTestVector2r   re   Nrš   r!   r!   r!   r"   r¨   Å  s   r¨   c                 C   sh   g }|t tƒ7 }| tƒ ¡ | tƒ ¡ | tƒ ¡ |t tƒ7 }| tƒ ¡ | tƒ ¡ | t	ƒ ¡ |S rC   )
r   r_   rw   r—   r¡   r§   rd   r™   r¢   r¨   )ÚconfigÚtestsr!   r!   r"   Ú	get_testsÎ  s    r«   Ú__main__c                   C   s   t  tƒ ¡S rC   )ÚunittestZ	TestSuiter«   r!   r!   r!   r"   Úsuiteà  s    r®   )ZdefaultTest)!r   rt   r­   rŠ   Úbinasciir   r   ZCryptodome.Util.py3compatr   ZCryptodome.Util.strxorr   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Hashr   r   ZTestCaser	   r_   rd   ri   r—   r™   r›   r¡   r¢   r£   r§   r¨   r«   r\   r®   Úmainr!   r!   r!   r"   Ú<module>   s4    C9		-.		
