
    ¿igN                         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mZ d dlmZ d Z G d	 d
e j                  Z G d de          Z G d de j                  Z G d de          ZdZdZeD ]ZefdZ eedez   e           eD ]ZefdZ eedez   e           [[dZeD ]ZefdZ eedez   e            G d de j                  Zi fdZedk    rd Z e j         d           dS dS )     N)	unhexlify)load_test_vectors)list_test_cases)tobytes	is_string)AESDES3DES)SHAKE128c                 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_CBC.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 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 )BlockChainingTestskey_128   key_192   iv_128iv_64   data_128c                 :   t          j        | j        | j        | j                  }t          dd          }|                    |          }t          j        | j        | j        | j                  }|                    |          }|                     ||           d S )N	plaintext@  )	r   r   r   aes_moder   r   encryptdecryptassertEqualselfcipherptctpt2s        r   test_loopback_128z$BlockChainingTests.test_loopback_1284   s    t}dkBBK22^^Bt}dkBBnnR  S!!!!!r   c                 :   t          j        | j        | j        | j                  }t          dd          }|                    |          }t          j        | j        | j        | j                  }|                    |          }|                     ||           d S )Nr    i   )	r	   r   r   	des3_moder   r   r#   r$   r%   r&   s        r   test_loopback_64z#BlockChainingTests.test_loopback_64=   s    $,
CCK11^^B$,
CCnnR  S!!!!!r   c                    t          j        | j        | j                  }|j        }t          j        | j        | j                  }|j        }|                     ||           |                     t          |          d           t          j        | j        | j        | j                  }|	                    | j
                  }t          j        | j        | j        | j                  }|                     ||	                    | j
                             t          j        | j        | j        | j                  }|                     ||	                    | j
                             d S )Nr   iv)IV)r   r   r   r"   r2   assertNotEqualr%   lenr   r#   r   )r'   r(   iv1iv2r*   s        r   test_ivzBlockChainingTests.test_ivF   s    t}55it}55iC%%%S2&&& t}dkBB^^DM**t}EEEV^^DM::;;;t}EEEV^^DM::;;;;;r   c                 l    |                      t          t          j        | j        | j        d           d S )Ntest1234567890-*r1   )assertRaises	TypeErrorr   r   r   r"   r'   s    r   test_iv_must_be_bytesz(BlockChainingTests.test_iv_must_be_bytesY   s:    )SWdlDM2 	 	4 	4 	4 	4 	4r   c                     |                      t          t          j        | j        | j        | j        | j                   d S )N)r2   r3   r;   r<   r   r   r   r"   r   r=   s    r   test_only_one_ivz#BlockChainingTests.test_only_one_iv]   s@    )SWdlDM![T[ 	 	: 	: 	: 	: 	:r   c           	      \   |                      t          t          j        | j        | j        d           |                      t          t          j        | j        | j        | j        d d                    |                      t          t          j        | j        | j        | j        dz              d S )Nr         0)r;   
ValueErrorr   r   r   r"   r   r=   s    r   test_iv_with_matching_lengthz/BlockChainingTests.test_iv_with_matching_lengthb   s    *cgt|T]	 	 	*cgt|T]+crc*	, 	, 	,*cgt|T]+,	. 	. 	. 	. 	.r   c                     t          j        | j        | j        | j                  }|                     |j        t           j                   d S N)r   r   r   r"   r   r%   
block_sizer'   r(   s     r   test_block_size_128z&BlockChainingTests.test_block_size_128j   s<    t}dkBB*CN;;;;;r   c                     t          j        | j        | j        | j                  }|                     |j        t           j                   d S rH   )r	   r   r   r.   r   r%   rI   rJ   s     r   test_block_size_64z%BlockChainingTests.test_block_size_64n   s<    $,
CC*DO<<<<<r   c                 v   t          j        | j        | j        | j                  }t          dd          D ]&}|                     t          |j        d|z             't          j        | j        | j        | j                  }t          dd          D ]&}|                     t          |j	        d|z             'd S )N   r      5)
r   r   r   r"   r   ranger;   rE   r#   r$   r'   r(   wrong_lengths      r   test_unaligned_data_128z*BlockChainingTests.test_unaligned_data_128r   s    t}dkBB!!BKK 	O 	OLj&.$:MNNNNt}dkBB!!BKK 	O 	OLj&.$:MNNNN	O 	Or   c                 v   t          j        | j        | j        | j                  }t          dd          D ]&}|                     t          |j        d|z             't          j        | j        | j        | j                  }t          dd          D ]&}|                     t          |j	        d|z             'd S )NrO   r   rP   )
r	   r   r   r.   r   rQ   r;   rE   r#   r$   rR   s      r   test_unaligned_data_64z)BlockChainingTests.test_unaligned_data_64{   s    $,
CC!!AJJ 	O 	OLj&.$:MNNNN$,
CC!!AJJ 	O 	OLj&.$:MNNNN	O 	Or   c                 ,   t          dd          }dD ]}t          j        | j        | j        | j                  } t          ||          |           |                     |j        | j                   |                     |j	        | j                   d S )Nr   r!   r#   r$   )
r   r   r   r   r"   r   getattrr%   r2   r3   )r'   r   funcr(   s       r   test_IV_iv_attributesz(BlockChainingTests.test_IV_iv_attributes   s    fh//( 	5 	5DWT\4=$+FFF!GFD!!$'''VY444VY4444		5 	5r   c                 6   |                      t          t          j        | j        | j        | j        d           |                      t          t          j        | j        | j        | j        d           t          j        | j        | j        | j        d           d S )N   )r2   unknownF)r2   	use_aesnir@   r=   s    r   test_unknown_parametersz*BlockChainingTests.test_unknown_parameters   s    )SWdlDM+q	* 	* 	*)SWdlDM![! 	 	5 	5 	5 	dmuMMMMMMr   c                     dD ]V}t          j        | j        | j        | j                  } t          ||          d          }|                     |d           Wd S )NrX   r   )r   r   r   r"   r   rY   r%   )r'   rZ   r(   results       r   test_null_encryption_decryptionz2BlockChainingTests.test_null_encryption_decryption   sf    ( 	* 	*DWT\4=$+FFF*WVT**3//FVS))))	* 	*r   c                 r   t          j        | j        | j        | j                  }|                    d           |                     t          |j        d           t          j        | j        | j        | j                  }|                    d           |                     t          |j        d           d S )Nr   )	r   r   r   r"   r   r#   r;   r<   r$   rJ   s     r   test_either_encrypt_or_decryptz1BlockChainingTests.test_either_encrypt_or_decrypt   s    t}dkBBs)V^S999t}dkBBs)V^S99999r   c                    t          j        | j        | j        | j                  }|                     t          |j        d           t          j        | j        | j        | j                  }|                     t          |j        d           d S )Nr:   )	r   r   r   r"   r   r;   r<   r#   r$   rJ   s     r   test_data_must_be_bytesz*BlockChainingTests.test_data_must_be_bytes   sp    t}dkBB)V^5HIIIt}dkBB)V^5HIIIIIr   c                 @   d}t          |          }t          | j                  }t          | j                  }t          j        | j        | j        | j                  }|                    |          }t          j        || j        |          }d|d d<   d|d d<   |                    |          }|                     ||           |                     |j        |j                   t          | j                  }t          | j                  }t          j        | j        | j        | j                  }	|		                    |          }
t          j        || j        |          }d|d d<   d|d d<   |	                    |          }|                     |
|           d S Ns   11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111s      )
	bytearrayr   r   r   r   r"   r#   r%   r2   r$   )r'   r   data_bakey_baiv_bacipher1ref1cipher2ref2cipher3ref3cipher4ref4s                r   test_bytearrayz!BlockChainingTests.test_bytearray   sr   D// 4<(($+&&'$,t{CCt$$'&$-77$rr
#bqb	w''t$$$WZ000 4<(($+&&'$,t{CCt$$'&$-77$rr
#bqb	w''t$$$$$r   c                    d}t          t          |                    }t          t          | j                            }t          t          | j                            }t	          j        | j        | j        | j                  }|                    |          }t	          j        || j        |          }d|d d<   d|d d<   |                    |          }|                     ||           |                     |j	        |j	                   t          t          | j                            }t          t          | j                            }t	          j        | j        | j        | j                  }	|	
                    |          }
t	          j        || j        |          }d|d d<   d|d d<   |
                    |          }|                     |
|           d S ri   )
memoryviewrk   r   r   r   r   r"   r#   r%   r2   r$   )r'   r   data_mvkey_mviv_mvro   rp   rq   rr   rs   rt   ru   rv   s                r   test_memoryviewz"BlockChainingTests.test_memoryview   s   Yt__-- Idl33449T[1122'$,t{CCt$$'&$-77$rr
#bqb	w''t$$$WZ000 Idl33449T[1122'$,t{CCt$$'&$-77$rr
#bqb	w''t$$$$$r   c                 $   d}t          j        d| j        | j                  }|                    |          }t          d          }t          j        d| j        | j                  }|                    ||          }|                     ||           |                     |d            t          j        d| j        | j                  }|                    ||          }|                     ||           |                     |d            d S N   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555   4444444444444444r1      outputr   r   r"   r   r#   rk   r%   r$   )r'   r)   r(   r*   r   ress         r   test_output_paramz$BlockChainingTests.test_output_param   s    $-DK@@@^^B3$-DK@@@nnRn//V$$$d###$-DK@@@nnRn//V$$$d#####r   c                 B   d}t          j        d| j        | j                  }|                    |          }t          |          }t          j        d| j        | j                  }|                    ||          }|                     ||           |                     |d            t          |          }t          j        d| j        | j                  }|                    ||          }|                     ||           |                     |d            d S )Nr   r   r1   r   r   )r'   r)   r(   r*   pt_bar   ct_bas          r   test_output_param_same_bufferz0BlockChainingTests.test_output_param_same_buffer   s   $-DK@@@^^B"$-DK@@@nnU5n11U###d###"$-DK@@@nnU5n11U###d#####r   c                    d}t          j        d| j        | j                  }|                    |          }t          t          d                    }t          j        d| j        | j                  }|                    ||           |                     ||           t          j        d| j        | j                  }|                    ||           |                     ||           d S r   )	r   r   r"   r   r#   ry   rk   r%   r$   )r'   r)   r(   r*   r   s        r   test_output_param_memoryviewz/BlockChainingTests.test_output_param_memoryview  s    $-DK@@@^^BIcNN++$-DK@@@r&)))V$$$$-DK@@@r&)))V$$$$$r   c                    d}d|z  }t          j        d| j        | j                  }|                    |          }t          j        d| j        | j                  }|                     t          |j        |d|z             t          j        d| j        | j                  }|                     t          |j        |d|z             t          |dz
            }t          j        d| j        | j                  }|                     t          |j        ||           t          j        d| j        | j                  }|                     t          |j        ||           d S )Nr   rP   r   r1   rD   r   rO   )
r   r   r"   r   r#   r;   r<   r$   rk   rE   )r'   LEN_PTr)   r(   r*   shorter_outputs         r   test_output_param_negz(BlockChainingTests.test_output_param_neg   s>   F]$-DK@@@^^B$-DK@@@)V^RvNNN$-DK@@@)V^RvNNN"6A:..$-DK@@@*fnbPPP$-DK@@@*fnbPPPPPr   N)__name__
__module____qualname__r   r   r   r   r   r   r,   r/   r8   r>   rA   rF   rK   rM   rT   rV   r[   r`   rc   re   rg   rw   r}   r   r   r   r    r   r   r   r   ,   s       nY++GnY++G^Hb))FN7A&&E~j"--H" " "" " "< < <&4 4 4: : :
. . .< < <= = =O O OO O O5 5 5N N N* * *: : :J J J% % %B% % %B$ $ $$$ $ $&% % %Q Q Q Q Qr   r   c                   *    e Zd Zej        Zej        ZdS )CbcTestsN)r   r   r   r   MODE_CBCr"   r	   r.   r   r   r   r   r   4  s        |HIIIr   r   c                        e Zd Zd Zd Zd ZdS )NistBlockChainingVectorsc                    t          d|ddd i          }|d S d }|D ]}t          |          r|}|j        | _        t	          j        |j        | j        |j                  }|dk    r4| 	                    |
                    |j                  |j                   |dk    r4| 	                    |                    |j                  |j                   J d S )NCipherr   zAES CBC KATcountc                      t          |           S rH   intxs    r   <lambda>z;NistBlockChainingVectors._do_kat_aes_test.<locals>.<lambda>@      #a&& r   	[ENCRYPT]	[DECRYPT])r   r   descdescriptionr   r   keyr"   r2   r%   r#   r    
ciphertextr$   )r'   	file_nametest_vectors	directiontvr(   s         r   _do_kat_aes_testz)NistBlockChainingVectors._do_kat_aes_test;  s    ():%)%(8(8:= = F	 	 	B }} 	!wDWRVT]BE::FK''  !=!=r}MMMMk))  !>!>MMMM	 	r   c                    t          d|ddd i          }|d S d }|D ]?}t          |          r|}|j        | _        t	          j        |j        | j        |j                  }|dk    rv|j        g}t          d          D ]<}|
                    |                    |j                             |d         |_        =|                     |d         |j                   |d	k    rw|j        g}t          d          D ]<}|
                    |                    |j                             |d         |_        =|                     |d         |j                   ?J d S )
Nr   zAES CBC Montecarlor   c                      t          |           S rH   r   r   s    r   r   z;NistBlockChainingVectors._do_mct_aes_test.<locals>.<lambda>\  r   r   r   i  r   )r   r   r   r   r   r   r   r"   r2   rQ   appendr#   r    r%   r   r$   )	r'   r   r   r   r   r(   ctsr   ptss	            r   _do_mct_aes_testz)NistBlockChainingVectors._do_mct_aes_testW  s{   ():%0%(8(8:= = F	 	 	B }} 	!wDWRVT]BE::FK''i"4[[ + +EJJv~~bl;;<<<#&r7BLL  R"-8888k))h"4[[ , ,EJJv~~bm<<===$'GBMM  R",7777/	 	r   c                    t          d|ddd i          }|d S d }|D ]#}t          |          r|}|j        | _        t	          |d          r&t          j        |j        | j        |j	                  }nW|j
        |j        k    r|j
        |j        z   |j        z   }n|j
        |j        z   }t          j        || j        |j	                  }|dk    r4|                     |                    |j                  |j                   |dk    r5|                     |                    |j                  |j                   #J d S )N)r   TDESzTDES CBC KATr   c                      t          |           S rH   r   r   s    r   r   z8NistBlockChainingVectors._do_tdes_test.<locals>.<lambda>  r   r   keysr   r   )r   r   r   r   hasattrr
   r   r   des_moder2   key1key3key2r	   r.   r%   r#   r    r   r$   )r'   r   r   r   r   r(   r   s          r   _do_tdes_testz&NistBlockChainingVectors._do_tdes_testz  sX   ();%*%(8(8:= = F	 	 	B }} 	!wDr6"" >$-??7bg%%'BG+bg5CC'BG+C#t~ru==K''  !=!=r}MMMMk))  !>!>MMMM-	 	r   N)r   r   r   r   r   r   r   r   r   r   r   9  sB          8! ! !F         r   r   c                   8    e Zd Zej        Zej        Zej        Z	dS )NistCbcVectorsN)
r   r   r   r   r   r"   r
   r   r	   r.   r   r   r   r   r     s#        |H|HIIIr   r   )zCBCGFSbox128.rspzCBCGFSbox192.rspzCBCGFSbox256.rspzCBCKeySbox128.rspzCBCKeySbox192.rspzCBCKeySbox256.rspzCBCVarKey128.rspzCBCVarKey192.rspzCBCVarKey256.rspzCBCVarTxt128.rspzCBCVarTxt192.rspzCBCVarTxt256.rspzCBCMMT128.rspzCBCMMT192.rspzCBCMMT256.rsp)zCBCMCT128.rspzCBCMCT192.rspzCBCMCT256.rspc                 0    |                      |           d S rH   )r   r'   r   s     r   new_funcr         i(((((r   	test_AES_c                 0    |                      |           d S rH   )r   r   s     r   r   r     r   r   )zTCBCMMT2.rspzTCBCMMT3.rspzTCBCinvperm.rspzTCBCpermop.rspzTCBCsubtab.rspzTCBCvarkey.rspzTCBCvartext.rspc                 0    |                      |           d S rH   )r   r   s     r   r   r     s    9%%%%%r   
test_TDES_c                   $    e Zd ZdZd Zd Zd ZdS )SP800TestVectorszPClass exercising the CBC test vectors found in Section F.2
    of NIST SP 800-3Ac                    d}d}d}d}t          |          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )N 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7r   r   r   r   r%   r#   r$   r'   r   r2   r    r   r(   s         r   test_aes_128zSP800TestVectors.test_aes_128  s    ::;	;

 nnr]]i((	z**
clB//	22J???clB//
33Y?????r   c                    d}d}d}d}t          |          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )N08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   ڀ4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cdr   r   s         r   test_aes_192zSP800TestVectors.test_aes_192  s    J:;	;

 nnr]]i((	z**
clB//	22J???clB//
33Y?????r   c                    d}d}d}d}t          |          }t          |          }t          |          }t          |          }t          j        |t          j        |          }|                     |                    |          |           t          j        |t          j        |          }|                     |                    |          |           d S )N@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   r   ڀf58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1br   r   s         r   test_aes_256zSP800TestVectors.test_aes_256
  s    Z:;	;

 nnr]]i((	z**
clB//	22J???clB//
33Y?????r   N)r   r   r   __doc__r   r   r   r   r   r   r   r     sV         @ @ @,@ @ @,@ @ @ @ @r   r   c                     g }|t          t                    z  }|                     d          r|t          t                    z  }|t          t                    z  }|S )N
slow_tests)r   r   getr   r   )configtestss     r   	get_testsr   !  sW    E	_X&&&Ezz, 1000	_-...ELr   __main__c                  B    t          j        t                                S rH   )unittest	TestSuiter   r   r   r   r   r   +  s    H&y{{33 r   suite)defaultTest)!r   binasciir   Cryptodome.SelfTest.loaderr   Cryptodome.SelfTest.st_commonr   Cryptodome.Util.py3compatr   r   Cryptodome.Cipherr   r	   r
   Cryptodome.Hashr   r   TestCaser   r   r   r   nist_aes_kat_mmt_filesnist_aes_mct_filesr   r   setattrnist_tdes_filesr   r   r   r   mainr   r   r   <module>r      s  >        8 8 8 8 8 8 9 9 9 9 9 9 8 8 8 8 8 8 8 8 , , , , , , , , , , $ $ $ $ $ $8 8 8EQ EQ EQ EQ EQ* EQ EQ EQP    !   
a a a a ax0 a a aH    -    &  ( ? ?I!* ) ) ) )GNK)3X>>>># ? ?I!* ) ) ) )GNK)3X>>>>x ! @ @I!* & & & &GNL94h????
D@ D@ D@ D@ D@x( D@ D@ D@N      z33EHMg&&&&&& r   