U
    Š¾úg1!  ã                   @   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rªdd„ Ze jdd 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   úK/tmp/pip-unpacked-wheel-_q8s9isk/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   sn   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ÚeivZpt2r   r   r   Útest_loopback_128:   s    


zOpenPGPTests.test_loopback_128c                 C   sn   t  | jt j| j¡}tddƒ}| |¡}|d d… |dd …  }}t  | jt j|¡}| |¡}|  ||¡ d S )Nr   i   é
   )	r   r
   r   r   r   r   r   r   r    r!   r   r   r   Útest_loopback_64E   s    


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   r-   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   r-   r   r   r   Útest_either_encrypt_or_decrypt_   s    

z+OpenPGPTests.test_either_encrypt_or_decryptc                    sf   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                    s   g | ]}ˆ   |¡‘qS r   ©r   ©Ú.0Úx©r#   r   r   Ú
<listcomp>l   s     z8OpenPGPTests.test_unaligned_data_128.<locals>.<listcomp>r+   )r   r
   r   r   r   r    Újoinr   ©r"   Z
plaintextsZciphertextsr   r9   r   Útest_unaligned_data_128h   s
    
z$OpenPGPTests.test_unaligned_data_128c                    sf   dgd }t  | jt j| j¡‰ ‡ fdd„|D ƒ}t  | jt j| j¡‰ |  d |¡ˆ  d |¡¡¡ d S )Nr3   r4   c                    s   g | ]}ˆ   |¡‘qS r   r5   r6   r9   r   r   r:   t   s     z7OpenPGPTests.test_unaligned_data_64.<locals>.<listcomp>r+   )r   r
   r   r   r   r    r;   r   r<   r   r9   r   Útest_unaligned_data_64p   s
    
z#OpenPGPTests.test_unaligned_data_64c                 C   s   d S ©Nr   ©r"   r   r   r   Útest_output_paramx   s    zOpenPGPTests.test_output_paramc                 C   s   d S r?   r   r@   r   r   r   Útest_output_param_same_buffer{   s    z*OpenPGPTests.test_output_param_same_bufferc                 C   s   d S r?   r   r@   r   r   r   Útest_output_param_memoryview~   s    z)OpenPGPTests.test_output_param_memoryviewc                 C   s   d S r?   r   r@   r   r   r   Útest_output_param_neg   s    z"OpenPGPTests.test_output_param_negN)Ú__name__Ú
__module__Ú__qualname__r   r   Zaes_moder   Z	des3_moder   r   r   r   r   r   r'   r)   r.   r/   r2   r=   r>   rA   rB   rC   rD   r   r   r   r   r   -   s$   




	r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestVectorsc           	      C   s¨   d}d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}| |¡}|  |d d… |¡ |  |dd … |¡ t |tj|¡}| |¡}|  ||¡ d S )NZ4ac18620270744fb4f647426c61636b4361745768697465436174Z4dc6b9e1f095de609765c59983db5956ae4f63aea7405389d2ebbZ 5baa61e4c9b93f3f0682250b6cf8331bZ 3d7d3e62282add7eb203eeba5c800733Z$fd934601ef49cb58b6d9aebca6056bdb96efr   )r   r   r
   r   r   r    r   ©	r"   r   Z
ciphertextÚkeyr,   Zencrypted_ivr#   r%   r$   r   r   r   Útest_aes‡   s"    

zTestVectors.test_aesc           	      C   s¨   d}d}d}d}d}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |ƒ}t |tj|¡}| |¡}|  |d d… |¡ |  |dd … |¡ t |tj|¡}| |¡}|  ||¡ d S )NZ2ac1762037074324fb53ba3596f73656d69746556616c6c6579Z29979238528357b90e2e0be549cb0b2d5999b9a4a447e5c5c7dZ07ade65b460f5ea9be35f9e14aa883a2048e3824aa616c0b2Zcd47e2afb8b7e4b0Z6a7eef0b58050e8b904ar(   )r   r   r
   r   r   r    r   rI   r   r   r   Ú	test_des3´   s"    

zTestVectors.test_des3N)rE   rF   rG   rK   rL   r   r   r   r   rH   …   s   -rH   c                 C   s    g }|t tƒ7 }|t tƒ7 }|S r?   )r   r   rH   )ÚconfigÚtestsr   r   r   Ú	get_testsÑ   s    rO   Ú__main__c                   C   s   t  tƒ ¡S r?   )ÚunittestZ	TestSuiterO   r   r   r   r   Ú<lambda>Ù   r+   rR   Úsuite)ZdefaultTest)rQ   Úbinasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Util.py3compatr   ZCryptodome.Cipherr   r   r   ZCryptodome.Hashr   r   Z#Cryptodome.SelfTest.Cipher.test_CBCr   r   ZTestCaserH   rO   rE   rS   Úmainr   r   r   r   Ú<module>   s   XL