o
    .ѹg?                     @   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_funcZdbitsZhobjZdbytesZdigest1Zdigest2 r!   d/Users/admin/.pyenv/versions/3.10.0/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   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   Z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		-.		