o
    5h?                     @   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rd 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&   t/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   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   Crypto.Util.py3compatr   Crypto.Util.strxorr   Crypto.SelfTest.st_commonr   Crypto.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		-.		