U
    ÈZj¡  ã                   @   sf  d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ d	d
gZdZeD ]ŒZedede ddd„ iƒpŒg ZeeƒD ]`\ZZeeeƒrªq–ejej ej Zeeejƒƒeeejƒƒeeeƒƒdeef fZe  e¡ q–qlG dd„ dej!ƒZ"G dd„ dej!ƒZ#G dd„ dej!ƒZ$i fdd„Z%e&dk�rbddlZdd„ Z'ej(dd� dS )z&Self-test suite for Crypto.Cipher.DES3é    N)ÚhexlifyÚ	unhexlify)ÚDES3)Ústrxor_c)ÚbchrÚtostr)Úload_test_vectors)Úlist_test_cases)Z054686520717566636b2062726f776e20666f78206a756d70Z0a826fd8ce53b855fcce21c8112256fe668d5c05dd9b6b900Z00123456789abcdef23456789abcdef01456789abcdef0123zNIST SP800-67 B.1)Z21e81b7ade88a259Z5c577d4d9b20c0f8Z 9b397ebf81b1181e282f4bb8adbadc6bzTwo-key 3DES)zTECBMMT2.rspzTECBMMT3.rsp)ZCipherZTDESzTDES ECB (%s)Úcountc                 C   s   t | ƒS ©N)Úint)Úx© r   úc/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Cipher/test_DES3.pyÚ<lambda>@   ó    r   z%s (%s)c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCheckParityc                 C   s&   t dƒ}t |¡}|  |t dƒ¡ d S )NZ CABF326FA56734324FFCCABCDEFACABFZ CBBF326EA46734324FFDCBBCDFFBCBBF©r   r   Úadjust_key_parityÚassertEqual)ÚselfZ	before_2kZafter_2kr   r   r   Útest_parity_option2R   s
    
ÿzCheckParity.test_parity_option2c                 C   s&   t dƒ}t |¡}|  |t dƒ¡ d S )NZ0AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCZ0ABABABABABABABABBABABABABABABABACDCDCDCDCDCDCDCDr   )r   Z	before_3kZafter_3kr   r   r   Útest_parity_option3X   s
    
ÿzCheckParity.test_parity_option3c                 C   s~   t dƒd }t dƒd }|  ttj|d | ¡ |  ttj||d  ¡ |  ttj|d ¡ |  ttj|t|dƒ | ¡ d S ©Né   é   éÿ   é   é   )r   ÚassertRaisesÚ
ValueErrorr   r   r   ©r   Zsub_key1Zsub_key2r   r   r   Útest_degradation^   s    

ÿ

ÿ
ÿ
ÿzCheckParity.test_degradationN)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r   r   r   r   r   P   s   r   c                   @   s   e Zd Zdd„ ZdS )ÚDegenerateToDESTestc                 C   sŽ   t dƒd }t dƒd }|  ttj|d | tj¡ |  ttj||d  tj¡ |  ttj|d tj¡ |  ttj|| t|dƒ tj¡ d S r   )r   r   r    r   ÚnewÚMODE_ECBr   r!   r   r   r   ÚrunTestu   s$    

þ

þ
þ
þzDegenerateToDESTest.runTestN©r#   r$   r%   r)   r   r   r   r   r&   s   s   r&   c                   @   s   e Zd Zdd„ ZdS )Ú
TestOutputc                 C   s  t  dt j¡}d}| |¡}tdƒ}|j||d�}|  ||¡ |  |d ¡ |j||d�}|  ||¡ |  |d ¡ ttdƒƒ}|j||d� |  ||¡ |j||d� |  ||¡ | jt	|j|dd� | jt	|j|dd� tdƒ}| jt
|j||d� | jt
|j||d� d S )Ns   44444444GGGGGGGGTTTTTTTTs   5555555555555555é   )Úoutputs   0000000000000000é   )r   r'   r(   ZencryptÚ	bytearrayr   ZdecryptÚ
memoryviewr   Ú	TypeErrorr    )r   ÚcipherÚptÚctr-   ÚresZshorter_outputr   r   r   r)   �   s(    
zTestOutput.runTestNr*   r   r   r   r   r+   Ž   s   r+   c                 C   sD   ddl m} g }|tdtƒ}| tƒ ¡ |ttƒ7 }|tƒ g7 }|S )Nr   )Úmake_block_testsr   )	Úcommonr6   r   Ú	test_dataÚappendr&   r	   r   r+   )Úconfigr6   Ztestsr   r   r   Ú	get_tests°   s    r;   Ú__main__c                   C   s   t  tƒ ¡ d S r   )ÚunittestZ	TestSuiter;   r   r   r   r   Úsuite¾   s    r>   )ZdefaultTest))Ú__doc__r=   Úbinasciir   r   ZCrypto.Cipherr   ZCrypto.Util.strxorr   ZCrypto.Util.py3compatr   r   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr	   r8   Znist_tdes_mmt_filesZ	tdes_fileZtest_vectorsÚ	enumerateÚindexÚtvÚ
isinstanceÚstrÚkey1Úkey2Zkey3ÚkeyZ	plaintextZ
ciphertextZtest_data_itemr9   ZTestCaser   r&   r+   r;   r#   r>   Úmainr   r   r   r   Ú<module>   sL   ô
üü


ý#"
