o
    Þý°jÊ?  ã                   @   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_funcÚdbitsÚhobjÚdbytesÚdigest1Údigest2© r&   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/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 ]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   Úupdate_after_digest)r   r   r   r-   r.   r   r   )r   Úmsgr   Údig1Ú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   r7   r8   r9   )r   Úmacr   rB   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   rC   Ú	wrong_macr&   r&   r'   Útest_verify�   s
   

zBlake2Test.test_verifyc                 C   s8   | j j| jdd�}| ¡ }| |¡ |  t|jd¡ d S )NrE   r,   Ú4556)r   r   r   rB   Ú	hexverifyr-   r/   )r   r   rC   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                      rN   rO   rP   r&   rR   r&   r'   rS   «   rT   )
Úoid_variantÚdigest_bits_oidr   r   r   rQ   Ústrr-   ÚAttributeErrorr   )r   Úprefixr   r&   rR   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   Úkey_baÚ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 )
Nr[   r\   c                 S   s   t | ƒS rO   )Ú
memoryviewr1   r&   r&   r'   Ú	get_mv_roÍ   s   z-Blake2Test.test_memoryview.<locals>.get_mv_roc                 S   s   t t| ƒƒS rO   )re   r_   r1   r&   r&   r'   Ú	get_mv_rwÐ   ó   z-Blake2Test.test_memoryview.<locals>.get_mv_rwr]   r^   r   )r   r   Úreadonlyr   r   r   )
r   r   r   rf   rg   Úget_mvÚkey_mvÚdata_mvrb   rc   r&   r&   r'   Útest_memoryviewÈ   s,   



èzBlake2Test.test_memoryviewN)Ú__name__Ú
__module__Ú__qualname__r(   r0   r3   r5   r6   r:   rA   rD   rI   rL   rZ   rd   rm   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é   é@   )é    r;   i€  rs   Ú1N)	rn   ro   rp   r   r   r   r   rV   rU   r&   r&   r&   r'   rr   î   ó    rr   c                   @   rq   )ÚBlake2sTestr;   é    )é€   ru   éà   r;   Ú2N)	rn   ro   rp   r   r   r   r   rV   rU   r&   r&   r&   r'   rx   û   rw   rx   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ÚresÚ	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   Ú	dir_compsÚ	file_namerŸ   Úinit_dirÚ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—   rC   r&   r&   r'   ÚrunTest:  s
   
ýz Blake2OfficialTestVector.runTestN©rn   ro   rp   r˜   r®   r¯   r&   r&   r&   r'   r~     s    r~   c                   @   ó   e Zd ZeZdZdZdS )ÚBlake2bOfficialTestVectorr   rt   N©rn   ro   rp   r   r   rœ   r   r&   r&   r&   r'   r²   A  ó    r²   c                   @   r±   )ÚBlake2sOfficialTestVectorr   ry   N©rn   ro   rp   r   r   rœ   r   r&   r&   r&   r'   rµ   J  r´   rµ   c                   @   r}   )Ú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 )Nr€   r�   r‚   zdigest: ([0-9A-Fa-f]*)rƒ   r   )r†   r‡   rˆ   r‰   rŠ   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 )Nr„   éd   r   )r�   r2   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)rn   ro   rp   r   r   rœ   r&   r&   r&   r'   rÀ   €  ó    rÀ   c                   @   r¿   )ÚBlake2sTestVector1r   N)rn   ro   rp   r   r   rœ   r&   r&   r&   r'   rÂ   ‡  rÁ   rÂ   c                   @   r}   )Ú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 )Nr€   r�   r‚   z"digest\(([0-9]+)\): ([0-9A-Fa-f]*)rƒ   r   é   )r†   r‡   rˆ   r‰   rŠ   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 )Nr„   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   rt   Nr³   r&   r&   r&   r'   rÇ   ¼  r´   rÇ   c                   @   r±   )ÚBlake2sTestVector2r   ry   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 rO   )
r   rr   r�   r²   rÀ   rÇ   rx   rµ   rÂ   rÈ   )ÚconfigÚtestsr&   r&   r'   Ú	get_testsÎ  s   rË   Ú__main__c                   C   s   t  tƒ ¡S rO   )ÚunittestÚ	TestSuiterË   r&   r&   r&   r'   Úsuiteà  rh   rÏ   )ÚdefaultTest)!r¤   rŠ   rÍ   r¡   Úbinasciir   r   ÚCryptodome.Util.py3compatr   ÚCryptodome.Util.strxorr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Hashr   r   ÚTestCaser	   rr   rx   r~   r²   rµ   r·   rÀ   rÂ   rÃ   rÇ   rÈ   rË   rn   rÏ   Úmainr&   r&   r&   r'   Ú<module>   s8    C9		-.		ü