
    ¿igp                     N   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	 Z G d
 de j                  Z G d de j                  Z G d de j                  Z G d de j                  Z G d de j                  Zd dl
mZmZmZmZmZ e                    d eej                  z   eej                   ej        D ]%Ze                    d ee          z   ee           &ej        D ]%Ze                    d ee          z   ee           &ej        D ]%Ze                    d ee          z   ee           &ej        D ]%Ze                    d ee          z   ee           &i fdZ e!dk    rd Z" e j#        d           dS dS )    N	unhexlify)list_test_cases)load_test_vectors_wycheproof)tobytesbchr)AESDES3)SHAKE128)strxorc                 l    t          j        t          |                                         |          S )N)data)r   newr   read)taglengths     _/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Cipher/test_EAX.pyget_tag_randomr   +   s)    <WS\\***//777    c                       e Zd Z edd          Z edd          Z edd          Z edd          Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )EaxTestskey_128   key_192	nonce_128   data_128c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Nnonce	plaintexti@  )	r	   r   r   MODE_EAXnonce_96r   encryptdecryptassertEqualselfcipherptctpt2s        r   test_loopback_128zEaxTests.test_loopback_1286   s    s|4=IIIK22^^Bs|4=IIInnR  S!!!!!r   c                 R   t          j        | j        t           j        | j                  }t          dd          }|                    |          }t          j        | j        t           j        | j                  }|                    |          }|                     ||           d S )Nr   r!   i   )	r
   r   r   r"   r#   r   r$   r%   r&   r'   s        r   test_loopback_64zEaxTests.test_loopback_64?   s    $,T]KKKK11^^B$,T]KKKnnR  S!!!!!r   c                 ^   t          j        | j        t           j                  }|j        }t          j        | j        t           j                  }|j        }|                     t          |          d           |                     ||           t          j        | j        t           j        | j                  }|	                    | j
                  }t          j        | j        t           j        | j                  }|                     ||	                    | j
                             d S )Nr   r   )r	   r   r   r"   r    r&   lenassertNotEqualr#   r$   r   )r(   r)   nonce1nonce2r+   s        r   
test_noncezEaxTests.test_nonceH   s    s|44s|44Vb)))FF+++s|T]CC^^DM**s|4=IIIV^^DM::;;;;;r   c                 v    |                      t          t          j        | j        t          j        d           d S )Ntest12345678r   )assertRaises	TypeErrorr	   r   r   r"   r(   s    r   test_nonce_must_be_bytesz!EaxTests.test_nonce_must_be_bytesW   s:    )SWdlCL / 	 	1 	1 	1 	1 	1r   c                 L   |                      t          t          j        | j        t          j        d           t          dd          D ]Z}t          j        | j        t          j        t          d          |z            }|                    t          d                     [d S )Nr   r         )	r8   
ValueErrorr	   r   r   r"   ranger   r$   )r(   xr)   s      r   test_nonce_lengthzEaxTests.test_nonce_length[   s    *cgt|S\ # 	 	% 	% 	% q# 	$ 	$AWT\3<tAww{KKKFNN477####	$ 	$r   c                     t          j        | j        t           j        | j                  }|                     |j        t           j                   d S Nr   )r	   r   r   r"   r#   r&   
block_sizer(   r)   s     r   test_block_size_128zEaxTests.test_block_size_128d   s?    s|4=III*CN;;;;;r   c                     t          j        | j        t          j        | j                  }|                     |j        t           j                   d S rD   )r
   r   r   r	   r"   r#   r&   rE   rF   s     r   test_block_size_64zEaxTests.test_block_size_64h   s?    $,DMJJJ*DO<<<<<r   c                    t          j        | j        t           j        | j                  }|                     |j        | j                   t          j        | j        t           j                  j        }t          j        | j        t           j                  j        }|                     t          |          d           |                     ||           d S )Nr   r   )	r	   r   r   r"   r#   r&   r    r1   r2   )r(   r)   r3   r4   s       r   test_nonce_attributezEaxTests.test_nonce_attributel   s    s|4=IIIt}555 s|44:s|44:Vb)))FF+++++r   c                 T   |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          j        | j        t          j        | j        d           d S )N   )r    unknownF)r    	use_aesni)r8   r9   r	   r   r   r"   r#   r:   s    r   test_unknown_parametersz EaxTests.test_unknown_parametersv   s    )SWdlCL-	, 	, 	,)SWdlCL $q 	 	: 	: 	:
 	cl$-	! 	! 	! 	! 	! 	!r   c                     dD ]\}t          j        | j        t           j        | j                  } t          ||          d          }|                     |d           ]d S )Nr$   r%   r   r   )r	   r   r   r"   r#   getattrr&   )r(   funcr)   results       r   test_null_encryption_decryptionz(EaxTests.test_null_encryption_decryption   si    ( 	* 	*DWT\3<t}MMMF*WVT**3//FVS))))	* 	*r   c                    t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           t          j        | j        t           j        | j                  }|                    d           |                     t          |j        d           d S )Nr   r   )	r	   r   r   r"   r#   r$   r8   r9   r%   rF   s     r   test_either_encrypt_or_decryptz'EaxTests.test_either_encrypt_or_decrypt   s    s|4=IIIs)V^S999s|4=IIIs)V^S99999r   c                 6   t          j        | j        t           j        | j                  }|                     t          |j        d           t          j        | j        t           j        | j                  }|                     t          |j        d           d S )Nr   ztest1234567890-*)	r	   r   r   r"   r#   r8   r9   r$   r%   rF   s     r   test_data_must_be_bytesz EaxTests.test_data_must_be_bytes   sv    s|4=III)V^5HIIIs|4=III)V^5HIIIIIr   c                    |                      t          t          j        | j        t          j        | j        d           |                      t          t          j        | j        t          j        | j        d           t          dd          D ]n}t          j        | j        t          j        | j        |          }|                    | j	                  \  }}| 
                    t          |          |           ot          j        | j        t          j        | j                  }|                    | j	                  \  }}| 
                    t          |          d           d S )Nr=   )r    mac_len      r   r   )r8   r?   r	   r   r   r"   r#   r@   encrypt_and_digestr   r&   r1   )r(   r\   r)   _macs        r   test_mac_lenzEaxTests.test_mac_len   s7   *cgt|S\ $s 	 	< 	< 	<*cgt|S\ $t 	 	= 	= 	= Q'' 	0 	0GWT\3<t}%,. . .F..t}==FAsSXXw//// s|4=III**4=993S2&&&&&r   c                 T   ddl m} t          j        | j        t          j        | j                  }|                    | j                  \  }} ||d          }t          j        | j        t          j        | j                  }| 	                    t          |j        ||           d S )Nr   )strxor_cr   r=   )Cryptodome.Util.strxorrd   r	   r   r   r"   r#   r_   r   r8   r?   decrypt_and_verify)r(   rd   r)   r+   ra   invalid_macs         r   test_invalid_maczEaxTests.test_invalid_mac   s    333333s|4=III++DM::ChsD))s|4=III*f&?%	' 	' 	' 	' 	'r   c                 n   t          j        | j        t           j        | j                  }|                                }|                     |                                t          |                     t          j        | j        t           j        | j                  }|	                    |           d S rD   )
r	   r   r   r"   r#   	hexdigestr&   digestr   	hexverify)r(   r)   mac_hexs      r   test_hex_maczEaxTests.test_hex_mac   s    s|4=III""$$)G*<*<===s|4=III!!!!!r   c                    t          dd          }t          dd          }t          j        | j        t          j        | j                  }|                    |           |                    |          \  }}d }dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           d}	 |||          D ]}|	|                    |          z  }	| 	                    ||	           |
                    |           dD ]}t          j        | j        t          j        | j                  } |||          D ]}|                    |           d}
 |||          D ]}|
|                    |          z  }
| 	                    ||
           | 	                    |                                |           d S )Nzauthenticated data   r!   r   c                 \      fdt          dt                               D             S )Nc                 *    g | ]}||z            S  rs   ).0ichunk_lengthr   s     r   
<listcomp>zBEaxTests.test_message_chunks.<locals>.break_up.<locals>.<listcomp>   s3     # # #qD1\>)* # # #r   r   )r@   r1   )r   rv   s   ``r   break_upz.EaxTests.test_message_chunks.<locals>.break_up   sJ    # # # # #E!SYY 5" 5" # # # #r   )
r=   r^      rM   
      r   (   P   r>   r   )r   r	   r   r   r"   r#   updater_   r%   r&   verifyr$   rk   )r(   	auth_datar!   r)   
ciphertextref_macrx   rv   chunkr,   ct2s              r   test_message_chunkszEaxTests.test_message_chunks   s    ##7==	";44	s|4=IIIi   $77	BB
G	# 	# 	#
 @ 
	# 
	#LWT\3<t}MMMF!)\:: % %e$$$$C!*l;; - -v~~e,,,Y,,,MM'"""" @ 
	7 
	7LWT\3<t}MMMF!)\:: % %e$$$$C!)\:: - -v~~e,,,Z---V]]__g6666
	7 
	7r   c                    t          | j                  }t          | j                  }t          | j                  }t          | j                  }t	          j        | j        t          j        | j                  }|                    | j                   |                    | j                  }|	                                }t	          j        |t          j        |          }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<   |                    |           | 
                    || j                   d S Nr   s   ry   s   )	bytearrayr   r#   r   r	   r   r"   r~   r$   rk   r&   r    r%   r   )r(   key_banonce_ba	header_badata_bacipher1r+   r   cipher2ct_testtag_testct_batag_bacipher3pt_tests                  r   test_bytearrayzEaxTests.test_bytearray   s[    4<((T]++dm,,	DM**'$,, $/ / / 	t}%%%__T]++nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 4<((T]++dm,,	"3'&, (* * * %rr
&!y!!!'	"1"//%((#bqb	v$-00000r   c                    t          t          | j                            }t          t          | j                            }t          t          | j                            }t          t          | j                            }t          j        | j        t
          j        | j                  }|                    | j                   |	                    | j                  }|
                                }t          j        |t
          j        |          }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<   |                    |           |                     || j                   d S r   )
memoryviewr   r   r#   r   r	   r   r"   r~   r$   rk   r&   r    r%   r   )r(   key_mvnonce_mv	header_mvdata_mvr   r+   r   r   r   r   ct_mvtag_mvr   r   s                  r   test_memoryviewzEaxTests.test_memoryview  s    Idl3344i6677y7788	Yt}5566'$,, $/ / / 	t}%%%__T]++nn'&, (* * * %rr
&!y!!!'	"1"//'**%>>##W%%%h'''666 Idl3344i6677y7788	9R==))IcNN++'&, (* * * %rr
&!y!!!'	"1"//%((#bqb	v$-00000r   c                 t   d}t          j        | j        t           j        | j                  }|                    |          }|                                }t          d          }t          j        | j        t           j        | j                  }|                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|	                    ||          }|                     ||           |                     |d            t          j        | j        t           j        | j                  }|
                    ||          \  }}|                     ||           |                     |d            |                     ||           t          j        | j        t           j        | j                  }|                    |||          }|                     ||           |                     |d            d S Ns   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555r   r>   output)r	   r   r   r"   r#   r$   rk   r   r&   r%   r_   rf   )r(   r*   r)   r+   r   r   restag_outs           r   test_output_paramzEaxTests.test_output_paramL  s   s|4=III^^Bmmoo3s|4=IIInnRn//V$$$d###s|4=IIInnRn//V$$$d###s|4=III00F0CCWV$$$d###g&&&s|4=III''C'??V$$$d#####r   c                 "   d}t          j        | j        t           j        | j                  }|                    |          }t          t          d                    }t          j        | j        t           j        | j                  }|                    ||           |                     ||           t          j        | j        t           j        | j                  }|	                    ||           |                     ||           d S r   )
r	   r   r   r"   r#   r$   r   r   r&   r%   )r(   r*   r)   r+   r   s        r   test_output_param_memoryviewz%EaxTests.test_output_param_memoryviewi  s    s|4=III^^BIcNN++s|4=IIIr&)))V$$$s|4=IIIr&)))V$$$$$r   c                 4   d}d|z  }t          j        | j        t           j        | j                  }|                    |          }t          j        | j        t           j        | j                  }|                     t          |j        |d|z             t          j        | j        t           j        | j                  }|                     t          |j        |d|z             t          |dz
            }t          j        | j        t           j        | j                  }|                     t          |j        ||           t          j        | j        t           j        | j                  }|                     t          |j        ||           d S )Nr      5r      0r   r=   )r	   r   r   r"   r#   r$   r8   r9   r%   r   r?   )r(   LEN_PTr*   r)   r+   shorter_outputs         r   test_output_param_negzEaxTests.test_output_param_negx  sH   F]s|4=III^^Bs|4=III)V^RvNNNs|4=III)V^RvNNN"6A:..s|4=III*fnbPPPs|4=III*fnbPPPPPr   N)__name__
__module____qualname__r   r   r   r#   r   r-   r/   r5   r;   rB   rG   rI   rK   rP   rV   rX   rZ   rb   rh   rn   r   r   r   r   r   r   rs   r   r   r   r   /   s       nY++GnY++G~k2..H~j"--H" " "" " "< < <1 1 1$ $ $< < <= = =, , ,	! 	! 	!* * *: : :J J J' ' '&	' 	' 	'" " "'7 '7 '7R11 11 11f11 11 11f$ $ $:% % %Q Q Q Q Qr   r   c                       e Zd Z edd          Z edd          Z edd          Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd ZdS )EaxFSMTestsr   r   r   r   r   c                 b   t          j        | j        t           j        | j                  }|                    | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           |	                    |           d S rD   )
r	   r   r   r"   r#   r$   r   rk   r%   r   r(   r)   r+   ra   s       r   -test_valid_init_encrypt_decrypt_digest_verifyz9EaxFSMTests.test_valid_init_encrypt_decrypt_digest_verify  s     s|#}. . .^^DM**mmoo s|#}. . .rcr   c                 l   t          j        | j        t           j        | j                  }|                    | j                   |                                }t          j        | j        t           j        | j                  }|                    | j                   |                    |           d S rD   )	r	   r   r   r"   r#   r~   r   rk   r   r(   r)   ra   s      r   $test_valid_init_update_digest_verifyz0EaxFSMTests.test_valid_init_update_digest_verify  s     s|#}. . .dm$$$mmoo s|#}. . .dm$$$cr   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  }|                                }t          j        | j        t           j        | j                  }|                    | j                   |	                    |           |
                    |           d S rD   )r	   r   r   r"   r#   r~   r   r$   rk   r%   r   r   s       r   test_valid_full_pathz EaxFSMTests.test_valid_full_path  s     s|#}. . .dm$$$^^DM**mmoo s|#}. . .dm$$$rcr   c                     t          j        | j        t           j        | j                  }|                                 d S rD   )r	   r   r   r"   r#   rk   rF   s     r   test_valid_init_digestz"EaxFSMTests.test_valid_init_digest  s/    s|4=IIIr   c                    t          j        | j        t           j        | j                  }|                                }t          j        | j        t           j        | j                  }|                    |           d S rD   )r	   r   r   r"   r#   rk   r   r   s      r   test_valid_init_verifyz"EaxFSMTests.test_valid_init_verify  s_    s|4=IIImmoos|4=IIIcr   c                    dD ]}d d| j         | j         dz   fD ]}|d }nt          |          }t          j        | j        t          j        | j                  }||                    |           t          ||          } || j                     || j                     || j                     || j                    d S )NrR   s   333   3r   )	r   r1   r	   r   r   r"   r#   r~   rS   )r(   method_namer   	assoc_lenr)   methods         r   &test_valid_multiple_encrypt_or_decryptz2EaxFSMTests.test_valid_multiple_encrypt_or_decrypt  s    / 	& 	&K"FDM"md24 & &	$ $II #IIs|'+}6 6 6(MM),,, 55t}%%%t}%%%t}%%%t}%%%%&	& 	&r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                                }t          d          D ]*}| 	                    ||                                           +t          j        | j        t           j        | j                  }|                    | j                   t          d          D ]}|
                    |           d S )Nr         )r	   r   r   r"   r#   r~   r   rk   r@   r&   r   )r(   r)   	first_macrA   s       r   $test_valid_multiple_digest_or_verifyz0EaxFSMTests.test_valid_multiple_digest_or_verify  s    s|4=IIIdm$$$MMOO	q 	9 	9AY8888 s|4=IIIdm$$$q 	% 	%AMM)$$$$	% 	%r   c                    t          j        | j        t           j        | j                  }|                    | j                   |                    | j                  \  }}t          j        | j        t           j        | j                  }|                    | j                   |                    ||          }| 	                    | j        |           d S rD   )
r	   r   r   r"   r#   r~   r   r_   rf   r&   )r(   r)   r+   ra   r*   s        r   0test_valid_encrypt_and_digest_decrypt_and_verifyz<EaxFSMTests.test_valid_encrypt_and_digest_decrypt_and_verify  s    s|4=IIIdm$$$++DM::C s|4=IIIdm$$$&&r3//+++++r   c           	      H   dD ]\  }}dD ]}t          j        | j        t           j        | j                  }|r|                    | j                    t          ||          | j                   |                     t          t          ||          | j                   d S )N)rR   )r%   r$   )TFr   )
r	   r   r   r"   r#   r~   r   rS   r8   r9   )r(   method1_namemethod2_nameassoc_data_presentr)   s        r   #test_invalid_mixing_encrypt_decryptz/EaxFSMTests.test_invalid_mixing_encrypt_decrypt  s    +C 		1 		1&L,&3 1 1"s|'+}6 6 6% 1MM$-000---dm<<<!!)WV\-J-J"&-1 1 1 11		1 		1r   c                    dD ]}t          j        | j        t           j        | j                  }|                    | j                   |                                 |                     t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    | j                   d S )N)r$   r~   r   )r	   r   r   r"   r#   r$   r   rk   r8   r9   rS   r_   )r(   r   r)   s      r   +test_invalid_encrypt_or_update_after_digestz7EaxFSMTests.test_invalid_encrypt_or_update_after_digest  s    . 	5 	5KWT\3<t}MMMFNN4=)))MMOOOi)E)E"m- - - WT\3<t}MMMF%%dm4444	5 	5r   c                    t          j        | j        t           j        | j                  }|                    | j                  }|                                }dD ]}t          j        | j        t           j        | j                  }|                    |           |	                    |           | 
                    t          t          ||          | j                   t          j        | j        t           j        | j                  }|                    ||           | 
                    t          t          ||          | j                   d S )Nr   )r%   r~   )r	   r   r   r"   r#   r$   r   rk   r%   r   r8   r9   rS   rf   )r(   r)   r+   ra   r   s        r   +test_invalid_decrypt_or_update_after_verifyz7EaxFSMTests.test_invalid_decrypt_or_update_after_verify  s&   s|4=III^^DM**mmoo. 
	- 
	-KWT\3<t}MMMFNN2MM#i)E)E"m- - - WT\3<t}MMMF%%b#...i)E)E"m- - - -
	- 
	-r   N)r   r   r   r   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r     s        nY++G~k2..H~j"--H         
  & & &$% % %
, 
, 
,1 1 1	5 	5 	5- - - - -r   r   c                   8    e Zd ZdZg dZd eD             Z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                 &    g | ]}d  |D             S )c                 ,    g | ]}t          |          S rs   r   )rt   rA   s     r   rw   z&TestVectorsPaper.<listcomp>.<listcomp>v  s    ...aYq\\...r   rs   )rt   tvs     r   rw   zTestVectorsPaper.<listcomp>v  s'    JJJ2..2...JJJr   c           	         | j         D ]\  }}}}}}t          j        |t          j        |t	          |                    }|                    |           |                    |          \  }}	|                     ||           |                     ||	           t          j        |t          j        |t	          |                    }|                    |           |                    ||          }
|                     ||
           d S )Nr\   )	test_vectorsr	   r   r"   r1   r~   r_   r&   rf   )r(   
assoc_datar*   r+   ra   keyr    r)   r   mac2r,   s              r   runTestzTestVectorsPaper.runTestx  s   373D 	& 	&/JBS%WS#,s3xxHHHFMM*%%%11"55ICR%%%S$''' WS#,s3xxHHHFMM*%%%++B44CR%%%%	& 	&r   N)r   r   r   __doc__test_vectors_hexr  r  rs   r   r   r   r   !  sZ        < <O O Ob KJ9IJJJL& & & & &r   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestVectorsWycheproofc                 `    t           j                            |            || _        d| _        d S )NNone)unittestTestCase__init___wycheproof_warnings_id)r(   wycheproof_warningss     r   r$  zTestVectorsWycheproof.__init__  s,    ""4((($7!r   c                 @    d }t          dddd|i          | _        d S )Nc                     | d         dz  S )NtagSize   rs   )groups    r   
filter_tagz/TestVectorsWycheproof.setUp.<locals>.filter_tag  s    #q((r   )Cipher
wycheproofzaes_eax_test.jsonzWycheproof EAXtag_size)	group_tag)r   r  )r(   r-  s     r   setUpzTestVectorsWycheproof.setUp  sA    	) 	) 	) //G/B/?:Dj9QS S Sr   c                     | j         S N)r&  r:   s    r   shortDescriptionz&TestVectorsWycheproof.shortDescription  s	    xr   c                 ~    |j         r3| j        r.dd l}|                    d| j        d|j        d           d S d S d S )Nr   zWycheproof warning: z ())warningr%  warningswarnr&  comment)r(   r  r9  s      r   r:  zTestVectorsWycheproof.warn  sd    : 	R$3 	ROOOMMM4888RZZZPQQQQQ	R 	R 	R 	Rr   c                 @   dt          |j                  z   | _        	 t          j        |j        t          j        |j        |j                  }nC# t          $ r6}t          |j                  dk    rdt          |          v sJ Y d }~d S d }~ww xY w|                    |j                   |                    |j                  \  }}|j        rM|                     ||j                   |                     ||j                   |                     |           d S d S )NzWycheproof Encrypt EAX Test #r  r   Nonce cannot be empty)stridr&  r	   r   r  r"   ivr0  r?   r1   r~   aadr_   msgvalidr&   r+   r   r:  )r(   r  r)   er+   r   s         r   test_encryptz"TestVectorsWycheproof.test_encrypt  s   2SZZ?	WRVS\25"+NNNFF 	 	 	ru::??'>#a&&'H'H'H'HFFFFF	 	bf++BF33C8 	R'''S"&)))IIbMMMMM	 	s   1A 
B+BBc                 F   dt          |j                  z   | _        	 t          j        |j        t          j        |j        |j                  }nC# t          $ r6}t          |j                  dk    rdt          |          v sJ Y d }~d S d }~ww xY w|                    |j                   	 |                    |j        |j                  }|j        sJ |                     ||j                   |                     |           d S # t          $ r |j        rJ Y d S w xY w)NzWycheproof Decrypt EAX Test #r  r   r=  )r>  r?  r&  r	   r   r  r"   r@  r0  r?   r1   r~   rA  rf   r+   r   rC  r&   rB  r:  )r(   r  r)   rD  r*   s        r   test_decryptz"TestVectorsWycheproof.test_decrypt  s1   2SZZ?	WRVS\25"+NNNFF 	 	 	ru::??'>#a&&'H'H'H'HFFFFF	 	bf	**25"&99B 8OOOR(((IIbMMMMM  	  	  	 x	 s)   1A 
B+BB. D	 	D D c                    dt          |j                  z   | _        t          |j                  dk    st          |j                  dk     rd S t          j        |j        t          j	        |j        |j
                  }|                    |j                   t          |j        dt          |j                  dz
  z  dz             }|                     t          |j        ||j                   d S )Nz%Wycheproof Corrupt Decrypt EAX Test #r   r=   r         )r>  r?  r&  r1   r@  r+   r	   r   r  r"   r0  r~   rA  r   r8   r?   rf   r   )r(   r  r)   
ct_corrupts       r   test_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt  s    :SZZGru::??c"%jj1nnFrubkJJJbfBE7c"%jj1n#=#GHH
*f&?RVTTTTTr   c                     | j         D ]A}|                     |           |                     |           |                     |           Bd S r4  )r  rE  rG  rL  )r(   r  s     r   r  zTestVectorsWycheproof.runTest  s\    ' 	* 	*Bb!!!b!!!%%b))))	* 	*r   N)r   r   r   r$  r2  r5  r:  rE  rG  rL  r  rs   r   r   r  r    s          
S S S  R R R
     &U U U* * * * *r   r  c                   $    e Zd Zed             ZdS )TestOtherCiphersc                 :    ||fd}t          | d|z   |           d S )Nc                 :   |                     t          d|          |j        d          }|                    d          \  }}|                     t          d|          |j        d          }|                    ||          }|                     d|           d S )Nr)   s   noncer   s	   plaintext)r   r   r"   r_   rf   r&   )r(   factorykey_sizer)   r+   ra   r,   s          r   test_templatez3TestOtherCiphers.create_test.<locals>.test_template  s    [[(!C!C!(!1'/ ! 1 1F //==GB[[(!C!C!(!1'/ ! 1 1F ++B44C\3/////r   test_)setattr)clsnamerR  rS  rT  s        r   create_testzTestOtherCiphers.create_test  s;     )0( 	0 	0 	0 	0 	Wt^]33333r   N)r   r   r   classmethodrY  rs   r   r   rO  rO    s-        4 4 [4 4 4r   rO  )DESr
   ARC2CASTBlowfishDES_DES3_ARC2_CAST_	Blowfish_c                    |                      d          }g }|t          t                    z  }|t          t                    z  }|t	                      gz  }|t          |          gz  }|t          t                    z  }|S )Nr'  )getr   r   r   r   r  rO  )configr'  testss      r   	get_testsrh    s     **%:;;E	_X&&&E	_[)))E	!!##E	$%899;;E	_-...ELr   __main__c                  B    t          j        t                                S r4  )r"  	TestSuiterh  rs   r   r   <lambda>rl    s    H&y{{33 r   suite)defaultTest)$r"  binasciir   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr   Cryptodome.Util.py3compatr   r   Cryptodome.Cipherr	   r
   Cryptodome.Hashr   re   r   r   r#  r   r   r   r  rO  r[  r\  r]  r^  rY  r>  rS  ksrh  r   rm  mainrs   r   r   <module>rw     sE  >        9 9 9 9 9 9 C C C C C C 3 3 3 3 3 3 3 3 ' ' ' ' ' ' ' ' $ $ $ $ $ $ ) ) ) ) ) )8 8 8ZQ ZQ ZQ ZQ ZQx  ZQ ZQ ZQz
R- R- R- R- R-(# R- R- R-jd& d& d& d& d&x( d& d& d&NJ* J* J* J* J*H- J* J* J*Z4 4 4 4 4x( 4 4 4* > = = = = = = = = = = = = =   Vcc#,&7&77cl K K K
- > >B  33r77!2D"====
- > >B  33r77!2D"====
- > >B  33r77!2D"====

 F FB  ss2ww!6"EEEE  	 	 	 	 z33EHMg&&&&&& r   