o
    5hp                     @   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 qejD ]Zedee ee qejD ]Zedee ee qejD ]Zedee ee qi fddZ e!dkrd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   s/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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   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   )Crypto.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   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.Util.py3compatr   r   Crypto.Cipherr   r	   Crypto.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



