U
    ÈZj•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¡ �qJejD ]Ze deeƒ ee¡ �qni fdd„Z e!dk�r¶dd„ Z"e j#d d!� 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   úb/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/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   sZ   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   s    


zEaxTests.test_loopback_128c                 C   sZ   t j| jt j| jd�}tddƒ}| |¡}t j| jt j| jd�}| |¡}|  ||¡ d S )Nr   r   i   )	r	   r   r   r   r   r   r    r!   r"   r#   r   r   r   Útest_loopback_64?   s    


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 )NZ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   é   é€   )	r0   Ú
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   s    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   s    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-   r.   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   Z	use_aesni)r0   r1   r   r   r   r   r   r2   r   r   r   Útest_unknown_parametersv   s     ÿ ÿÿz EaxTests.test_unknown_parametersc                 C   s>   dD ]4}t j| jt j| jd�}t||ƒdƒ}|  |d¡ qd S )N©r    r!   r   r4   )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   r4   )	r   r   r   r   r   r    r0   r1   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   r0   r1   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|ƒ|¡ qFtj| jtj| jd�}| | j	¡\}}|  
t|ƒd¡ d S )Nr5   )r   Úmac_lené   é   r   r   )r0   r7   r   r   r   r   r   r8   Úencrypt_and_digestr   r"   r+   )r$   rK   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   r5   )ÚCrypto.Util.strxorrR   r   r   r   r   r   rN   r   r0   r7   Údecrypt_and_verify)r$   rR   r%   r'   rP   Z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   Z	hexverify)r$   r%   Zmac_hexr   r   r   Útest_hex_macµ   s
    zEaxTests.test_hex_macc                 C   s:  t ddƒ}t ddƒ}tj| jtj| jd�}| |¡ | |¡\}}dd„ }dD ]l}tj| jtj| jd�}|||ƒD ]}| |¡ qrd}	|||ƒD ]}|	| |¡7 }	q�|  	||	¡ | 
|¡ qNdD ]t}tj| jtj| jd�}|||ƒD ]}| |¡ qäd}
|||ƒ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   )r8   r+   )r   r]   r   r\   r   Úbreak_upÈ   s    ÿz.EaxTests.test_message_chunks.<locals>.break_up)
r5   rM   é   rA   é
   é   r   é(   éP   r6   r4   )r   r   r   r   r   r   ÚupdaterN   r!   r"   Úverifyr    rW   )r$   Ú	auth_datar   r%   Z
ciphertextZref_macr_   r]   Úchunkr(   Úct2r   r   r   Útest_message_chunks½   s0    


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   ÿÿÿr`   s   ™™™)Ú	bytearrayr   r   r   r   r   r   re   r    rW   r"   r   r!   rf   )r$   Zkey_baZnonce_baZ	header_baZdata_baÚcipher1r'   r   Úcipher2Úct_testÚtag_testZct_baZ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 rk   )Ú
memoryviewrl   r   r   r   r   r   r   re   r    rW   r"   r   r!   rf   )r$   Zkey_mvZnonce_mvZ	header_mvZdata_mvrm   r'   r   rn   ro   rp   Zct_mvZtag_mvrq   rr   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   r6   ©Úoutput)r   r   r   r   r   r    rW   rl   r"   r!   rN   rT   )r$   r&   r%   r'   r   rx   ÚresZ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 rv   )
r   r   r   r   r   r    rt   rl   r"   r!   )r$   r&   r%   r'   rx   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   ó   0rw   r5   )r   r   r   r   r   r    r0   r1   r!   rl   r7   )r$   ZLEN_PTr&   r%   r'   Z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*   r/   r3   r:   r>   r?   r@   rC   rH   rI   rJ   rQ   rU   rX   rj   rs   ru   rz   r{   r~   r   r   r   r   r   /   s2   



			
	)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   rW   r!   rf   ©r$   r%   r'   rP   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   re   r   rW   rf   ©r$   r%   rP   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   re   r   r    rW   r!   rf   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   rW   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   rW   rf   r…   r   r   r   Útest_valid_init_verifyÃ  s    z"EaxFSMTests.test_valid_init_verifyc                 C   s˜   dD ]Ž}d d| j | j d fD ]t}|d kr.d }nt|ƒ}tj| jtj| jd�}|d k	r^| |¡ t||ƒ}|| j ƒ || j ƒ || j ƒ || j ƒ qqd S )NrD   s   333ó   3r   )	r   r+   r   r   r   r   r   re   rE   )r$   Úmethod_namerg   Z	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 ]}|  	|| ¡ ¡ q2t j| jt j| jd�}| | j¡ tdƒD ]}| 
|¡ qrd S )Nr   é   é   )r   r   r   r   r   re   r   rW   r8   r"   rf   )r$   r%   Z	first_macr9   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   re   r   rN   rT   r"   )r$   r%   r'   rP   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 ]P}t j| jt j| jd�}|r:| | j¡ t||ƒ| jƒ |  t	t||ƒ| j¡ qqd S )N)rD   )r!   r    )TFr   )
r   r   r   r   r   re   r   rE   r0   r1   )r$   Zmethod1_nameZmethod2_nameZassoc_data_presentr%   r   r   r   Ú#test_invalid_mixing_encrypt_decrypt÷  s    ÿÿz/EaxFSMTests.test_invalid_mixing_encrypt_decryptc                 C   sp   dD ]f}t j| jt j| jd�}| | j¡ | ¡  |  t	t
||ƒ| j¡ t j| jt j| jd�}| | j¡ qd S )N)r    re   r   )r   r   r   r   r   r    r   rW   r0   r1   rE   rN   )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!   re   )r   r   r   r   r   r    r   rW   r!   rf   r0   r1   rE   rT   )r$   r%   r'   rP   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dddddddd	d
dg
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)Z6bfb914fd07eae6bÚ r–   Z e037830e8389f27b025a2d6527e79d01Z 233952dee4d5ed5f9b9c6d6ff80ff478Z 62EC67F9C3A4A407FCB2A8C49031A8B3)Zfa3bfd4806eb53faZf7fbZ19ddZ 5c4c9331049d0bdab0277408f67967e5Z 91945d3f4dcbee0bf45ef52255f095a4Z BECAF043B0A23D843194BA972C66DEBD)Z234a3463c1264ac6Z
1a47cb4933Z
d851d5bae0Z 3a59f238a23e39199dc9266626c40f80Z 01f74ad64077f2e704c0f60ada3dd523Z 70C3DB4F0D26368400A10ED05D2BFF5E)Z33cce2eabff5a79dZ
481c9e39b1Z
632a9d131aZ d4c168a4225d8e1ff755939974a7bedeZ d07cf6cbb7f313bdde66b727afd3c5e8Z 8408DFFF3C1A2B1292DC199E46B7D617)Zaeb96eaebe2970e9Z40d0c07da5e4Z071dfe16c675Z cb0677e536f73afe6a14b74ee49844ddZ 35b6d0580005bbc12b0587124557d2c2Z FDB6B06676EEDC5C61D74276E1F8E816)Zd4482d1ca78dce0fZ4de3b35c3fc039245bd1fb7dZ835bb4f15d743e350e728414Z abb8644fd6ccb86947c5e10590210a4fZ bd8e6e11475e60b268784c38c62feb22Z 6EAC5C93072D8E8513F750935E46DA1B)Z65d2017990d62528Z"8b0a79306c9ce7ed99dae4f87f8dd61636Z"02083e3979da014812f59f11d52630da30Z 137327d10649b0aa6e1c181db617d7f2Z 7c77d6e813bed5ac98baa417477a2e7dZ 1A8C98DCD73D38393B2BF1569DEEFC19)Z54b9f04e6a09189aZ$1bda122bce8a8dbaf1877d962b8592dd2d56Z$2ec47b2c4954a489afc7ba4897edcdae8cc3Z 3b60450599bd02c96382902aef7f832aZ 5fff20cafab119ca2fc73549e20f5b0dZ DDE59B97D722156D4D9AFF2BC7559826)Z899a175897561d7eZ$6cf36720872b8513f6eab1a8a44438d5ef11Z$0de18fd0fdd91e7af19f1d8ee8733938b1e8Z e7f6d2231618102fdb7fe55ff1991700Z a4a4782bcffd3ec5e7ef6d8c34a56123Z B781FCF2F75FA5A8DE97A9CA48E522EC)Z126735fcc320d25aZ*ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7Z*cb8920f87a6c75cff39627b56e3ed197c552d295a7Z cfc46afc253b4652b1af3795b124ab6eZ 8395fcf1e95bebd697bd010bc766aac3Z 22E7ADD93CFC6393C57EC0B3C17D6B44c                 C   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]}t |ƒ‘qS r   r   )rZ   r9   r   r   r   r^   v  s     z&TestVectorsPaper.<listcomp>.<listcomp>r   )rZ   Útvr   r   r   r^   v  s     zTestVectorsPaper.<listcomp>c                 C   sž   | j D ]’\}}}}}}tj|tj|t|ƒd�}| |¡ | |¡\}}	|  ||¡ |  ||	¡ tj|tj|t|ƒd�}| |¡ | ||¡}
|  ||
¡ qd S )N©rK   )	Útest_vectorsr   r   r   r+   re   rN   r"   rT   )r$   Z
assoc_datar&   r'   rP   Úkeyr   r%   ri   Zmac2r(   r   r   r   ÚrunTestx  s    

zTestVectorsPaper.runTestN)r   r€   r�   Ú__doc__Z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 )NZtagSizeé   r   )Úgroupr   r   r   Ú
filter_tag‘  s    z/TestVectorsWycheproof.setUp.<locals>.filter_tag)ZCipherZ
wycheproofzaes_eax_test.jsonzWycheproof EAXÚtag_size)Z	group_tag)r   r—   )r$   r§   r   r   r   ÚsetUp�  s    ýzTestVectorsWycheproof.setUpc                 C   s   | j S ©N)r£   r2   r   r   r   ÚshortDescription™  s    z&TestVectorsWycheproof.shortDescriptionc                 C   s.   |j r*| jr*dd l}| d| j|jf ¡ 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 nF t	k
rt } z(t
|jƒdkrZdt |ƒks^t‚W Y ¢d S d }~X Y nX | |j¡ | |j¡\}}|jr¾|  ||j¡ |  ||j¡ |  |¡ d S )NzWycheproof Encrypt EAX Test #r˜   r   úNonce cannot be empty)ÚstrÚidr£   r   r   rš   r   Úivr¨   r7   r+   ÚAssertionErrorre   ÚaadrN   Ú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 nF t	k
rt } z(t
|jƒdkrZdt |ƒks^t‚W Y ¢d S d }~X Y nX | |j¡ z| |j|j¡}W n t	k
r´   |jr°t‚Y n$X |jsÀt‚|  ||j¡ |  |¡ d S )NzWycheproof Decrypt EAX Test #r˜   r   r°   )r±   r²   r£   r   r   rš   r   r³   r¨   r7   r+   r´   re   rµ   rT   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 r0d 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   r5   r˜   ó    ó   )r±   r²   r£   r+   r³   r'   r   r   rš   r   r¨   re   rµ   r   r0   r7   rT   r   )r$   r—   r%   Z
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   rN   rT   r"   )r$   ÚfactoryÚkey_sizer%   r'   rP   r(   r   r   r   Útest_templateÚ  s    þþz3TestOtherCiphers.create_test.<locals>.test_templateZ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ÚBlowfishZDES_ZDES3_ZARC2_ZCAST_Z	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¤   Ztestsr   r   r   Ú	get_tests÷  s    
rÍ   Ú__main__c                   C   s   t  tƒ ¡S rª   )rŸ   Z	TestSuiterÍ   r   r   r   r   Ú<lambda>  r4   rÏ   Úsuite)ZdefaultTest)$rŸ   Úbinasciir   ZCrypto.SelfTest.st_commonr   ZCrypto.SelfTest.loaderr   ZCrypto.Util.py3compatr   r   ZCrypto.Cipherr   r	   ZCrypto.Hashr
   rS   r   r   r    r   r‚   r•   r�   r¾   rÇ   rÈ   rÉ   rÊ   rÅ   r±   rÀ   ÚksrÍ   r   rÐ   Úmainr   r   r   r   Ú<module>   s<     _ gM




