o
    Þý°j¹  ã                   @   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r²ddlZdd„ Z'ej(dd� dS dS )z*Self-test suite for Cryptodome.Cipher.DES3é    N)ÚhexlifyÚ	unhexlify)ÚDES3)Ústrxor_c)ÚbchrÚtostr)Úload_test_vectors)Úlist_test_cases)Ú054686520717566636b2062726f776e20666f78206a756d70Ú0a826fd8ce53b855fcce21c8112256fe668d5c05dd9b6b900Ú00123456789abcdef23456789abcdef01456789abcdef0123zNIST SP800-67 B.1)Ú21e81b7ade88a259Ú5c577d4d9b20c0f8Ú 9b397ebf81b1181e282f4bb8adbadc6bzTwo-key 3DES)zTECBMMT2.rspzTECBMMT3.rsp)ÚCipherÚTDESzTDES ECB (%s)Úcountc                 C   s   t | ƒS ©N)Úint)Úx© r   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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 )NÚ CABF326FA56734324FFCCABCDEFACABFÚ CBBF326EA46734324FFDCBBCDFFBCBBF©r   r   Úadjust_key_parityÚassertEqual)ÚselfÚ	before_2kÚafter_2kr   r   r   Útest_parity_option2R   ó
   
ÿzCheckParity.test_parity_option2c                 C   r   )NÚ0AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCÚ0ABABABABABABABABBABABABABABABABACDCDCDCDCDCDCDCDr   )r    Ú	before_3kÚ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    Úsub_key1Úsub_key2r   r   r   Útest_degradation^   s   

ÿ

ÿ
ÿ
ÿzCheckParity.test_degradationN)Ú__name__Ú
__module__Ú__qualname__r#   r)   r5   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   r0   r1   r   ÚnewÚMODE_ECBr   r2   r   r   r   ÚrunTestu   s$   

þ

þ
þ
þzDegenerateToDESTest.runTestN©r6   r7   r8   r=   r   r   r   r   r:   s   ó    r:   c                   @   r9   )Ú
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<   ÚencryptÚ	bytearrayr   ÚdecryptÚ
memoryviewr0   Ú	TypeErrorr1   )r    ÚcipherÚptÚctrB   ÚresÚ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   )	ÚcommonrN   r   Ú	test_dataÚappendr:   r	   r   r@   )ÚconfigrN   Útestsr   r   r   Ú	get_tests°   s   rT   Ú__main__c                   C   s   t  tƒ ¡ d S r   )ÚunittestÚ	TestSuiterT   r   r   r   r   Úsuite¾   s   rX   )ÚdefaultTest))Ú__doc__rV   Úbinasciir   r   ÚCryptodome.Cipherr   ÚCryptodome.Util.strxorr   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.SelfTest.st_commonr	   rP   Únist_tdes_mmt_filesÚ	tdes_fileÚtest_vectorsÚ	enumerateÚindexÚtvÚ
isinstanceÚstrÚkey1Úkey2Úkey3ÚkeyÚ	plaintextÚ
ciphertextÚtest_data_itemrQ   ÚTestCaser   r:   r@   rT   r6   rX   Úmainr   r   r   r   Ú<module>   sR   ô
üü


ýõ#"ú