o
    Þý°j¸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 PyCryptodome hash modulesé    N)Úa2b_hexÚb2a_hexÚhexlify)Úb)Ústrxor_cc                   @   s   e Zd ZdS )Ú
_NoDefaultN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú”/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Cipher/common.pyr   !   s    r   c                 C   s8   z| | }W n t y   |tu r‚ | Y S w | |= |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   ó4  t j | ¡ || _| ¡ }t|dƒ| _tt|dƒƒ| _tt|dƒƒ| _	tt|dƒƒ| _
t|dd ƒ| _t|dd ƒ| _t|dd ƒ| _| jrIt| jƒ| _t|dd ƒ}t|ƒ| _|d ur€t| jd	| ƒ| _t|d
d ƒ| _| jd u rtt|dd ƒ| _| jd urt| jƒ| _nd | _t|d
d ƒ| _| jd ur•t| 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   s6   


€

zCipherSelfTest.__init__c                 C   s   | j S ©N)r   ©r,   r   r   r   ÚshortDescriptionV   s   zCipherSelfTest.shortDescriptionc                 C   ó^   | j  ¡ }t| jƒ}g }| jd ur| jg}| jd ur"|t| jƒg7 }| jj|g|¢R i |¤ŽS r.   ©r*   r&   r   r   r   r   r%   Únew©r,   r-   r   Ú	old_styler   r   r   Ú_newY   ó   



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 ]:}|  ¡ }|  ¡ }|D ]}	| |	¡ | |	¡ q+t| |¡ƒ}
t| 	|¡ƒ}|rT|  
||
¡ |  
||¡ |
|}}q|  
| j|¡ |  
| j|¡ | jr‚t| ¡ ƒ}|  
| j|¡ | t | jƒ¡ d S 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   Úranger6   Úupdater   ÚencryptÚdecryptÚassertEqualr   ÚdigestÚverify)r,   r   r   r   ÚctÚptÚiÚcipherÚdecipherÚcompÚctXÚptXr   r   r   r   ÚrunTestj   s4   


ýzCipherSelfTest.runTestN)r   r	   r
   r$   r0   r6   r:   rO   r   r   r   r   r   .   s    &r   c                   @   ó   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 … ¡¡ qtt	dƒ 
|¡ƒ}|  | j|¡ g }|  ¡ }tdt|ƒdƒD ]}| | |||d … ¡¡ qGtt	dƒ 
|¡ƒ}|  | j|¡ d S )Nr   é   Ú )r   r   r   r6   r@   ÚlenÚappendrB   r   r   ÚjoinrD   )r,   r   r   Úct3rJ   rI   Úpt3r   r   r   rO   ™   s   

zCipherStreamingSelfTest.runTestN)r   r	   r
   r0   rO   r   r   r   r   rQ   ‘   s    rQ   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   )Ú
Cryptodomer[   r"   r#   r$   r%   Úget_random_bytesÚ
block_sizer   r   r   r   Úgetr   )r,   r%   r-   r[   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   »   ó   zRoundtripTest.shortDescriptionc                 C   sX   | j j}| j  t| jƒ|¡}| | j¡}| j  t| jƒ|¡}| |¡}|  | j|¡ d S r.   )	r%   ÚMODE_ECBr3   r   r   rB   r   rC   rD   )r,   r   Úencryption_cipherr   Údecryption_cipherÚdecrypted_plaintextr   r   r   rO   ¾   s   
zRoundtripTest.runTestN)r   r	   r
   r$   r0   rO   r   r   r   r   rZ   ±   s    	rZ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚIVLengthTestc                 C   ó$   t j | ¡ || _t|d ƒ| _d S ©Nr   ©r"   r#   r$   r%   r   r   ©r,   r%   r-   r   r   r   r$   Ê   ó   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 )NrT   )ÚassertRaisesÚ	TypeErrorr%   r3   r   r   rb   r   r/   r   r   r   rO   Ò   s   ÿzIVLengthTest.runTestc                 C   s   d| j j S )Nú )r%   r_   r/   r   r   r   Ú_dummy_counterÖ   ra   zIVLengthTest._dummy_counterN)r   r	   r
   r$   r0   rO   ro   r   r   r   r   rf   É   s
    rf   c                   @   rP   )ÚNoDefaultECBTestc                 C   rg   rh   ri   rj   r   r   r   r$   Û   rk   zNoDefaultECBTest.__init__c                 C   s   |   t| jjt| jƒ¡ d S r.   )rl   rm   r%   r3   r   r   r/   r   r   r   rO   à   s   zNoDefaultECBTest.runTestN©r   r	   r
   r$   rO   r   r   r   r   rp   Ú   ó    rp   c                   @   rP   )ÚBlockSizeTestc                 C   s(   t j | ¡ || _tt|d ƒƒ| _d S rh   )r"   r#   r$   r%   r   r   r   rj   r   r   r   r$   å   s   zBlockSizeTest.__init__c                 C   s*   | j  | j| j j¡}|  |j| j j¡ d S r.   )r%   r3   r   rb   rD   r_   )r,   rJ   r   r   r   rO   ê   s   zBlockSizeTest.runTestNrq   r   r   r   r   rs   ä   rr   rs   c                   @   ó(   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   r   r   r!   r+   r   r   r   r$   ò   ó6   


€

zByteArrayTest.__init__c                 C   r1   r.   r2   r4   r   r   r   r6     r7   zByteArrayTest._newc           
      C   óØ   t | jƒ}t | jƒ}g }| jrdd„ | jD ƒ}|  ¡ }|  ¡ }|D ]}| |¡ | |¡ q!t| t|ƒ¡ƒ}t| 	t|ƒ¡ƒ}|  
| j|¡ |  
| j|¡ | jrjt| ¡ ƒ}	|  
| j|	¡ | tt | jƒƒ¡ d S d S )Nc                 S   ó   g | ]
}t tt|ƒƒƒ‘qS r   )Ú	bytearrayr   r   r;   r   r   r   r>   )  ó    z)ByteArrayTest.runTest.<locals>.<listcomp>)r   r   r   r   r6   rA   r   rB   ry   rC   rD   r   rE   rF   ©
r,   r   r   r   rJ   rK   rL   rG   rH   r   r   r   r   rO   #  ó&   


ýzByteArrayTest.runTestN©r   r	   r
   Ú__doc__r$   r6   rO   r   r   r   r   ru   ï   ó
    %ru   c                   @   rt   )	ÚMemoryviewTestz;Verify we can use memoryviews for encrypting and decryptingc                 C   r   r   r!   r+   r   r   r   r$   B  rv   zMemoryviewTest.__init__c                 C   r1   r.   r2   r4   r   r   r   r6   g  r7   zMemoryviewTest._newc           
      C   rw   )Nc                 S   rx   r   )Ú
memoryviewr   r   r;   r   r   r   r>   y  rz   z*MemoryviewTest.runTest.<locals>.<listcomp>)r   r   r   r   r6   rA   r   rB   r�   rC   rD   r   rE   rF   r{   r   r   r   rO   s  r|   zMemoryviewTest.runTestNr}   r   r   r   r   r€   ?  r   r€   c              	   C   s¶  g }d}t t|ƒƒD ]Î}|| }i }t|ƒdkr$|\|d< |d< |d< n9t|ƒdkr9|\|d< |d< |d< |d< n$t|ƒdkrT|\|d< |d< |d< |d< }	| |	¡ n	td	t|ƒf ƒ‚d
|vred|d
< | ¡ }
t|
dƒ}t|
dƒ}t|
dƒ}t|
d
ƒ}t|
dd ƒ}|d urŠ|}n|dkr—|
s—d||f }nd|||
f }d||d |f }||d< ||d< | |¡ |sÐ|t| |ƒt| |ƒt| |ƒt	| |ƒt
| |ƒg7 }d}| t| |ƒ¡ q
|S )NFrS   r   r   r   é   r   é   úUnsupported tuple size %dr   ÚECBú
p=%s, k=%súp=%s, k=%s, %rú
%s #%d: %sé   r   T)r@   rU   rA   ÚAssertionErrorr&   r   rZ   rf   rp   ru   rs   rV   r   )r%   r   Ú	test_dataÚadditional_paramsÚtestsÚextra_tests_addedrI   Úrowr-   r*   Úp2Úp_keyÚp_plaintextÚp_ciphertextÚp_modeÚp_descriptionr   r9   r   r   r   Úmake_block_tests�  sR   	




ûr–   c                 C   sŠ  g }d}t t|ƒƒD ]¸}|| }i }t|ƒdkr$|\|d< |d< |d< n9t|ƒdkr9|\|d< |d< |d< |d< n$t|ƒdkrT|\|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< |s²|t| |ƒg7 }| t| |ƒ¡ d}| t	| |ƒ¡ | t
| |ƒ¡ q
|S )NFrS   r   r   r   r‚   r   rƒ   r„   r†   r‡   rˆ   r‰   r   T)r@   rU   rA   rŠ   r&   r   ru   rV   r€   r   rQ   )r%   r   r‹   r�   rŽ   rI   r�   r-   r*   r�   r‘   r’   r“   r•   r   r9   r   r   r   Úmake_stream_testsÍ  sF   


ÿr—   )r~   r"   Úbinasciir   r   r   ÚCryptodome.Util.py3compatr   ÚCryptodome.Util.strxorr   r   r   r#   r   rQ   rZ   rf   rp   rs   ru   r€   Údictr–   r—   r   r   r   r   Ú<module>   s"   c 
PP>