+
    '(jN                     ,   ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIHtH	t	 ^ RI
HtHtHt ^ RIHt R t ! R	 R
] P"                  4      t ! R R]4      t ! R R] P"                  4      t ! R R]4      tRtRt] F  t]3R lt]! ]R],           ]4       K  	  ] F  t]3R lt]! ]R],           ]4       K  	  AARt] F  t]3R lt]! ]R],           ]4       K  	   ! R R] P"                  4      t/ 3R lt]R8X  d   R t] P@                  ! RR7       R# R# )     N)	unhexlify)load_test_vectors)list_test_cases)tobytes	is_string)AESDES3DES)SHAKE128c                 `    \         P                  ! \        V 4      R 7      P                  V4      # ))data)r   newr   read)taglengths   &&T/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Cipher/test_CBC.pyget_tag_randomr   )   s     <<WS\*//77    c                      a  ] tR t^,t o ]! R^4      t]! R^4      t]! R^4      t]! R^4      t]! R^4      t	R t
R tR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tRtV t R# )BlockChainingTestskey_128key_192iv_128iv_64data_128c                \   \         P                  ! V P                  V P                  V P                  4      p\        R R4      pVP                  V4      p\         P                  ! V P                  V P                  V P                  4      pVP                  V4      pV P                  W$4       R# )	plaintextN@  )	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                \   \         P                  ! V P                  V P                  V P                  4      p\        R R4      pVP                  V4      p\         P                  ! V P                  V P                  V P                  4      pVP                  V4      pV P                  W$4       R# )r   Ni   )	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                `   \         P                  ! V P                  V P                  4      pVP                  p\         P                  ! V P                  V P                  4      pVP                  pV P                  W#4       V P                  \        V4      ^4       \         P                  ! V P                  V P                  V P                  4      pVP                  V P                  4      p\         P                  ! V P                  V P                  V P                  R7      pV P                  WAP                  V P                  4      4       \         P                  ! V P                  V P                  V P                  R7      pV P                  WAP                  V P                  4      4       R# )   iv)IVN)r   r   r   r   r2   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 P                  \        \        P                  V P                  V P
                  R R7       R# )test1234567890-*r1   N)assertRaises	TypeErrorr   r   r   r   r$   s   &r   test_iv_must_be_bytes(BlockChainingTests.test_iv_must_be_bytesY   s,    )SWWdllDMM2 	 	4r   c           	         V P                  \        \        P                  V P                  V P
                  V P                  V P                  R 7       R# ))r2   r3   Nr<   r=   r   r   r   r   r   r>   s   &r   test_only_one_iv#BlockChainingTests.test_only_one_iv]   s6    )SWWdllDMM![[T[[ 	 	:r   c                   V P                  \        \        P                  V P                  V P
                  R 4       V P                  \        \        P                  V P                  V P
                  V P                  R,          4       V P                  \        \        P                  V P                  V P
                  V P                  R,           4       R# )r   :N   N   0N)r<   
ValueErrorr   r   r   r   r   r>   s   &r   test_iv_with_matching_length/BlockChainingTests.test_iv_with_matching_lengthb   s    *cggt||T]]	*cggt||T]]++c*	,*cggt||T]]++,	.r   c                    \         P                  ! V P                  V P                  V P                  4      pV P                  VP                  \         P                  4       R # 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                    \         P                  ! V P                  V P                  V P                  4      pV P                  VP                  \         P                  4       R # rL   )r	   r   r   r,   r   r"   rM   rN   s   & r   test_block_size_64%BlockChainingTests.test_block_size_64n   s:    $,,

C**DOO<r   c                   \         P                  ! V P                  V P                  V P                  4      p\        ^^4       F+  pV P                  \        VP                  RV,          4       K-  	  \         P                  ! V P                  V P                  V P                  4      p\        ^^4       F+  pV P                  \        VP                  RV,          4       K-  	  R#       5N)
r   r   r   r   r   ranger<   rH   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                   \         P                  ! V P                  V P                  V P                  4      p\        ^^4       F+  pV P                  \        VP                  RV,          4       K-  	  \         P                  ! V P                  V P                  V P                  4      p\        ^^4       F+  pV P                  \        VP                  RV,          4       K-  	  R# rU   )
r	   r   r   r,   r   rX   r<   rH   r    r!   rY   s   &  r   test_unaligned_data_64)BlockChainingTests.test_unaligned_data_64{   s    $,,

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

C!!AJLj&..$:MN 'r   c                V   \        R R4      pR F  p\        P                  ! V P                  V P                  V P
                  4      p\        W24      ! V4       V P                  VP                  V P
                  4       V P                  VP                  V P
                  4       K  	  R# )r   Nr   r    r!   )
r   r   r   r   r   r   getattrr"   r2   r3   )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           	        V P                  \        \        P                  V P                  V P
                  V P                  ^4       V P                  \        \        P                  V P                  V P
                  V P                  ^R7       \        P                  ! V P                  V P
                  V P                  RR7       R# )   )r2   unknownF)r2   	use_aesniNrB   r>   s   &r   test_unknown_parameters*BlockChainingTests.test_unknown_parameters   s}    )SWWdllDMM++q	*)SWWdllDMM![[! 	 	5 	dmmuMr   c                    R F\  p\         P                  ! V P                  V P                  V P                  4      p\        W!4      ! R4      pV P                  VR4       K^  	  R# )r    r   Nra   )r   r   r   r   r   rb   r"   )r$   rc   r%   results   &   r   test_null_encryption_decryption2BlockChainingTests.test_null_encryption_decryption   sI    (DWWT\\4==$++FFV*3/FVS) )r   c                   \         P                  ! V P                  V P                  V P                  4      pVP                  R 4       V P                  \        VP                  R 4       \         P                  ! V P                  V P                  V P                  4      pVP                  R 4       V P                  \        VP
                  R 4       R# )r   N)	r   r   r   r   r   r    r<   r=   r!   rN   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                b   \         P                  ! V P                  V P                  V P                  4      pV P                  \        VP                  R 4       \         P                  ! V P                  V P                  V P                  4      pV P                  \        VP                  R 4       R# )r;   N)	r   r   r   r   r   r<   r=   r    r!   rN   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                d   Rp\        V4      p\        V P                  4      p\        V P                  4      p\        P                  ! V P                  V P
                  V P                  4      pVP                  V4      p\        P                  ! W0P
                  V4      pRVR&   RVR&   VP                  V4      pV P                  Wh4       V P                  VP                  VP                  4       \        V P                  4      p\        V P                  4      p\        P                  ! V P                  V P
                  V P                  4      p	V	P                  V4      p
\        P                  ! W0P
                  V4      pRVR&   RVR&   VP                  V4      pV P                  W4       R#    1s   :N   NNs   11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111)
	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_bytearray!BlockChainingTests.test_bytearray   s@   D/ 4<<($++&''$,,t{{Ct$''&--7$r
#b	w'$WZZ0 4<<($++&''$,,t{{Ct$''&--7$r
#b	w'$r   c                   Rp\        \        V4      4      p\        \        V P                  4      4      p\        \        V P                  4      4      p\        P
                  ! V P                  V P                  V P                  4      pVP                  V4      p\        P
                  ! W0P                  V4      pRVR&   RVR&   VP                  V4      pV P                  Wh4       V P                  VP                  VP                  4       \        \        V P                  4      4      p\        \        V P                  4      4      p\        P
                  ! V P                  V P                  V P                  4      p	V	P                  V4      p
\        P
                  ! W0P                  V4      pRVR&   RVR&   VP                  V4      pV P                  W4       R# rw   )
memoryviewrz   r   r   r   r   r   r    r"   r2   r!   )r$   r   data_mvkey_mviv_mvr~   r   r   r   r   r   r   r   s   &            r   test_memoryview"BlockChainingTests.test_memoryview   sY   Yt_- Idll349T[[12''$,,t{{Ct$''&--7$r
#b	w'$WZZ0 Idll349T[[12''$,,t{{Ct$''&--7$r
#b	w'$r   c                $   Rp\         P                  ! RV P                  V P                  R7      pVP	                  V4      p\        ^4      p\         P                  ! RV P                  V P                  R7      pVP	                  WR7      pV P                  W44       V P                  VR4       \         P                  ! RV P                  V P                  R7      pVP                  W4R7      pV P                  W4       V P                  VR4       R# rW   r1   outputNs   55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555   4444444444444444r   r   r   r   r    rz   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                :   Rp\         P                  ! RV P                  V P                  R7      pVP	                  V4      p\        V4      p\         P                  ! RV P                  V P                  R7      pVP	                  WDR7      pV P                  W44       V P                  VR4       \        V4      p\         P                  ! RV P                  V P                  R7      pVP                  WfR7      pV P                  W4       V P                  VR4       R# 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                   Rp\         P                  ! RV P                  V P                  R7      pVP	                  V4      p\        \        ^4      4      p\         P                  ! RV P                  V P                  R7      pVP	                  WR7       V P                  W44       \         P                  ! RV P                  V P                  R7      pVP                  W4R7       V P                  W4       R# r   )	r   r   r   r   r    r   rz   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                T   ^pRV,          p\         P                  ! RV P                  V P                  R7      pVP	                  V4      p\         P                  ! RV P                  V P                  R7      pV P                  \        VP                  VRV,          R7       \         P                  ! RV P                  V P                  R7      pV P                  \        VP                  VRV,          R7       \        V^,
          4      p\         P                  ! RV P                  V P                  R7      pV P                  \        VP                  W%R7       \         P                  ! RV P                  V P                  R7      pV P                  \        VP                  WER7       R# )   rW   r1   rG   r   Nr   )
r   r   r   r   r    r<   r=   r!   rz   rH   )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)   r-   r8   r?   rC   rI   rO   rR   r[   r^   rd   rj   rn   rq   rt   r   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r   r   r   ,   s     Y+GY+GHb)F7A&Ej"-H""<&4:
.<=OO5N*:J%B%B$$$&%Q Qr   r   c                   F    ] tR tRt]P
                  t]P
                  tRt	R# )CbcTestsi4  r   N)
r   r   r   r   r   MODE_CBCr   r	   r,   r   r   r   r   r   r   4  s    ||HIr   r   c                   2   a  ] tR tRt o R tR tR tRtV tR# )NistBlockChainingVectorsi9  c                   \        RVRRR /4      pVf   R# RpV F  p\        V4      '       d   TpK  VP                  V n        \        P
                  ! VP                  V P                  VP                  4      pVR8X  d8   V P                  VP                  VP                  4      VP                  4       K  VR8X  d8   V P                  VP                  VP                  4      VP                  4       K  Q h	  R# )CipherzAES CBC KATcountc                     \        V 4      # rL   intxs   &r   <lambda>;NistBlockChainingVectors._do_kat_aes_test.<locals>.<lambda>@      #a&r   N	[ENCRYPT]	[DECRYPT]r   r   )r   r   descdescriptionr   r   keyr   r2   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                   \        RVRRR /4      pVf   R# RpV EFf  p\        V4      '       d   TpK  VP                  V n        \        P
                  ! VP                  V P                  VP                  4      pVR8X  d}   VP                  .p\        R4       F;  pVP                  VP                  VP                  4      4       VR	,          Vn        K=  	  V P                  VR
,          VP                  4       K  VR8X  d~   VP                  .p\        R4       F;  pVP                  VP                  VP                  4      4       VR	,          Vn        K=  	  V P                  VR
,          VP                  4       EKg  Q h	  R# )r   zAES CBC Montecarlor   c                     \        V 4      # rL   r   r   s   &r   r   ;NistBlockChainingVectors._do_mct_aes_test.<locals>.<lambda>\  r   r   Nr   i  r   r   )r   r   r   r   r   r   r   r   r2   rX   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                J   \        RVRRR /4      pVf   R# RpV EF  p\        V4      '       d   TpK  VP                  V n        \	        VR4      '       d8   \
        P                  ! VP                  V P                  VP                  4      pMVP                  VP                  8w  d0   VP                  VP                  ,           VP                  ,           pMVP                  VP                  ,           p\        P                  ! W`P                  VP                  4      pVR8X  d9   V P                  VP!                  VP"                  4      VP$                  4       EKD  VR8X  d9   V P                  VP'                  VP$                  4      VP"                  4       EK  Q h	  R# )	r   zTDES CBC KATr   c                     \        V 4      # rL   r   r   s   &r   r   8NistBlockChainingVectors._do_tdes_test.<locals>.<lambda>  r   r   Nkeysr   r   )r   TDES)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_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   s   @r   r   r   9  s     8!F   r   r   c                   ^    ] tR tRt]P
                  t]P
                  t]	P
                  t
RtR# )NistCbcVectorsi  r   N)r   r   r   r   r   r   r   r
   r   r	   r,   r   r   r   r   r   r     s    ||H||HIr   r   c                 (    V P                  V4       R # rL   )r   r$   r   s   &&r   new_funcr         i(r   	test_AES_c                 (    V P                  V4       R # rL   )r   r   s   &&r   r   r     r   r   c                 (    V P                  V4       R # rL   )r   r   s   &&r   r   r     s    9%r   
test_TDES_c                   6   a  ] tR tRt o RtR tR tR tRtV t	R# )SP800TestVectorsi  zLClass exercising the CBC test vectors found in Section F.2
of NIST SP 800-3Ac                   R pRpRpRp\        V4      p\        V4      p\        V4      p\        V4      p\        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       \        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       R# ) 2b7e151628aed2a6abf7158809cf4f3c 000102030405060708090a0b0c0d0e0fNڀ6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710ڀ7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7r   r   r   r   r"   r    r!   r$   r   r2   r   r   r%   s   &     r   test_aes_128SP800TestVectors.test_aes_128  s    ::;	;

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   c                   R pRpRpRp\        V4      p\        V4      p\        V4      p\        V4      p\        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       \        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       R# )08e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7br   Nr   ڀ4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cdr   r   s   &     r   test_aes_192SP800TestVectors.test_aes_192  s    J:;	;

 nr]i(	z*
cllB/	2J?cllB/
3Y?r   c                   R pRpRpRp\        V4      p\        V4      p\        V4      p\        V4      p\        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       \        P                  ! V\        P                  V4      pV P	                  VP                  V4      V4       R# )@603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4r   Nr   ڀ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   s   @r   r   r     s"     @,@,@ @r   r   c                     . pV\        \        4      ,          pV P                  R 4      '       d   V\        \        4      ,          pV\        \        4      ,          pV# )
slow_tests)r   r   getr   r   )configtestss   & r   	get_testsr  !  sI    E	_X&&Ezz,00	_-..ELr   __main__c                  >    \         P                  ! \        4       4      # rL   )unittest	TestSuiter  r   r   r   r   r   +  s    H&&y{3r   suite)defaultTest)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.rsp)zTCBCMMT2.rspzTCBCMMT3.rspzTCBCinvperm.rspzTCBCpermop.rspzTCBCsubtab.rspzTCBCvarkey.rspzTCBCvartext.rsp)!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   