U
    Mf                     @   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pg ZeeD ]`\ZZeeerqe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 qqlG 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 Cryptodome.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   H/tmp/pip-unpacked-wheel-l_0d1exj/Cryptodome/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   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Cryptodome.Cipherr   ZCryptodome.Util.strxorr   ZCryptodome.Util.py3compatr   r   ZCryptodome.SelfTest.loaderr   ZCryptodome.SelfTest.st_commonr	   r8   Znist_tdes_mmt_filesZ	tdes_fileZtest_vectors	enumerateindextv
isinstancestrkey1key2Zkey3key	plaintextZ
ciphertextZtest_data_itemr9   ZTestCaser   r&   r+   r<   r#   r?   mainr   r   r   r   <module>   sL   



#"
