
    ,hN                        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       yy)     N)	unhexlify)load_test_vectors)list_test_cases)tobytes	is_string)AESDES3DES)SHAKE128c                 ^    t        j                  t        |             j                  |      S )N)data)r   newr   read)taglengths     a/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_CBC.pyget_tag_randomr   )   s     <<WS\*//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y)BlockChainingTestskey_128   key_192   iv_128iv_64   data_128c                 X   t        j                  | j                  | j                  | j                        }t        dd      }|j                  |      }t        j                  | j                  | j                  | j                        }|j                  |      }| j                  ||       y )N	plaintext@  )	r   r   r   aes_moder   r   encryptdecryptassertEqualselfcipherptctpt2s        r   test_loopback_128z$BlockChainingTests.test_loopback_1284   sv    t}}dkkBK2^^Bt}}dkkBnnR S!r   c                 X   t        j                  | j                  | j                  | j                        }t        dd      }|j                  |      }t        j                  | j                  | j                  | j                        }|j                  |      }| j                  ||       y )Nr    i   )	r	   r   r   	des3_moder   r   r#   r$   r%   r&   s        r   test_loopback_64z#BlockChainingTests.test_loopback_64=   sv    $,,

CK1^^B$,,

CnnR S!r   c                 Z   t        j                  | j                  | j                        }|j                  }t        j                  | j                  | j                        }|j                  }| j                  ||       | j                  t        |      d       t        j                  | j                  | j                  | j                        }|j                  | j                        }t        j                  | j                  | j                  | j                        }| j                  ||j                  | j                               t        j                  | j                  | j                  | j                        }| j                  ||j                  | j                               y )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iit}}5iiC%S2& t}}dkkB^^DMM*t}}EV^^DMM:;t}}EV^^DMM:;r   c                 |    | j                  t        t        j                  | j                  | j
                  d       y )Ntest1234567890-*r1   )assertRaises	TypeErrorr   r   r   r"   r'   s    r   test_iv_must_be_bytesz(BlockChainingTests.test_iv_must_be_bytesY   s,    )SWWdllDMM2 	 	4r   c                     | j                  t        t        j                  | j                  | j
                  | j                  | j                         y )N)r2   r3   r;   r<   r   r   r   r"   r   r=   s    r   test_only_one_ivz#BlockChainingTests.test_only_one_iv]   s6    )SWWdllDMM![[T[[ 	 	:r   c           	         | j                  t        t        j                  | j                  | j
                  d       | j                  t        t        j                  | j                  | j
                  | j                  d d        | j                  t        t        j                  | j                  | j
                  | j                  dz          y )Nr         0)r;   
ValueErrorr   r   r   r"   r   r=   s    r   test_iv_with_matching_lengthz/BlockChainingTests.test_iv_with_matching_lengthb   s    *cggt||T]]	*cggt||T]]++cr*	,*cggt||T]]++,	.r   c                     t        j                  | j                  | j                  | j                        }| j                  |j                  t         j                         y N)r   r   r   r"   r   r%   
block_sizer'   r(   s     r   test_block_size_128z&BlockChainingTests.test_block_size_128j   s:    t}}dkkB**CNN;r   c                     t        j                  | j                  | j                  | j                        }| j                  |j                  t         j                         y rH   )r	   r   r   r.   r   r%   rI   rJ   s     r   test_block_size_64z%BlockChainingTests.test_block_size_64n   s:    $,,

C**DOO<r   c                    t        j                  | j                  | j                  | j                        }t        dd      D ]&  }| j                  t        |j                  d|z         ( t        j                  | j                  | j                  | j                        }t        dd      D ]&  }| j                  t        |j                  d|z         ( y )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}}dkkB!!BK 	OLj&..$:MN	O t}}dkkB!!BK 	OLj&..$:MN	Or   c                    t        j                  | j                  | j                  | j                        }t        dd      D ]&  }| j                  t        |j                  d|z         ( t        j                  | j                  | j                  | j                        }t        dd      D ]&  }| j                  t        |j                  d|z         ( y )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!!AJ 	OLj&..$:MN	O $,,

C!!AJ 	OLj&..$:MN	Or   c                 P   t        dd      }dD ]  }t        j                  | j                  | j                  | j
                        } t        ||      |       | j                  |j                  | j
                         | j                  |j                  | j
                          y )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/( 	5DWWT\\4==$++FF!GFD!$'VYY4VYY4		5r   c                    | j                  t        t        j                  | j                  | j
                  | j                  d       | j                  t        t        j                  | j                  | j
                  | j                  d       t        j                  | j                  | j
                  | j                  d       y )N   )r2   unknownF)r2   	use_aesnir@   r=   s    r   test_unknown_parametersz*BlockChainingTests.test_unknown_parameters   s}    )SWWdllDMM++q	*)SWWdllDMM![[! 	 	5 	dmmuMr   c                     dD ][  }t        j                  | j                  | j                  | j                        } t        ||      d      }| j                  |d       ] y )NrX   r   )r   r   r   r"   r   rY   r%   )r'   rZ   r(   results       r   test_null_encryption_decryptionz2BlockChainingTests.test_null_encryption_decryption   sR    ( 	*DWWT\\4==$++FF*WVT*3/FVS)	*r   c                    t        j                  | j                  | j                  | j                        }|j                  d       | j                  t        |j                  d       t        j                  | j                  | j                  | j                        }|j                  d       | j                  t        |j
                  d       y )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}}dkkBs)V^^S9t}}dkkBs)V^^S9r   c                 \   t        j                  | j                  | j                  | j                        }| j                  t        |j                  d       t        j                  | j                  | j                  | j                        }| j                  t        |j                  d       y )Nr:   )	r   r   r   r"   r   r;   r<   r#   r$   rJ   s     r   test_data_must_be_bytesz*BlockChainingTests.test_data_must_be_bytes   sl    t}}dkkB)V^^5HIt}}dkkB)V^^5HIr   c                 b   d}t        |      }t        | j                        }t        | j                        }t        j                  | j                  | j
                  | j                        }|j                  |      }t        j                  || j
                  |      }d|d d d|d d |j                  |      }| j                  ||       | j                  |j                  |j                         t        | j                        }t        | j                        }t        j                  | j                  | j
                  | j                        }	|	j                  |      }
t        j                  || j
                  |      }d|d d d|d d |j                  |      }| j                  |
|       y 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   sP   D/ 4<<($++&''$,,t{{Ct$''&$--7$r
#bq	w't$WZZ0 4<<($++&''$,,t{{Ct$''&$--7$r
#bq	w't$r   c                    d}t        t        |            }t        t        | j                              }t        t        | j                              }t	        j
                  | j                  | j                  | j                        }|j                  |      }t	        j
                  || j                  |      }d|d d d|d d |j                  |      }| j                  ||       | j                  |j                  |j                         t        t        | j                              }t        t        | j                              }t	        j
                  | j                  | j                  | j                        }	|	j                  |      }
t	        j
                  || j                  |      }d|d d d|d d |j                  |      }| j                  |
|       y 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   si   Yt_- Idll349T[[12''$,,t{{Ct$''&$--7$r
#bq	w't$WZZ0 Idll349T[[12''$,,t{{Ct$''&$--7$r
#bq	w't$r   c                 $   d}t        j                  d| j                  | j                        }|j	                  |      }t        d      }t        j                  d| j                  | j                        }|j	                  ||      }| j                  ||       | j                  |d        t        j                  d| j                  | j                        }|j                  ||      }| j                  ||       | j                  |d        y 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    $--DKK@^^B3$--DKK@nnRn/V$d#$--DKK@nnRn/V$d#r   c                 :   d}t        j                  d| j                  | j                        }|j	                  |      }t        |      }t        j                  d| j                  | j                        }|j	                  ||      }| j                  ||       | j                  |d        t        |      }t        j                  d| j                  | j                        }|j                  ||      }| j                  ||       | j                  |d        y )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    $--DKK@^^B"$--DKK@nnU5n1U#d#"$--DKK@nnU5n1U#d#r   c                    d}t        j                  d| j                  | j                        }|j	                  |      }t        t        d            }t        j                  d| j                  | j                        }|j	                  ||       | j                  ||       t        j                  d| j                  | j                        }|j                  ||       | j                  ||       y 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    $--DKK@^^BIcN+$--DKK@r&)V$$--DKK@r&)V$r   c                 ,   d}d|z  }t        j                  d| j                  | j                        }|j	                  |      }t        j                  d| j                  | j                        }| j                  t        |j                  |d|z         t        j                  d| j                  | j                        }| j                  t        |j                  |d|z         t        |dz
        }t        j                  d| j                  | j                        }| j                  t        |j                  ||       t        j                  d| j                  | j                        }| j                  t        |j                  ||       y )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]$--DKK@^^B$--DKK@)V^^RvN$--DKK@)V^^RvN"6A:.$--DKK@*fnnbP$--DKK@*fnnb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    Y+GY+GHb)F7A&Ej"-H""<&4:
.<=OO5N*:J%B%B$$$&%Qr   r   c                   <    e Zd Zej                  Zej                  Zy)CbcTestsN)r   r   r   r   MODE_CBCr"   r	   r.   r   r   r   r   r   4  s    ||HIr   r   c                       e Zd Zd Zd Zd Zy)NistBlockChainingVectorsc                    t        d|ddd i      }|y d }|D ]  }t        |      r|}|j                  | _        t	        j
                  |j                  | j                  |j                        }|dk(  r6| j                  |j                  |j                        |j                         |dk(  r6| j                  |j                  |j                        |j                         J  y )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:= 	 	B }	!wwDWWRVVT]]BEE:FK'  !=r}}Mk)  !>M	r   c                    t        d|ddd i      }|y d }|D ]D  }t        |      r|}|j                  | _        t	        j
                  |j                  | j                  |j                        }|dk(  rq|j                  g}t        d      D ]6  }|j                  |j                  |j                               |d   |_        8 | j                  |d   |j                         |d	k(  rr|j                  g}t        d      D ]6  }|j                  |j                  |j                               |d   |_        8 | j                  |d   |j                         EJ  y )
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  sC   ():%0%(8:= 	 	B }	!wwDWWRVVT]]BEE:FK'i"4[ +EJJv~~bll;<#&r7BL+   R"--8k)h"4[ ,EJJv~~bmm<=$'GBM,   R",,7/	r   c                    t        d|ddd i      }|y d }|D ]`  }t        |      r|}|j                  | _        t	        |d      r6t        j                  |j                  | j                  |j                        }n|j                  |j                  k7  r'|j                  |j                  z   |j                  z   }n|j                  |j                  z   }t        j                  || j                  |j                        }|dk(  r7| j                  |j!                  |j"                        |j$                         %|dk(  r7| j                  |j'                  |j$                        |j"                         aJ  y )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  s.   ();%*%(8:= 	 	B }	!wwDr6"$--?77bgg%''BGG+bgg5C''BGG+C#t~~ruu=K'  !=r}}Mk)  !>M-	r   N)r   r   r   r   r   r   r   r   r   r   r   9  s    8!F r   r   c                   T    e Zd Zej                  Zej                  Zej                  Z	y)NistCbcVectorsN)
r   r   r   r   r   r"   r
   r   r	   r.   r   r   r   r   r     s    ||H||HIr   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                 &    | j                  |       y rH   )r   r'   r   s     r   new_funcr         i(r   	test_AES_c                 &    | j                  |       y rH   )r   r   s     r   r   r     r   r   )zTCBCMMT2.rspzTCBCMMT3.rspzTCBCinvperm.rspzTCBCpermop.rspzTCBCsubtab.rspzTCBCvarkey.rspzTCBCvartext.rspc                 &    | j                  |       y 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y)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                  |      }| j	                  |j                  |      |       t        j                  |t        j                  |      }| j	                  |j                  |      |       y )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    ::;	;

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

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

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   N)r   r   r   __doc__r   r   r   r   r   r   r   r     s    @,@,@r   r   c                     g }|t        t              z  }| j                  d      r|t        t              z  }|t        t              z  }|S )N
slow_tests)r   r   getr   r   )configtestss     r   	get_testsr   !  sF    E	_X&&Ezz,00	_-..ELr   __main__c                  <    t        j                  t                     S rH   )unittest	TestSuiter   r   r   r   r   r   +  s    H&&y{3 r   suite)defaultTest)!r   binasciir   Crypto.SelfTest.loaderr   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatr   r   Crypto.Cipherr   r	   r
   Crypto.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      sK  >   4 5 4 ( (  8EQ** EQP! 
ax00 aH-  &  ( ?I!* )NK)3X>?
 $ ?I!* )NK)3X>? x ! @I!* &NL94h?@D@x(( D@N   z3EHMMg& r   