o
    ed                     @   sh  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 ]FZedede ddd ipFg ZeeD ]0\ZZeeerUqKe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 qKq6G 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rddlZdd Z'ej(dd dS 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   PD:\Projects\ConvertPro\env\Lib\site-packages\Crypto/SelfTest/Cipher/test_DES3.py<lambda>@   s    r   z%s (%s)c                   @   s$   e Zd Zdd Zdd Zdd ZdS )CheckParityc                 C   &   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   
   
zCheckParity.test_parity_option2c                 C   r   )NZ0AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCZ0ABABABABABABABABBABABABABABABABACDCDCDCDCDCDCDCDr   )r   Z	before_3kZafter_3kr   r   r   test_parity_option3X   r   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                   @      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       r(   c                   @   r'   )
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ctr0   resZshorter_outputr   r   r   r+      s(   
zTestOutput.runTestNr,   r   r   r   r   r.      r-   r.   c                 C   sD   ddl m} g }|tdt}|t  |tt7 }|t g7 }|S )Nr   )make_block_testsr   )	commonr9   r   	test_dataappendr(   r	   r   r.   )configr9   testsr   r   r   	get_tests   s   r?   __main__c                   C   s   t t  d S r   )unittestZ	TestSuiter?   r   r   r   r   suite   s   rB   )ZdefaultTest))__doc__rA   binasciir   r   ZCrypto.Cipherr   ZCrypto.Util.strxorr   ZCrypto.Util.py3compatr   r   ZCrypto.SelfTest.loaderr   ZCrypto.SelfTest.st_commonr	   r;   Znist_tdes_mmt_filesZ	tdes_fileZtest_vectors	enumerateindextv
isinstancestrkey1key2Zkey3keyZ	plaintextZ
ciphertextZtest_data_itemr<   ZTestCaser   r(   r.   r?   r$   rB   mainr   r   r   r   <module>   sR   



#"