a
    !fC                     @   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/python-backend/venv/lib/python3.9/site-packages/Crypto/SelfTest/Cipher/common.pyr   !       r   c                 C   s8   z| | }W n  t y,   |tu r$ | Y S 0 | |= |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rt| j| _t|dd }t|| _|d urt| jd	| | _t|d
d | _| jd u rt|dd | _| jd ur0t| j| _n,d | _t|d
d | _| jd u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   s^   | j  }t| j}g }| jd ur*| jg}| jd urD|t| jg7 }| jj|g|R i |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   r   z*CipherSelfTest.runTest.<locals>.<listcomp>   )r   r   r   r   ranger4   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$   r0   r4   r7   rJ   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 u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   r0      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   qtt	d
|}| | j| d S )Nr       )r   r   r   r4   r=   lenappendr?   r   r   joinrA   )r,   r   r   Zct3rG   rF   Zpt3r   r   r   rJ      s    

zCipherStreamingSelfTest.runTestN)r   r	   r
   r0   rJ   r   r   r   r   rK      s   rK   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CryptorS   r"   r#   r$   r%   Zget_random_bytes
block_sizer   r   r   r   getr   )r,   r%   r-   rS   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   r0      s    zRoundtripTest.shortDescriptionc                 C   sX   | j j}| j t| j|}|| j}| j t| j|}||}| | j| d S r.   )	r%   MODE_ECBr2   r   r   r?   r   r@   rA   )r,   r   Zencryption_cipherr   Zdecryption_cipherZdecrypted_plaintextr   r   r   rJ      s    
zRoundtripTest.runTestN)r   r	   r
   r$   r0   rJ   r   r   r   r   rR      s   	rR   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   r0      s    zIVLengthTest.shortDescriptionc                 C   s(   |  t| jjt| j| jjtd d S )NrN   )assertRaises	TypeErrorr%   r2   r   r   rW   r   r/   r   r   r   rJ      s    zIVLengthTest.runTestc                 C   s   d| j j S )N )r%   rU   r/   r   r   r   _dummy_counter   s    zIVLengthTest._dummy_counterN)r   r	   r
   r$   r0   rJ   r_   r   r   r   r   rX      s   rX   c                   @   s   e Zd Zdd Zdd ZdS )NoDefaultECBTestc                 C   s$   t j|  || _t|d | _d S rY   rZ   r[   r   r   r   r$      s    zNoDefaultECBTest.__init__c                 C   s   |  t| jjt| j d S r.   )r\   r]   r%   r2   r   r   r/   r   r   r   rJ      s    zNoDefaultECBTest.runTestNr   r	   r
   r$   rJ   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 rY   )r"   r#   r$   r%   r   r   r   r[   r   r   r   r$      s    zBlockSizeTest.__init__c                 C   s*   | j | j| j j}| |j| j j d S r.   )r%   r2   r   rW   rA   rU   )r,   rG   r   r   r   rJ      s    zBlockSizeTest.runTestNra   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 )	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rt| j| _t|dd }t|| _|d urt| jd	| | _t|d
d | _| jd u rt|dd | _| jd ur0t| j| _n,d | _t|d
d | _| jd ur0t| j| _|| _d S r   r!   r+   r   r   r   r$      s4    


zByteArrayTest.__init__c                 C   s^   | j  }t| j}g }| jd ur*| jg}| jd urD|t| jg7 }| jj|g|R i |S r.   r1   r3   r   r   r   r4     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rt| }	| 
| j|	 |tt | j d S )Nc                 S   s   g | ]}t tt|qS r   )	bytearrayr   r   r8   r   r   r   r;   )  r   z)ByteArrayTest.runTest.<locals>.<listcomp>)r   r   r   r   r4   r>   r   r?   rd   r@   rA   r   rB   rC   
r,   r   r   r   rG   rH   rI   rD   rE   r   r   r   r   rJ   #  s$    


zByteArrayTest.runTestNr   r	   r
   __doc__r$   r4   rJ   r   r   r   r   rc      s   %rc   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rt| j| _t|dd }t|| _|d urt| jd	| | _t|d
d | _| jd u rt|dd | _| jd ur0t| j| _n,d | _t|d
d | _| jd ur0t| j| _|| _d S r   r!   r+   r   r   r   r$   B  s4    


zMemoryviewTest.__init__c                 C   s^   | j  }t| j}g }| jd ur*| jg}| jd urD|t| jg7 }| jj|g|R i |S r.   r1   r3   r   r   r   r4   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rt| }	| 
| j|	 |tt | j d S )Nc                 S   s   g | ]}t tt|qS r   )
memoryviewr   r   r8   r   r   r   r;   y  r   z*MemoryviewTest.runTest.<locals>.<listcomp>)r   r   r   r   r4   r>   r   r?   ri   r@   rA   r   rB   rC   re   r   r   r   rJ   s  s$    


zMemoryviewTest.runTestNrf   r   r   r   r   rh   ?  s   %rh   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
|vrd|d
< | }
t|
d}t|
d}t|
d}t|
d
}t|
dd }|d u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 )NFrM   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=   rO   r>   AssertionErrorr&   r   rR   rX   r`   rc   rb   rP   r   )r%   r   	test_dataZadditional_paramstestsextra_tests_addedrF   rowr-   r*   p2p_keyp_plaintextp_ciphertextZp_modep_descriptionr   r6   r   r   r   make_block_tests  sR    	





r{   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 ur|}n"|	sd
||
f }nd||
|	f }d||d |f }||d< ||d< |sj|t| |g7 }|t| | d}|t	| | |t
| | q|S )NFrM   r   r   r   rj   r   rk   rl   rm   rn   ro   rp   r   T)r=   rO   r>   rq   r&   r   rc   rP   rh   r   rK   )r%   r   rr   rs   rt   rF   ru   r-   r*   rv   rw   rx   ry   rz   r   r6   r   r   r   make_stream_tests  sF    


r|   )rg   r"   binasciir   r   r   ZCrypto.Util.py3compatr   ZCrypto.Util.strxorr   r   r   r#   r   rK   rR   rX   r`   rb   rc   rh   dictr{   r|   r   r   r   r   <module>   s    c 
PP>