U
    ÈZj¤C  ã                   @   sú   d Z ddlZddlmZmZmZ ddlmZ ddlm	Z	 G dd„ dƒZ
e
fdd	„ZG d
d„ dejƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZeƒ fdd„Zdd„ ZdS )z&Self-testing for PyCrypto hash modulesé    N)Úa2b_hexÚb2a_hexÚhexlify)Úb)Ústrxor_cc                   @   s   e Zd ZdS )Ú
_NoDefaultN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú`/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Cipher/common.pyr   !   s    r   c                 C   s:   z| | }W n" t k
r.   |tkr&‚ | Y S X | |= |S )zAGet an item from a dictionary, and remove it from the dictionary.)ÚKeyErrorr   )ÚdÚkÚdefaultÚretvalr   r   r   Ú_extract"   s    
r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚCipherSelfTestc                 C   s:  t j | ¡ || _| ¡ }t|dƒ| _tt|dƒƒ| _tt|dƒƒ| _	tt|dƒƒ| _
t|dd ƒ| _t|dd ƒ| _t|dd ƒ| _| jr’t| jƒ| _t|dd ƒ}t|ƒ| _|d k	�rt| jd	| ƒ| _t|d
d ƒ| _| jd krêt|dd ƒ| _| jd k	�r0t| jƒ| _n,d | _t|d
d ƒ| _| jd k	�r0t| jƒ| _|| _d S ©NÚdescriptionÚkeyÚ	plaintextÚ
ciphertextÚmodule_nameÚ
assoc_dataÚmacÚmodeÚMODE_ÚivÚnonce©ÚunittestÚTestCaseÚ__init__ÚmoduleÚcopyr   r   r   r   r   r   r   r   r   ÚstrÚ	mode_nameÚgetattrr   r   Úextra_params©Úselfr$   Úparamsr   r   r   r   r#   0   s4    


zCipherSelfTest.__init__c                 C   s   | j S ©N)r   ©r+   r   r   r   ÚshortDescriptionV   s    zCipherSelfTest.shortDescriptionc                 C   sX   | j  ¡ }t| jƒ}g }| jd k	r*| jg}| jd k	rD|t| jƒg7 }| jj|f|ž|ŽS r-   ©r)   r%   r   r   r   r   r$   Únew©r+   r,   r   Z	old_styler   r   r   Ú_newY   s    



zCipherSelfTest._newc                 C   s*   t | jd| ƒsdS | jt| jd| ƒkS )Nr   F)Úhasattrr$   r   r(   )r+   Únamer   r   r   ÚisModee   s    zCipherSelfTest.isModec                 C   s  t | jƒ}t | jƒ}g }| jr.dd„ | jD ƒ}d }d }tdƒD ]t}|  ¡ }|  ¡ }|D ]}	| |	¡ | |	¡ qVt| |¡ƒ}
t| 	|¡ƒ}|r¨|  
||
¡ |  
||¡ |
| }}q>|  
| j|¡ |  
| j|¡ | j�rt| ¡ ƒ}|  
| j|¡ | t | jƒ¡ d S )Nc                 S   s   g | ]}t t|ƒƒ‘qS r   )r   r   ©Ú.0Úxr   r   r   Ú
<listcomp>o   s     z*CipherSelfTest.runTest.<locals>.<listcomp>é   )r   r   r   r   Úranger3   Úupdater   ÚencryptÚdecryptÚassertEqualr   ÚdigestÚverify)r+   r   r   r   ÚctÚptÚiÚcipherÚdecipherÚcompZctXZptXr   r   r   r   ÚrunTestj   s2    


zCipherSelfTest.runTestN)r   r	   r
   r#   r/   r3   r6   rI   r   r   r   r   r   .   s
   &r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCipherStreamingSelfTestc                 C   s*   | j }| jd k	r |d| jf 7 }d|f S )Nz in %s modez%%s should behave like a stream cipher)r   r   r'   )r+   Údescr   r   r   r/   “   s    
z(CipherStreamingSelfTest.shortDescriptionc              	   C   sÔ   t | jƒ}t | jƒ}g }|  ¡ }tdt|ƒdƒD ] }| | |||d … ¡¡ q0tt	dƒ 
|¡ƒ}|  | j|¡ g }|  ¡ }tdt|ƒdƒD ] }| | |||d … ¡¡ qŽtt	dƒ 
|¡ƒ}|  | j|¡ d S )Nr   é   Ú )r   r   r   r3   r<   ÚlenÚappendr>   r   r   Újoinr@   )r+   r   r   Zct3rF   rE   Zpt3r   r   r   rI   ™   s    

zCipherStreamingSelfTest.runTestN)r   r	   r
   r/   rI   r   r   r   r   rJ   ‘   s   rJ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚRoundtripTestc                 C   s^   ddl m} tj | ¡ || _| |j¡| _t	|d ƒ| _
dt	|d ƒ | _| dd ¡| _d S )Nr   )ÚRandomr   éd   r   r   )ZCryptorR   r!   r"   r#   r$   Zget_random_bytesÚ
block_sizer   r   r   r   Úgetr   )r+   r$   r,   rR   r   r   r   r#   ²   s    zRoundtripTest.__init__c                 C   s   d| j f S )Nz8%s .decrypt() output of .encrypt() should not be garbled)r   r.   r   r   r   r/   »   s    zRoundtripTest.shortDescriptionc                 C   sX   | j j}| j  t| jƒ|¡}| | j¡}| j  t| jƒ|¡}| |¡}|  | j|¡ d S r-   )	r$   ÚMODE_ECBr1   r   r   r>   r   r?   r@   )r+   r   Zencryption_cipherr   Zdecryption_cipherZdecrypted_plaintextr   r   r   rI   ¾   s    
zRoundtripTest.runTestN)r   r	   r
   r#   r/   rI   r   r   r   r   rQ   ±   s   	rQ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚIVLengthTestc                 C   s$   t j | ¡ || _t|d ƒ| _d S ©Nr   ©r!   r"   r#   r$   r   r   ©r+   r$   r,   r   r   r   r#   Ê   s    zIVLengthTest.__init__c                 C   s   dS )NzTCheck that all modes except MODE_ECB and MODE_CTR require an IV of the proper lengthr   r.   r   r   r   r/   Ï   s    zIVLengthTest.shortDescriptionc                 C   s(   |   t| jjt| jƒ| jjtdƒ¡ d S )NrM   )ÚassertRaisesÚ	TypeErrorr$   r1   r   r   rV   r   r.   r   r   r   rI   Ò   s     ÿzIVLengthTest.runTestc                 C   s   d| j j S )Nú )r$   rT   r.   r   r   r   Ú_dummy_counterÖ   s    zIVLengthTest._dummy_counterN)r   r	   r
   r#   r/   rI   r^   r   r   r   r   rW   É   s   rW   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNoDefaultECBTestc                 C   s$   t j | ¡ || _t|d ƒ| _d S rX   rY   rZ   r   r   r   r#   Û   s    zNoDefaultECBTest.__init__c                 C   s   |   t| jjt| jƒ¡ d S r-   )r[   r\   r$   r1   r   r   r.   r   r   r   rI   à   s    zNoDefaultECBTest.runTestN©r   r	   r
   r#   rI   r   r   r   r   r_   Ú   s   r_   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBlockSizeTestc                 C   s(   t j | ¡ || _tt|d ƒƒ| _d S rX   )r!   r"   r#   r$   r   r   r   rZ   r   r   r   r#   å   s    zBlockSizeTest.__init__c                 C   s*   | j  | j| j j¡}|  |j| j j¡ d S r-   )r$   r1   r   rV   r@   rT   )r+   rF   r   r   r   rI   ê   s    zBlockSizeTest.runTestNr`   r   r   r   r   ra   ä   s   ra   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚByteArrayTestz;Verify we can use bytearray's for encrypting and decryptingc                 C   s:  t j | ¡ || _| ¡ }t|dƒ| _tt|dƒƒ| _tt|dƒƒ| _	tt|dƒƒ| _
t|dd ƒ| _t|dd ƒ| _t|dd ƒ| _| jr’t| jƒ| _t|dd ƒ}t|ƒ| _|d k	�rt| jd	| ƒ| _t|d
d ƒ| _| jd krêt|dd ƒ| _| jd k	�r0t| jƒ| _n,d | _t|d
d ƒ| _| jd k	�r0t| jƒ| _|| _d S r   r    r*   r   r   r   r#   ò   s4    


zByteArrayTest.__init__c                 C   sX   | j  ¡ }t| jƒ}g }| jd k	r*| jg}| jd k	rD|t| jƒg7 }| jj|f|ž|ŽS r-   r0   r2   r   r   r   r3     s    



zByteArrayTest._newc           
      C   sÔ   t | jƒ}t | jƒ}g }| jr.dd„ | jD ƒ}|  ¡ }|  ¡ }|D ]}| |¡ | |¡ qBt| t|ƒ¡ƒ}t| 	t|ƒ¡ƒ}|  
| j|¡ |  
| j|¡ | jrÐt| ¡ ƒ}	|  
| j|	¡ | tt | jƒƒ¡ d S )Nc                 S   s   g | ]}t tt|ƒƒƒ‘qS r   )Ú	bytearrayr   r   r7   r   r   r   r:   )  s     z)ByteArrayTest.runTest.<locals>.<listcomp>)r   r   r   r   r3   r=   r   r>   rc   r?   r@   r   rA   rB   ©
r+   r   r   r   rF   rG   rH   rC   rD   r   r   r   r   rI   #  s$    


zByteArrayTest.runTestN©r   r	   r
   Ú__doc__r#   r3   rI   r   r   r   r   rb   ï   s   %rb   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚMemoryviewTestz;Verify we can use memoryviews for encrypting and decryptingc                 C   s:  t j | ¡ || _| ¡ }t|dƒ| _tt|dƒƒ| _tt|dƒƒ| _	tt|dƒƒ| _
t|dd ƒ| _t|dd ƒ| _t|dd ƒ| _| jr’t| jƒ| _t|dd ƒ}t|ƒ| _|d k	�rt| jd	| ƒ| _t|d
d ƒ| _| jd krêt|dd ƒ| _| jd k	�r0t| jƒ| _n,d | _t|d
d ƒ| _| jd k	�r0t| jƒ| _|| _d S r   r    r*   r   r   r   r#   B  s4    


zMemoryviewTest.__init__c                 C   sX   | j  ¡ }t| jƒ}g }| jd k	r*| jg}| jd k	rD|t| jƒg7 }| jj|f|ž|ŽS r-   r0   r2   r   r   r   r3   g  s    



zMemoryviewTest._newc           
      C   sÔ   t | jƒ}t | jƒ}g }| jr.dd„ | jD ƒ}|  ¡ }|  ¡ }|D ]}| |¡ | |¡ qBt| t|ƒ¡ƒ}t| 	t|ƒ¡ƒ}|  
| j|¡ |  
| j|¡ | jrÐt| ¡ ƒ}	|  
| j|	¡ | tt | jƒƒ¡ d S )Nc                 S   s   g | ]}t tt|ƒƒƒ‘qS r   )Ú
memoryviewr   r   r7   r   r   r   r:   y  s     z*MemoryviewTest.runTest.<locals>.<listcomp>)r   r   r   r   r3   r=   r   r>   rh   r?   r@   r   rA   rB   rd   r   r   r   rI   s  s$    


zMemoryviewTest.runTestNre   r   r   r   r   rg   ?  s   %rg   c              	   C   sÀ  g }d}t t|ƒƒD �]¤}|| }i }t|ƒdkrJ|\|d< |d< |d< nrt|ƒdkrt|\|d< |d< |d< |d< nHt|ƒdkrª|\|d< |d< |d< |d< }	| |	¡ ntd	t|ƒf ƒ‚d
|krÌd|d
< | ¡ }
t|
dƒ}t|
dƒ}t|
dƒ}t|
d
ƒ}t|
dd ƒ}|d k	�r|}n,|dk�r6|
�s6d||f }nd|||
f }d||d |f }||d< ||d< | |¡ |�sª|t| |ƒt| |ƒt| |ƒt	| |ƒt
| |ƒg7 }d}| t| |ƒ¡ q|S )NFrL   r   r   r   é   r   é   úUnsupported tuple size %dr   ZECBú
p=%s, k=%súp=%s, k=%s, %rú
%s #%d: %sé   r   T)r<   rN   r=   ÚAssertionErrorr%   r   rQ   rW   r_   rb   ra   rO   r   )r$   r   Ú	test_dataZadditional_paramsÚtestsÚextra_tests_addedrE   Úrowr,   r)   Úp2Úp_keyÚp_plaintextÚp_ciphertextZp_modeÚp_descriptionr   r5   r   r   r   Úmake_block_tests�  sR    	





ûrz   c                 C   s�  g }d}t t|ƒƒD �]t}|| }i }t|ƒdkrJ|\|d< |d< |d< nrt|ƒdkrt|\|d< |d< |d< |d< nHt|ƒdkrª|\|d< |d< |d< |d< }| |¡ ntd	t|ƒf ƒ‚| ¡ }	t|	dƒ}
t|	dƒ}t|	dƒ}t|	dd ƒ}|d k	rü|}n"|	�sd
||
f }nd||
|	f }d||d |f }||d< ||d< |�sj|t| |ƒg7 }| t| |ƒ¡ d}| t	| |ƒ¡ | t
| |ƒ¡ q|S )NFrL   r   r   r   ri   r   rj   rk   rl   rm   rn   ro   r   T)r<   rN   r=   rp   r%   r   rb   rO   rg   r   rJ   )r$   r   rq   rr   rs   rE   rt   r,   r)   ru   rv   rw   rx   ry   r   r5   r   r   r   Úmake_stream_testsÍ  sF    


ÿr{   )rf   r!   Úbinasciir   r   r   ZCrypto.Util.py3compatr   ZCrypto.Util.strxorr   r   r   r"   r   rJ   rQ   rW   r_   ra   rb   rg   Údictrz   r{   r   r   r   r   Ú<module>   s    c 
PP>