o
    Þý°jµp  ã                   @   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	 d dl
mZmZ d dlmZ d dlmZ d	d
„ ZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZd dl
mZmZmZmZmZ e deejƒ eej¡ ejD ]Ze deeƒ ee¡ q�ejD ]Ze deeƒ ee¡ q’ejD ]Ze deeƒ ee¡ q£ejD ]Ze deeƒ ee¡ q´i fdd„Z e!dkrØdd„ Z"e j#d d!� dS dS )"é    N©Ú	unhexlify)Úlist_test_cases)Úload_test_vectors_wycheproof)ÚtobytesÚbchr)ÚAESÚDES3)ÚSHAKE128)Ústrxorc                 C   s   t jt| ƒd� |¡S )N)Údata)r
   Únewr   Úread)ÚtagÚlength© r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Cipher/test_EAX.pyÚget_tag_random+   s   r   c                   @   sÜ   e Z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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/d0„ Zd1S )2ÚEaxTestsÚkey_128é   Úkey_192Ú	nonce_128é   Údata_128c                 C   óZ   t j| jt j| jd�}tddƒ}| |¡}t j| jt j| jd�}| |¡}|  ||¡ d S )N©ÚnonceÚ	plaintexti@  )	r   r   r   ÚMODE_EAXÚnonce_96r   ÚencryptÚdecryptÚassertEqual©ÚselfÚcipherÚptÚctÚpt2r   r   r   Útest_loopback_1286   ó   


zEaxTests.test_loopback_128c                 C   r   )Nr   r   i   )	r	   r   r   r   r    r   r!   r"   r#   r$   r   r   r   Útest_loopback_64?   r+   zEaxTests.test_loopback_64c                 C   s–   t  | jt j¡}|j}t  | jt j¡}|j}|  t|ƒd¡ |  ||¡ t  | jt j| j¡}| 	| j
¡}t j| jt j| jd�}|  || 	| j
¡¡ d S )Nr   r   )r   r   r   r   r   r#   ÚlenÚassertNotEqualr    r!   r   )r%   r&   Únonce1Únonce2r(   r   r   r   Ú
test_nonceH   s   zEaxTests.test_noncec                 C   s   | j ttj| jtjdd� d S )NÚtest12345678r   )ÚassertRaisesÚ	TypeErrorr   r   r   r   ©r%   r   r   r   Útest_nonce_must_be_bytesW   s   
ÿz!EaxTests.test_nonce_must_be_bytesc                 C   sX   | j ttj| jtjdd� tddƒD ]}tj| jtjtdƒ| d�}| tdƒ¡ qd S )Nó    r   é   é€   )	r3   Ú
ValueErrorr   r   r   r   Úranger   r!   )r%   Úxr&   r   r   r   Útest_nonce_length[   s   ÿþzEaxTests.test_nonce_lengthc                 C   s*   t j| jt j| jd�}|  |jt j¡ d S ©Nr   )r   r   r   r   r    r#   Ú
block_size©r%   r&   r   r   r   Útest_block_size_128d   ó   zEaxTests.test_block_size_128c                 C   s*   t j| jtj| jd�}|  |jt j¡ d S r>   )r	   r   r   r   r   r    r#   r?   r@   r   r   r   Útest_block_size_64h   rB   zEaxTests.test_block_size_64c                 C   sj   t j| jt j| jd�}|  |j| j¡ t  | jt j¡j}t  | jt j¡j}|  t|ƒd¡ |  ||¡ d S )Nr   r   )	r   r   r   r   r    r#   r   r-   r.   )r%   r&   r/   r0   r   r   r   Útest_nonce_attributel   s   zEaxTests.test_nonce_attributec                 C   sV   |   ttj| jtj| jd¡ | j ttj| jtj| jdd� tj| jtj| jdd� d S )Né   )r   ÚunknownF)r   Ú	use_aesni)r3   r4   r   r   r   r   r    r5   r   r   r   Útest_unknown_parametersv   s   ÿÿ
ÿz EaxTests.test_unknown_parametersc                 C   s>   dD ]}t j| jt j| jd�}t||ƒdƒ}|  |d¡ qd S )N©r!   r"   r   r7   )r   r   r   r   r    Úgetattrr#   )r%   Úfuncr&   Úresultr   r   r   Útest_null_encryption_decryption�   s
   ýz(EaxTests.test_null_encryption_decryptionc                 C   sd   t j| jt j| jd�}| d¡ |  t|jd¡ t j| jt j| jd�}| d¡ |  t|jd¡ d S )Nr   r7   )	r   r   r   r   r    r!   r3   r4   r"   r@   r   r   r   Útest_either_encrypt_or_decrypt‡   s   

z'EaxTests.test_either_encrypt_or_decryptc                 C   sP   t j| jt j| jd�}|  t|jd¡ t j| jt j| jd�}|  t|jd¡ d S )Nr   ztest1234567890-*)	r   r   r   r   r    r3   r4   r!   r"   r@   r   r   r   Útest_data_must_be_bytes�   s   z EaxTests.test_data_must_be_bytesc                 C   s¾   | j ttj| jtj| jdd� | j ttj| jtj| jdd� tddƒD ]}tj| jtj| j|d�}| | j	¡\}}|  
t|ƒ|¡ q#tj| jtj| jd�}| | j	¡\}}|  
t|ƒd¡ d S )Nr8   )r   Úmac_lené   é   r   r   )r3   r:   r   r   r   r   r    r;   Úencrypt_and_digestr   r#   r-   )r%   rP   r&   Ú_Úmacr   r   r   Útest_mac_len—   s   ÿÿÿzEaxTests.test_mac_lenc                 C   sh   ddl m} tj| jtj| jd�}| | j¡\}}||dƒ}tj| jtj| jd�}|  	t
|j||¡ d S )Nr   )Ústrxor_cr   r8   )ÚCryptodome.Util.strxorrW   r   r   r   r   r    rS   r   r3   r:   Údecrypt_and_verify)r%   rW   r&   r(   rU   Úinvalid_macr   r   r   Útest_invalid_macª   s   
ÿzEaxTests.test_invalid_macc                 C   sV   t j| jt j| jd�}| ¡ }|  | ¡ t|ƒ¡ t j| jt j| jd�}| 	|¡ d S r>   )
r   r   r   r   r    Ú	hexdigestr#   Údigestr   Ú	hexverify)r%   r&   Úmac_hexr   r   r   Útest_hex_macµ   s
   zEaxTests.test_hex_macc                 C   s8  t ddƒ}t ddƒ}tj| jtj| jd�}| |¡ | |¡\}}dd„ }dD ]6}tj| jtj| jd�}|||ƒD ]}| |¡ q9d}	|||ƒD ]	}|	| |¡7 }	qH|  	||	¡ | 
|¡ q'dD ]9}tj| jtj| jd�}|||ƒD ]}| |¡ qrd}
|||ƒD ]	}|
| |¡7 }
q�|  	||
¡ |  	| ¡ |¡ q`d S )	Nzauthenticated dataé   r   r   c                    s    ‡ ‡fdd„t dtˆƒˆ ƒD ƒS )Nc                    s   g | ]
}ˆ||ˆ  … ‘qS r   r   )Ú.0Úi©Úchunk_lengthr   r   r   Ú
<listcomp>É   s    zBEaxTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>r   )r;   r-   )r   re   r   rd   r   Úbreak_upÈ   s   ÿz.EaxTests.test_message_chunks.<locals>.break_up)
r8   rR   é   rE   é
   é   r   é(   éP   r9   r7   )r   r   r   r   r   r    ÚupdaterS   r"   r#   Úverifyr!   r]   )r%   Ú	auth_datar   r&   Ú
ciphertextÚref_macrg   re   Úchunkr)   Úct2r   r   r   Útest_message_chunks½   s2   


özEaxTests.test_message_chunksc                 C   s†  t | jƒ}t | jƒ}t | jƒ}t | jƒ}tj| jtj| jd�}| | j¡ | | j¡}| 	¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | |¡}	d|d d…< | 	¡ }
|  
||	¡ |  
||
¡ |  
|j|j¡ t | jƒ}t | jƒ}t | jƒ}t |ƒ}t |ƒ}~tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | |¡}d|d d…< | |¡ |  
|| j¡ d S ©Nr   s   ÿÿÿrh   s   ™™™)Ú	bytearrayr   r    r   r   r   r   rm   r!   r]   r#   r   r"   rn   )r%   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r(   r   Úcipher2Úct_testÚtag_testÚct_baÚtag_baÚcipher3Úpt_testr   r   r   Útest_bytearrayæ   sV   



þþ




þ


zEaxTests.test_bytearrayc                 C   sª  t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}tj| jtj| jd�}| | j¡ | 	| j¡}| 
¡ }tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | 	|¡}	d|d d…< | 
¡ }
|  ||	¡ |  ||
¡ |  |j|j¡ t t| jƒƒ}t t| jƒƒ}t t| jƒƒ}t t|ƒƒ}t t|ƒƒ}~tj|tj|d�}d|d d…< d|d d…< | |¡ d|d d…< | |¡}d|d d…< | |¡ |  || j¡ d S ru   )Ú
memoryviewrv   r   r    r   r   r   r   rm   r!   r]   r#   r   r"   rn   )r%   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvr{   r(   r   r|   r}   r~   Úct_mvÚtag_mvr�   r‚   r   r   r   Útest_memoryview  sV   þþ

þ


zEaxTests.test_memoryviewc                 C   s:  d}t j| jt j| jd�}| |¡}| ¡ }tdƒ}t j| jt j| jd�}|j||d�}|  ||¡ |  |d ¡ t j| jt j| jd�}|j	||d�}|  ||¡ |  |d ¡ t j| jt j| jd�}|j
||d�\}}|  ||¡ |  |d ¡ |  ||¡ t j| jt j| jd�}|j|||d�}|  ||¡ |  |d ¡ d S ©Ns€   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r9   ©Úoutput)r   r   r   r   r    r!   r]   rv   r#   r"   rS   rY   )r%   r'   r&   r(   r   rŽ   ÚresÚtag_outr   r   r   Útest_output_paramL  s,   
zEaxTests.test_output_paramc                 C   s”   d}t j| jt j| jd�}| |¡}ttdƒƒ}t j| jt j| jd�}|j||d� |  ||¡ t j| jt j| jd�}|j	||d� |  ||¡ d S rŒ   )
r   r   r   r   r    r!   r„   rv   r#   r"   )r%   r'   r&   r(   rŽ   r   r   r   Útest_output_param_memoryviewi  s   
z%EaxTests.test_output_param_memoryviewc                 C   sì   d}d| }t j| jt j| jd�}| |¡}t j| jt j| jd�}| jt|j|d| d� t j| jt j| jd�}| jt|j|d| d� t	|d ƒ}t j| jt j| jd�}| jt
|j||d� t j| jt j| jd�}| jt
|j||d� d S )Nr   ó   5r   ó   0r�   r8   )r   r   r   r   r    r!   r3   r4   r"   rv   r:   )r%   ÚLEN_PTr'   r&   r(   Úshorter_outputr   r   r   Útest_output_param_negx  s   
zEaxTests.test_output_param_negN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r   r*   r,   r1   r6   r=   rA   rC   rD   rH   rM   rN   rO   rV   r[   r`   rt   rƒ   r‹   r‘   r’   r—   r   r   r   r   r   /   s4    



			
	)33r   c                   @   s‚   e Z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 )ÚEaxFSMTestsr   r   r   r   r   c                 C   sX   t j| jt j| jd�}| | j¡}| ¡ }t j| jt j| jd�}| |¡ | 	|¡ d S r>   )
r   r   r   r   r    r!   r   r]   r"   rn   ©r%   r&   r(   rU   r   r   r   Ú-test_valid_init_encrypt_decrypt_digest_verify’  s   ÿÿ
z9EaxFSMTests.test_valid_init_encrypt_decrypt_digest_verifyc                 C   sZ   t j| jt j| jd�}| | j¡ | ¡ }t j| jt j| jd�}| | j¡ | |¡ d S r>   )	r   r   r   r   r    rm   r   r]   rn   ©r%   r&   rU   r   r   r   Ú$test_valid_init_update_digest_verify   s   ÿÿz0EaxFSMTests.test_valid_init_update_digest_verifyc                 C   sp   t j| jt j| jd�}| | j¡ | | j¡}| ¡ }t j| jt j| jd�}| | j¡ | 	|¡ | 
|¡ d S r>   )r   r   r   r   r    rm   r   r!   r]   r"   rn   rœ   r   r   r   Útest_valid_full_path®  s   ÿÿ
z EaxFSMTests.test_valid_full_pathc                 C   s"   t j| jt j| jd�}| ¡  d S r>   )r   r   r   r   r    r]   r@   r   r   r   Útest_valid_init_digest¾  s   z"EaxFSMTests.test_valid_init_digestc                 C   sB   t j| jt j| jd�}| ¡ }t j| jt j| jd�}| |¡ d S r>   )r   r   r   r   r    r]   rn   rž   r   r   r   Útest_valid_init_verifyÃ  s   z"EaxFSMTests.test_valid_init_verifyc                 C   s˜   dD ]G}d d| j | j d fD ]:}|d u rd }nt|ƒ}tj| jtj| jd�}|d ur/| |¡ t||ƒ}|| j ƒ || j ƒ || j ƒ || j ƒ qqd S )NrI   s   333ó   3r   )	r   r-   r   r   r   r   r    rm   rJ   )r%   Úmethod_namero   Ú	assoc_lenr&   Úmethodr   r   r   Ú&test_valid_multiple_encrypt_or_decryptË  s&   ÿÿ




òÿz2EaxFSMTests.test_valid_multiple_encrypt_or_decryptc                 C   s†   t j| jt j| jd�}| | j¡ | ¡ }tdƒD ]
}|  	|| ¡ ¡ qt j| jt j| jd�}| | j¡ tdƒD ]}| 
|¡ q9d S )Nr   é   é   )r   r   r   r   r    rm   r   r]   r;   r#   rn   )r%   r&   Ú	first_macr<   r   r   r   Ú$test_valid_multiple_digest_or_verifyÝ  s   ÿz0EaxFSMTests.test_valid_multiple_digest_or_verifyc                 C   sr   t j| jt j| jd�}| | j¡ | | j¡\}}t j| jt j| jd�}| | j¡ | ||¡}|  	| j|¡ d S r>   )
r   r   r   r   r    rm   r   rS   rY   r#   )r%   r&   r(   rU   r'   r   r   r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyë  s   z<EaxFSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyc                 C   sh   dD ]/\}}dD ](}t j| jt j| jd�}|r| | j¡ t||ƒ| jƒ |  t	t||ƒ| j¡ qqd S )N)rI   )r"   r!   )TFr   )
r   r   r   r   r    rm   r   rJ   r3   r4   )r%   Úmethod1_nameÚmethod2_nameÚassoc_data_presentr&   r   r   r   Ú#test_invalid_mixing_encrypt_decrypt÷  s   ÿÿúþz/EaxFSMTests.test_invalid_mixing_encrypt_decryptc                 C   sp   dD ]3}t j| jt j| jd�}| | j¡ | ¡  |  t	t
||ƒ| j¡ t j| jt j| jd�}| | j¡ qd S )N)r!   rm   r   )r   r   r   r   r    r!   r   r]   r3   r4   rJ   rS   )r%   r¤   r&   r   r   r   Ú+test_invalid_encrypt_or_update_after_digest  s   ÿøz7EaxFSMTests.test_invalid_encrypt_or_update_after_digestc                 C   s°   t j| jt j| jd�}| | j¡}| ¡ }dD ]>}t j| jt j| jd�}| |¡ | 	|¡ |  
tt||ƒ| j¡ t j| jt j| jd�}| ||¡ |  
tt||ƒ| j¡ qd S )Nr   )r"   rm   )r   r   r   r   r    r!   r   r]   r"   rn   r3   r4   rJ   rY   )r%   r&   r(   rU   r¤   r   r   r   Ú+test_invalid_decrypt_or_update_after_verify  s    

ÿÿ÷z7EaxFSMTests.test_invalid_decrypt_or_update_after_verifyN)r˜   r™   rš   r   r   r    r   r�   rŸ   r    r¡   r¢   r§   r«   r¬   r°   r±   r²   r   r   r   r   r›   Œ  s    


r›   c                   @   s.   e Zd ZdZg d¢Zdd„ eD ƒZdd„ ZdS )ÚTestVectorsPaperzgClass exercising the EAX test vectors found in
       http://www.cs.ucdavis.edu/~rogaway/papers/eax.pdf)
)Ú6bfb914fd07eae6bÚ rµ   Ú e037830e8389f27b025a2d6527e79d01Ú 233952dee4d5ed5f9b9c6d6ff80ff478Ú 62EC67F9C3A4A407FCB2A8C49031A8B3)Úfa3bfd4806eb53faÚf7fbÚ19ddÚ 5c4c9331049d0bdab0277408f67967e5Ú 91945d3f4dcbee0bf45ef52255f095a4Ú BECAF043B0A23D843194BA972C66DEBD)Ú234a3463c1264ac6Ú
1a47cb4933Ú
d851d5bae0Ú 3a59f238a23e39199dc9266626c40f80Ú 01f74ad64077f2e704c0f60ada3dd523Ú 70C3DB4F0D26368400A10ED05D2BFF5E)Ú33cce2eabff5a79dÚ
481c9e39b1Ú
632a9d131aÚ d4c168a4225d8e1ff755939974a7bedeÚ d07cf6cbb7f313bdde66b727afd3c5e8Ú 8408DFFF3C1A2B1292DC199E46B7D617)Úaeb96eaebe2970e9Ú40d0c07da5e4Ú071dfe16c675Ú cb0677e536f73afe6a14b74ee49844ddÚ 35b6d0580005bbc12b0587124557d2c2Ú FDB6B06676EEDC5C61D74276E1F8E816)Úd4482d1ca78dce0fÚ4de3b35c3fc039245bd1fb7dÚ835bb4f15d743e350e728414Ú abb8644fd6ccb86947c5e10590210a4fÚ bd8e6e11475e60b268784c38c62feb22Ú 6EAC5C93072D8E8513F750935E46DA1B)Ú65d2017990d62528Ú"8b0a79306c9ce7ed99dae4f87f8dd61636Ú"02083e3979da014812f59f11d52630da30Ú 137327d10649b0aa6e1c181db617d7f2Ú 7c77d6e813bed5ac98baa417477a2e7dÚ 1A8C98DCD73D38393B2BF1569DEEFC19)Ú54b9f04e6a09189aÚ$1bda122bce8a8dbaf1877d962b8592dd2d56Ú$2ec47b2c4954a489afc7ba4897edcdae8cc3Ú 3b60450599bd02c96382902aef7f832aÚ 5fff20cafab119ca2fc73549e20f5b0dÚ DDE59B97D722156D4D9AFF2BC7559826)Ú899a175897561d7eÚ$6cf36720872b8513f6eab1a8a44438d5ef11Ú$0de18fd0fdd91e7af19f1d8ee8733938b1e8Ú e7f6d2231618102fdb7fe55ff1991700Ú a4a4782bcffd3ec5e7ef6d8c34a56123Ú B781FCF2F75FA5A8DE97A9CA48E522EC)Ú126735fcc320d25aÚ*ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7Ú*cb8920f87a6c75cff39627b56e3ed197c552d295a7Ú cfc46afc253b4652b1af3795b124ab6eÚ 8395fcf1e95bebd697bd010bc766aac3Ú 22E7ADD93CFC6393C57EC0B3C17D6B44c                 C   s   g | ]	}d d„ |D ƒ‘qS )c                 S   s   g | ]}t |ƒ‘qS r   r   )rb   r<   r   r   r   rf   v  s    z&TestVectorsPaper.<listcomp>.<listcomp>r   )rb   Útvr   r   r   rf   v  s    zTestVectorsPaper.<listcomp>c                 C   sž   | j D ]I\}}}}}}tj|tj|t|ƒd�}| |¡ | |¡\}}	|  ||¡ |  ||	¡ tj|tj|t|ƒd�}| |¡ | ||¡}
|  ||
¡ qd S )N©rP   )	Útest_vectorsr   r   r   r-   rm   rS   r#   rY   )r%   Ú
assoc_datar'   r(   rU   Úkeyr   r&   rs   Úmac2r)   r   r   r   ÚrunTestx  s   

ôzTestVectorsPaper.runTestN)r˜   r™   rš   Ú__doc__Útest_vectors_hexrñ   rõ   r   r   r   r   r³   !  s
    Qr³   c                   @   sL   e Z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 )ÚTestVectorsWycheproofc                 C   s   t j | ¡ || _d| _d S )NÚNone)ÚunittestÚTestCaseÚ__init__Ú_wycheproof_warningsÚ_id)r%   Úwycheproof_warningsr   r   r   rü   Š  s   
zTestVectorsWycheproof.__init__c                 C   s"   dd„ }t dddd|id�| _d S )Nc                 S   s   | d d S )NÚtagSizeé   r   )Úgroupr   r   r   Ú
filter_tag‘  s   z/TestVectorsWycheproof.setUp.<locals>.filter_tag)ÚCipherÚ
wycheproofzaes_eax_test.jsonzWycheproof EAXÚtag_size)Ú	group_tag)r   rï   )r%   r  r   r   r   ÚsetUp�  s   ýzTestVectorsWycheproof.setUpc                 C   s   | j S ©N)rþ   r5   r   r   r   ÚshortDescription™  s   z&TestVectorsWycheproof.shortDescriptionc                 C   s6   |j r| jrdd l}| d| j|jf ¡ d S d S d S )Nr   zWycheproof warning: %s (%s))Úwarningrý   ÚwarningsÚwarnrþ   Úcomment)r%   rï   r  r   r   r   r  œ  s   þzTestVectorsWycheproof.warnc              
   C   sÄ   dt |jƒ | _ztj|jtj|j|jd�}W n" t	y9 } zt
|jƒdkr,dt |ƒv s.J ‚W Y d }~d S d }~ww | |j¡ | |j¡\}}|jr`|  ||j¡ |  ||j¡ |  |¡ d S d S )NzWycheproof Encrypt EAX Test #rð   r   úNonce cannot be empty)ÚstrÚidrþ   r   r   ró   r   Úivr  r:   r-   rm   ÚaadrS   ÚmsgÚvalidr#   r(   r   r  )r%   rï   r&   Úer(   r   r   r   r   Útest_encrypt¡  s   €þýz"TestVectorsWycheproof.test_encryptc              
   C   sÚ   dt |jƒ | _ztj|jtj|j|jd�}W n" t	y9 } zt
|jƒdkr,dt |ƒv s.J ‚W Y d }~d S d }~ww | |j¡ z
| |j|j¡}W n t	yY   |jrVJ ‚Y d S w |js_J ‚|  ||j¡ |  |¡ d S )NzWycheproof Decrypt EAX Test #rð   r   r  )r  r  rþ   r   r   ró   r   r  r  r:   r-   rm   r  rY   r(   r   r  r#   r  r  )r%   rï   r&   r  r'   r   r   r   Útest_decrypt±  s"   €þÿ
z"TestVectorsWycheproof.test_decryptc                 C   sŒ   dt |jƒ | _t|jƒdkst|jƒdk rd S tj|jtj	|j|j
d�}| |j¡ t|jdt|jƒd  d ƒ}|  t|j||j¡ d S )Nz%Wycheproof Corrupt Decrypt EAX Test #r   r8   rð   ó    ó   )r  r  rþ   r-   r  r(   r   r   ró   r   r  rm   r  r   r3   r:   rY   r   )r%   rï   r&   Ú
ct_corruptr   r   r   Útest_corrupt_decryptÄ  s   z*TestVectorsWycheproof.test_corrupt_decryptc                 C   s.   | j D ]}|  |¡ |  |¡ |  |¡ qd S r	  )rï   r  r  r  )r%   rï   r   r   r   rõ   Í  s
   


ýzTestVectorsWycheproof.runTestN)r˜   r™   rš   rü   r  r
  r  r  r  r  rõ   r   r   r   r   rø   ˆ  s    
	rø   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestOtherCiphersc                 C   s"   ||fdd„}t | d| |ƒ d S )Nc                 S   sZ   |j td|ƒ|jdd�}| d¡\}}|j td|ƒ|jdd�}| ||¡}|  d|¡ d S )Nr&   s   noncer   s	   plaintext)r   r   r   rS   rY   r#   )r%   ÚfactoryÚkey_sizer&   r(   rU   r)   r   r   r   Útest_templateÚ  s   þþz3TestOtherCiphers.create_test.<locals>.test_templateÚtest_)Úsetattr)ÚclsÚnamer  r  r   r   r   r   Úcreate_test×  s   zTestOtherCiphers.create_testN)r˜   r™   rš   Úclassmethodr%  r   r   r   r   r  Õ  s    r  )ÚDESr	   ÚARC2ÚCASTÚBlowfishÚDES_ÚDES3_ÚARC2_ÚCAST_Ú	Blowfish_c                 C   sP   |   d¡}g }|ttƒ7 }|ttƒ7 }|tƒ g7 }|t|ƒg7 }|ttƒ7 }|S )Nrÿ   )Úgetr   r   r›   r³   rø   r  )Úconfigrÿ   Útestsr   r   r   Ú	get_tests÷  s   
r3  Ú__main__c                   C   s   t  tƒ ¡S r	  )rú   Ú	TestSuiter3  r   r   r   r   Ú<lambda>  s    r6  Úsuite)ÚdefaultTest)$rú   Úbinasciir   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   ÚCryptodome.Util.py3compatr   r   ÚCryptodome.Cipherr   r	   ÚCryptodome.Hashr
   rX   r   r   rû   r   r›   r³   rø   r  r'  r(  r)  r*  r%  r  r  Úksr3  r˜   r7  Úmainr   r   r   r   Ú<module>   s@     _ gM



þ