o
    ‰¡e1!  ã                   @   s²   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ dd„ Zd d	lmZ G d
d„ deƒZG dd„ de jƒZi fdd„ZedkrWdd„ Ze jdd dS dS )é    N)Ú	unhexlify)Úlist_test_cases)Útobytes)ÚAESÚDES3ÚDES)ÚSHAKE128c                 C   s   t jt| ƒd |¡S )N)Údata)r   Únewr   Úread)ÚtagÚlength© r   úI/usr/lib/python3/dist-packages/Cryptodome/SelfTest/Cipher/test_OpenPGP.pyÚget_tag_random'   s   r   )ÚBlockChainingTestsc                   @   s¢   e Zd ZejZejZeddƒZ	eddƒZ
eddƒZeddƒZe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 ) ÚOpenPGPTestsÚkey_128é   Úkey_192é   Úiv_128Úiv_64é   Údata_128c                 C   ón   t  | jt j| j¡}tddƒ}| |¡}|d d… |dd … }}t  | jt j|¡}| |¡}|  ||¡ d S )NÚ	plaintexti@  é   )	r   r
   r   ÚMODE_OPENPGPr   r   ÚencryptÚdecryptÚassertEqual©ÚselfÚcipherÚptÚctÚeivÚpt2r   r   r   Útest_loopback_128:   ó   


zOpenPGPTests.test_loopback_128c                 C   r   )Nr   i   é
   )	r   r
   r   r   r   r   r   r    r!   r"   r   r   r   Útest_loopback_64E   r*   zOpenPGPTests.test_loopback_64c                 C   sT   t  | jt j| j¡}| d¡}|  |j| j¡ t  | jt j|¡}|  |j| j¡ d S ©Nó    )r   r
   r   r   r   r   r!   Úiv©r#   r$   r'   r   r   r   Útest_IV_iv_attributesP   s
   
z"OpenPGPTests.test_IV_iv_attributesc                 C   sF   t  | jt j| j¡}| d¡}t  | jt j|¡}|  | d¡d¡ d S r-   )r   r
   r   r   r   r   r!   r    r0   r   r   r   Útest_null_encryption_decryptionX   s   
z,OpenPGPTests.test_null_encryption_decryptionc                 C   s^   t  | jt j| j¡}| d¡}|  t|jd¡ t  | jt j|¡}| d¡ |  t|jd¡ d S r-   )	r   r
   r   r   r   r   ÚassertRaisesÚ	TypeErrorr    r0   r   r   r   Útest_either_encrypt_or_decrypt_   s   

z+OpenPGPTests.test_either_encrypt_or_decryptc                    óf   dgd }t  | jt j| j¡‰ ‡ fdd„|D ƒ}t  | jt j| j¡‰ |  d |¡ˆ  d |¡¡¡ d S )Nó   7777777éd   c                    ó   g | ]}ˆ   |¡‘qS r   ©r   ©Ú.0Úx©r$   r   r   Ú
<listcomp>l   ó    z8OpenPGPTests.test_unaligned_data_128.<locals>.<listcomp>r.   )r   r
   r   r   r   r!   Újoinr   ©r#   Ú
plaintextsÚciphertextsr   r>   r   Útest_unaligned_data_128h   ó
   
"z$OpenPGPTests.test_unaligned_data_128c                    r6   )Nr7   r8   c                    r9   r   r:   r;   r>   r   r   r?   t   r@   z7OpenPGPTests.test_unaligned_data_64.<locals>.<listcomp>r.   )r   r
   r   r   r   r!   rA   r   rB   r   r>   r   Útest_unaligned_data_64p   rF   z#OpenPGPTests.test_unaligned_data_64c                 C   ó   d S ©Nr   ©r#   r   r   r   Útest_output_paramx   ó   zOpenPGPTests.test_output_paramc                 C   rH   rI   r   rJ   r   r   r   Útest_output_param_same_buffer{   rL   z*OpenPGPTests.test_output_param_same_bufferc                 C   rH   rI   r   rJ   r   r   r   Útest_output_param_memoryview~   rL   z)OpenPGPTests.test_output_param_memoryviewc                 C   rH   rI   r   rJ   r   r   r   Útest_output_param_neg   rL   z"OpenPGPTests.test_output_param_negN)Ú__name__Ú
__module__Ú__qualname__r   r   Úaes_moder   Ú	des3_moder   r   r   r   r   r   r)   r,   r1   r2   r5   rE   rG   rK   rM   rN   rO   r   r   r   r   r   -   s&    




	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestVectorsc           	      C   ó¨   d}d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}| |¡}|  |d d… |¡ |  |dd … |¡ t |tj|¡}| |¡}|  ||¡ d S )NÚ4ac18620270744fb4f647426c61636b4361745768697465436174Ú4dc6b9e1f095de609765c59983db5956ae4f63aea7405389d2ebbÚ 5baa61e4c9b93f3f0682250b6cf8331bÚ 3d7d3e62282add7eb203eeba5c800733Ú$fd934601ef49cb58b6d9aebca6056bdb96efr   )r   r   r
   r   r   r!   r    ©	r#   r   Ú
ciphertextÚkeyr/   Úencrypted_ivr$   r&   r%   r   r   r   Útest_aes‡   s"   

zTestVectors.test_aesc           	      C   rV   )NÚ2ac1762037074324fb53ba3596f73656d69746556616c6c6579Ú29979238528357b90e2e0be549cb0b2d5999b9a4a447e5c5c7dÚ07ade65b460f5ea9be35f9e14aa883a2048e3824aa616c0b2Úcd47e2afb8b7e4b0Ú6a7eef0b58050e8b904ar+   )r   r   r
   r   r   r!   r    r\   r   r   r   Ú	test_des3´   s"   

zTestVectors.test_des3N)rP   rQ   rR   r`   rf   r   r   r   r   rU   …   s    -rU   c                 C   s    g }|t tƒ7 }|t tƒ7 }|S rI   )r   r   rU   )ÚconfigÚtestsr   r   r   Ú	get_testsÑ   s   ri   Ú__main__c                   C   s   t  tƒ ¡S rI   )ÚunittestÚ	TestSuiteri   r   r   r   r   Ú<lambda>Ù   s    rm   Úsuite)ÚdefaultTest)rk   Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatr   ÚCryptodome.Cipherr   r   r   ÚCryptodome.Hashr   r   Ú#Cryptodome.SelfTest.Cipher.test_CBCr   r   ÚTestCaserU   ri   rP   rn   Úmainr   r   r   r   Ú<module>   s   XLþ