
    9iN                        S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	  S SK
JrJrJr  S SKJr  S r " S	 S
\ R"                  5      r " S S\5      r " S S\ R"                  5      r " S S\5      rSrSr\ H  r\4S jr\" \S\-   \5        M     \ H  r\4S jr\" \S\-   \5        M     CCSr\ H  r\4S jr\" \S\-   \5        M      " S S\ R"                  5      r0 4S jr\S:X  a  S r\ R@                  " SS9  gg)     N)	unhexlify)load_test_vectors)list_test_cases)tobytes	is_string)AESDES3DES)SHAKE128c                 Z    [         R                  " [        U 5      S9R                  U5      $ )N)data)r   newr   read)taglengths     _/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Cipher/test_CBC.pyget_tag_randomr   )   s     <<WS\*//77    c                       \ rS rSr\" SS5      r\" SS5      r\" SS5      r\" SS5      r\" S	S5      r	S
 r
S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg )!BlockChainingTests,   key_128   key_192   iv_128iv_64   data_128c                 Z   [         R                  " U R                  U R                  U R                  5      n[        SS5      nUR                  U5      n[         R                  " U R                  U R                  U R                  5      nUR                  U5      nU R                  X$5        g )N	plaintext@  )	r   r   r   aes_moder   r   encryptdecryptassertEqualselfcipherptctpt2s        r   test_loopback_128$BlockChainingTests.test_loopback_1284   st    t}}dkkBK2^^Bt}}dkkBnnR !r   c                 Z   [         R                  " U R                  U R                  U R                  5      n[        SS5      nUR                  U5      n[         R                  " U R                  U R                  U R                  5      nUR                  U5      nU R                  X$5        g )Nr!   i   )	r	   r   r   	des3_moder   r   r$   r%   r&   r'   s        r   test_loopback_64#BlockChainingTests.test_loopback_64=   st    $,,

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

CnnR !r   c                 R   [         R                  " U R                  U R                  5      nUR                  n[         R                  " U R                  U R                  5      nUR                  nU R                  X#5        U R                  [        U5      S5        [         R                  " U R                  U R                  U R                  5      nUR                  U R                  5      n[         R                  " U R                  U R                  U R                  S9nU R                  XAR                  U R                  5      5        [         R                  " U R                  U R                  U R                  S9nU R                  XAR                  U R                  5      5        g )Nr   iv)IV)r   r   r   r#   r5   assertNotEqualr&   lenr   r$   r   )r(   r)   iv1iv2r+   s        r   test_ivBlockChainingTests.test_ivF   s
   t}}5iit}}5iiC%S2& t}}dkkB^^DMM*t}}E^^DMM:;t}}E^^DMM:;r   c                 v    U R                  [        [        R                  U R                  U R
                  SS9  g )Ntest1234567890-*r4   )assertRaises	TypeErrorr   r   r   r#   r(   s    r   test_iv_must_be_bytes(BlockChainingTests.test_iv_must_be_bytesY   s,    )SWWdllDMM2 	 	4r   c           	          U R                  [        [        R                  U R                  U R
                  U R                  U R                  S9  g )N)r5   r6   r?   r@   r   r   r   r#   r   rA   s    r   test_only_one_iv#BlockChainingTests.test_only_one_iv]   s6    )SWWdllDMM![[T[[ 	 	:r   c           	         U R                  [        [        R                  U R                  U R
                  S5        U R                  [        [        R                  U R                  U R
                  U R                  S S 5        U R                  [        [        R                  U R                  U R
                  U R                  S-   5        g )Nr         0)r?   
ValueErrorr   r   r   r#   r   rA   s    r   test_iv_with_matching_length/BlockChainingTests.test_iv_with_matching_lengthb   s    *cggt||T]]	*cggt||T]]++cr*	,*cggt||T]]++,	.r   c                     [         R                  " U R                  U R                  U R                  5      nU R                  UR                  [         R                  5        g N)r   r   r   r#   r   r&   
block_sizer(   r)   s     r   test_block_size_128&BlockChainingTests.test_block_size_128j   s:    t}}dkkB**CNN;r   c                     [         R                  " U R                  U R                  U R                  5      nU R                  UR                  [         R                  5        g rO   )r	   r   r   r0   r   r&   rP   rQ   s     r   test_block_size_64%BlockChainingTests.test_block_size_64n   s:    $,,

C**DOO<r   c                    [         R                  " U R                  U R                  U R                  5      n[        SS5       H'  nU R                  [        UR                  SU-  5        M)     [         R                  " U R                  U R                  U R                  5      n[        SS5       H'  nU R                  [        UR                  SU-  5        M)     g )N   r      5)
r   r   r   r#   r   ranger?   rK   r$   r%   r(   r)   wrong_lengths      r   test_unaligned_data_128*BlockChainingTests.test_unaligned_data_128r   s    t}}dkkB!!BKLj&..$:MN ( t}}dkkB!!BKLj&..$:MN (r   c                    [         R                  " U R                  U R                  U R                  5      n[        SS5       H'  nU R                  [        UR                  SU-  5        M)     [         R                  " U R                  U R                  U R                  5      n[        SS5       H'  nU R                  [        UR                  SU-  5        M)     g )NrX   r   rY   )
r	   r   r   r0   r   rZ   r?   rK   r$   r%   r[   s      r   test_unaligned_data_64)BlockChainingTests.test_unaligned_data_64{   s    $,,

C!!AJLj&..$:MN ' $,,

C!!AJLj&..$:MN 'r   c                 T   [        SS5      nS H  n[        R                  " U R                  U R                  U R
                  5      n[        X25      " U5        U R                  UR                  U R
                  5        U R                  UR                  U R
                  5        M     g )Nr   r"   r$   r%   )
r   r   r   r   r#   r   getattrr&   r5   r6   )r(   r   funcr)   s       r   test_IV_iv_attributes(BlockChainingTests.test_IV_iv_attributes   ss    fh/(DWWT\\4==$++FFF!$'VYY4VYY4	 )r   c           	         U R                  [        [        R                  U R                  U R
                  U R                  S5        U R                  [        [        R                  U R                  U R
                  U R                  SS9  [        R                  " U R                  U R
                  U R                  SS9  g )N   )r5   unknownF)r5   	use_aesnirE   rA   s    r   test_unknown_parameters*BlockChainingTests.test_unknown_parameters   s}    )SWWdllDMM++q	*)SWWdllDMM![[! 	 	5 	dmmuMr   c                     S H\  n[         R                  " U R                  U R                  U R                  5      n[        X!5      " S5      nU R                  US5        M^     g )Nrc   r   )r   r   r   r#   r   rd   r&   )r(   re   r)   results       r   test_null_encryption_decryption2BlockChainingTests.test_null_encryption_decryption   sI    (DWWT\\4==$++FFV*3/FVS) )r   c                    [         R                  " U R                  U R                  U R                  5      nUR                  S5        U R                  [        UR                  S5        [         R                  " U R                  U R                  U R                  5      nUR                  S5        U R                  [        UR
                  S5        g )Nr   )	r   r   r   r#   r   r$   r?   r@   r%   rQ   s     r   test_either_encrypt_or_decrypt1BlockChainingTests.test_either_encrypt_or_decrypt   s    t}}dkkBs)V^^S9t}}dkkBs)V^^S9r   c                 `   [         R                  " U R                  U R                  U R                  5      nU R                  [        UR                  S5        [         R                  " U R                  U R                  U R                  5      nU R                  [        UR                  S5        g )Nr>   )	r   r   r   r#   r   r?   r@   r$   r%   rQ   s     r   test_data_must_be_bytes*BlockChainingTests.test_data_must_be_bytes   sl    t}}dkkB)V^^5HIt}}dkkB)V^^5HIr   c                 b   Sn[        U5      n[        U R                  5      n[        U R                  5      n[        R                  " U R                  U R
                  U R                  5      nUR                  U5      n[        R                  " X0R
                  U5      nSUS S& SUS S& UR                  U5      nU R                  Xh5        U R                  UR                  UR                  5        [        U R                  5      n[        U R                  5      n[        R                  " U R                  U R
                  U R                  5      n	U	R                  U5      n
[        R                  " X0R
                  U5      nSUS S& SUS S& UR                  U5      nU R                  X5        g Ns   11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111s      )
	bytearrayr   r   r   r   r#   r$   r&   r5   r%   )r(   r   data_bakey_baiv_bacipher1ref1cipher2ref2cipher3ref3cipher4ref4s                r   test_bytearray!BlockChainingTests.test_bytearray   sH   D/ 4<<($++&''$,,t{{Ct$''&--7$r
#bq	w'$WZZ0 4<<($++&''$,,t{{Ct$''&--7$r
#bq	w'$r   c                    Sn[        [        U5      5      n[        [        U R                  5      5      n[        [        U R                  5      5      n[        R
                  " U R                  U R                  U R                  5      nUR                  U5      n[        R
                  " X0R                  U5      nSUS S& SUS S& UR                  U5      nU R                  Xh5        U R                  UR                  UR                  5        [        [        U R                  5      5      n[        [        U R                  5      5      n[        R
                  " U R                  U R                  U R                  5      n	U	R                  U5      n
[        R
                  " X0R                  U5      nSUS S& SUS S& UR                  U5      nU R                  X5        g ry   )
memoryviewr{   r   r   r   r   r#   r$   r&   r5   r%   )r(   r   data_mvkey_mviv_mvr   r   r   r   r   r   r   r   s                r   test_memoryview"BlockChainingTests.test_memoryview   sa   Yt_- Idll349T[[12''$,,t{{Ct$''&--7$r
#bq	w'$WZZ0 Idll349T[[12''$,,t{{Ct$''&--7$r
#bq	w'$r   c                    Sn[         R                  " SU R                  U R                  S9nUR	                  U5      n[        S5      n[         R                  " SU R                  U R                  S9nUR	                  XS9nU R                  X45        U R                  US 5        [         R                  " SU R                  U R                  S9nUR                  X4S9nU R                  X5        U R                  US 5        g N   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555   4444444444444444r4      outputr   r   r#   r   r$   r{   r&   r%   )r(   r*   r)   r+   r   ress         r   test_output_param$BlockChainingTests.test_output_param   s    $--DKK@^^B3$--DKK@nnRn/$d#$--DKK@nnRn/$d#r   c                    Sn[         R                  " SU R                  U R                  S9nUR	                  U5      n[        U5      n[         R                  " SU R                  U R                  S9nUR	                  XDS9nU R                  X45        U R                  US 5        [        U5      n[         R                  " SU R                  U R                  S9nUR                  XfS9nU R                  X5        U R                  US 5        g )Nr   r   r4   r   r   )r(   r*   r)   r+   pt_bar   ct_bas          r   test_output_param_same_buffer0BlockChainingTests.test_output_param_same_buffer   s    $--DKK@^^B"$--DKK@nnUn1#d#"$--DKK@nnUn1#d#r   c                    Sn[         R                  " SU R                  U R                  S9nUR	                  U5      n[        [        S5      5      n[         R                  " SU R                  U R                  S9nUR	                  XS9  U R                  X45        [         R                  " SU R                  U R                  S9nUR                  X4S9  U R                  X5        g r   )	r   r   r#   r   r$   r   r{   r&   r%   )r(   r*   r)   r+   r   s        r   test_output_param_memoryview/BlockChainingTests.test_output_param_memoryview  s    $--DKK@^^BIcN+$--DKK@r)$$--DKK@r)$r   c                    SnSU-  n[         R                  " SU R                  U R                  S9nUR	                  U5      n[         R                  " SU R                  U R                  S9nU R                  [        UR                  USU-  S9  [         R                  " SU R                  U R                  S9nU R                  [        UR                  USU-  S9  [        US-
  5      n[         R                  " SU R                  U R                  S9nU R                  [        UR                  X%S9  [         R                  " SU R                  U R                  S9nU R                  [        UR                  XES9  g )Nr   rY   r   r4   rJ   r   rX   )
r   r   r#   r   r$   r?   r@   r%   r{   rK   )r(   LEN_PTr*   r)   r+   shorter_outputs         r   test_output_param_neg(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____firstlineno__r   r   r   r   r   r   r-   r1   r;   rB   rF   rL   rR   rU   r]   r`   rf   rl   rp   rs   rv   r   r   r   r   r   r   __static_attributes__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                   D    \ rS rSr\R
                  r\R
                  rSr	g)CbcTestsi4  r   N)
r   r   r   r   r   MODE_CBCr#   r	   r0   r   r   r   r   r   r   4  s    ||HIr   r   c                   &    \ rS rSrS rS rS rSrg)NistBlockChainingVectorsi9  c                    [        SUSSS 05      nUc  g S nU H  n[        U5      (       a  UnM  UR                  U l        [        R
                  " UR                  U R                  UR                  5      nUS:X  a7  U R                  UR                  UR                  5      UR                  5        M  US:X  a7  U R                  UR                  UR                  5      UR                  5        M   e   g )NCipherr   zAES CBC KATcountc                     [        U 5      $ rO   intxs    r   <lambda>;NistBlockChainingVectors._do_kat_aes_test.<locals>.<lambda>@      #a&r   	[ENCRYPT]	[DECRYPT])r   r   descdescriptionr   r   keyr#   r5   r&   r$   r!   
ciphertextr%   )r(   	file_nametest_vectors	directiontvr)   s         r   _do_kat_aes_test)NistBlockChainingVectors._do_kat_aes_test;  s    ():%)%(8:= 	B }}	!wwDWWRVVT]]BEE:FK'  !=r}}Mk)  !>Mu r   c                    [        SUSSS 05      nUc  g S nU GHS  n[        U5      (       a  UnM  UR                  U l        [        R
                  " UR                  U R                  UR                  5      nUS:X  at  UR                  /n[        S5       H7  nUR                  UR                  UR                  5      5        US   Ul        M9     U R                  US   UR                  5        M  US	:X  au  UR                  /n[        S5       H7  nUR                  UR                  UR                  5      5        US   Ul        M9     U R                  US   UR                  5        GMT   e   g )
Nr   zAES CBC Montecarlor   c                     [        U 5      $ rO   r   r   s    r   r   ;NistBlockChainingVectors._do_mct_aes_test.<locals>.<lambda>\  r   r   r   i  r   )r   r   r   r   r   r   r   r#   r5   rZ   appendr$   r!   r&   r   r%   )	r(   r   r   r   r   r)   ctsr   ptss	            r   _do_mct_aes_test)NistBlockChainingVectors._do_mct_aes_testW  s8   ():%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u/ r   c                 "   [        SUSSS 05      nUc  g S nU GHq  n[        U5      (       a  UnM  UR                  U l        [	        US5      (       a7  [
        R                  " UR                  U R                  UR                  5      nOUR                  UR                  :w  a'  UR                  UR                  -   UR                  -   nOUR                  UR                  -   n[        R                  " X`R                  UR                  5      nUS:X  a8  U R                  UR!                  UR"                  5      UR$                  5        GM4  US:X  a8  U R                  UR'                  UR$                  5      UR"                  5        GMr   e   g )N)r   TDESzTDES CBC KATr   c                     [        U 5      $ rO   r   r   s    r   r   8NistBlockChainingVectors._do_tdes_test.<locals>.<lambda>  r   r   keysr   r   )r   r   r   r   hasattrr
   r   r   des_moder5   key1key3key2r	   r0   r&   r$   r!   r   r%   )r(   r   r   r   r   r)   r   s          r   _do_tdes_test&NistBlockChainingVectors._do_tdes_testz  s.   ();%*%(8:= 	B }}	!wwDr6""$--?77bgg%''BGG+bgg5C''BGG+C#~~ruu=K'  !=r}}Mk)  !>Mu- r   )r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   9  s    8!F r   r   c                   \    \ rS rSr\R
                  r\R
                  r\	R
                  r
Srg)NistCbcVectorsi  r   N)r   r   r   r   r   r   r#   r
   r   r	   r0   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                 &    U R                  U5        g rO   )r   r(   r   s     r   new_funcr         i(r   	test_AES_c                 &    U R                  U5        g rO   )r   r   s     r   r   r     r   r   )zTCBCMMT2.rspzTCBCMMT3.rspzTCBCinvperm.rspzTCBCpermop.rspzTCBCsubtab.rspzTCBCvarkey.rspzTCBCvartext.rspc                 &    U R                  U5        g rO   )r   r   s     r   r   r     s    9%r   
test_TDES_c                   *    \ rS rSrSrS rS rS rSrg)SP800TestVectorsi  zLClass exercising the CBC test vectors found in Section F.2
of NIST SP 800-3Ac                    SnSnSnSn[        U5      n[        U5      n[        U5      n[        U5      n[        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        [        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        g )N 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7r   r   r   r   r&   r$   r%   r(   r   r5   r!   r   r)   s         r   test_aes_128SP800TestVectors.test_aes_128  s    ::;	;

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   c                    SnSnSnSn[        U5      n[        U5      n[        U5      n[        U5      n[        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        [        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        g )N08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   r   ڀ4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cdr   r   s         r   test_aes_192SP800TestVectors.test_aes_192  s    J:;	;

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   c                    SnSnSnSn[        U5      n[        U5      n[        U5      n[        U5      n[        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        [        R                  " U[        R                  U5      nU R	                  UR                  U5      U5        g )N@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   r   ڀf58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1br   r   s         r   test_aes_256SP800TestVectors.test_aes_256
  s    Z:;	;

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   r   N)	r   r   r   r   __doc__r   r   r   r   r   r   r   r   r     s    @,@,@r   r   c                     / nU[        [        5      -  nU R                  S5      (       a  U[        [        5      -  nU[        [        5      -  nU$ )N
slow_tests)r   r   getr   r   )configtestss     r   	get_testsr  !  sI    E	_X&&Ezz,00	_-..ELr   __main__c                  >    [         R                  " [        5       5      $ rO   )unittest	TestSuiter  r   r   r   r   r   +  s    H&&y{3r   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     s8  >   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MMg& r   