
    i                         S SK r S SKrS SKrS SKrS SKr " S S\R
                  5      r " S S\R
                  5      r " S S\R
                  5      r " S S	\R
                  5      r	\
S
:X  a  \R                  " 5         gg)    Nc                        \ rS rSrS rS rSrg)TestCBC256NIST   c                    [         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      nU R                  [        R
                  " X1U5      U5        g )Na
        603DEB10 15CA71BE 2B73AEF0 857D7781
        1F352C07 3B6108D7 2D9810A3 0914DFF4
          
5
        00010203 04050607 08090A0B 0C0D0E0F
        
        6BC1BEE2 2E409F96 E93D7E11 7393172A
        AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
        30C81C46 A35CE411 E5FBC119 1A0A52EF
        F69F2445 DF4F9B17 AD2B417B E66C3710
        
        F58C4C04 D6E5F1BA 779EABFB 5F7BFBD6
        9CFC4E96 7EDB808D 679F777B C6702C7D
        39F23369 A9D9BACF A530E263 04231461
        B2EB05E2 C39BE9FC DA6C1907 8C6A9D1B
        )bytesfromhexreplaceassertEqualtgcryptocbc256_encrypt)selfkeyiv	plaintext
ciphertexts        ?/app/mltbenv/lib/python3.13/site-packages/tests/cbc/test_cbc.pytest_cbc256_encrypt"TestCBC256NIST.test_cbc256_encrypt   s    mm  GCWWT2.0
 ]] GCWWT2.0 MM #
 GCWWT2.0	 ]] $
 GCWWT2.0
 	00DjQ    c                    [         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      n[         R                  SR                  SS5      R                  SS5      5      nU R                  [        R
                  " X1U5      U5        g )Nr   r   r	   r
   r   r   r   )r   r   r   r   r   cbc256_decrypt)r   r   r   r   r   s        r   test_cbc256_decrypt"TestCBC256NIST.test_cbc256_decrypt8   s    mm  GCWWT2.0
 ]] GCWWT2.0 ]] $
 GCWWT2.0
 MM #
 GCWWT2.0	 	00"EyQr    N)__name__
__module____qualname____firstlineno__r   r   __static_attributes__r!   r   r   r   r      s    R4Rr   r   c                   L   \ rS rSrSR	                  SS5      rSr\R                  R                  \
5      S-   r\R                  " \5       H  r\S-   \-   r\" \SS	S
9 r\R                   " \\R#                  5       5       H  r\R'                  5       u  rrrrrrr\S:X  a  Sr\r\rSrSrO
Sr\r\rSrSr\ " \RC                  \\R                  RE                  \5      S   RE                  S5      S   \\\\\\\S9	5        M     SSS5        M     Sr#g! , (       d  f       M  = f)TestCBC256CryptographyS   a4  
    def test_cbc256_{mode}_{name}_{count}(self):
        key = bytes.fromhex("{key}")
        iv = bytes.fromhex("{iv}")
        plaintext = bytes.fromhex("{plaintext}")
        ciphertext = bytes.fromhex("{ciphertext}")
    
        self.assertEqual(tgcrypto.cbc256_{mode}({input}, key, iv), {output})
    
    r
   zfCOUNT = (\d+)\nKEY = (\w+)\nIV = (\w+)\n(PLAINTEXT|CIPHERTEXT) = (\w+)\n(PLAINTEXT|CIPHERTEXT) = (\w+)z/vectors/rzutf-8)encoding	PLAINTEXTencryptr   r   decrypt.r   )	modenamecountr   r   r   r   inputoutputNr!   )$r"   r#   r$   r%   r   TEMPLATEPATTERNospathdirname__file__	BASE_PATHlistdiropenfrefinditerreadmatchgroupsr5   r   r   plain_or_cipherbytes1_bytes2r3   r   r   r6   r7   execformatsplitr&   r!   r   r   r(   r(   S   s>    	$  xG)J6I

9%3%$g.!Waffh7EJ\\^BsBF"k1$D &I!'J'E)F$D &I!'J(E(FOO!WW]]404::3?B#"+#-#% $ 
! 8 /. & /.s   B'D
D#	r(   c                   T    \ 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)TestCBC256Input   z]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c                     U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = fNz0function takes exactly \d arguments \(\d given\)       )assertRaisesRegex	TypeErrorr   r   r:   urandomr   s    r   &test_cbc256_encrypt_invalid_args_count6TestCBC256Input.test_cbc256_encrypt_invalid_args_count   @    ##I/bc##BJJrNBJJrNC dcc   A A  
A.c                     U R                  [        U R                  5         [        R                  " SSS5        S S S 5        g ! , (       d  f       g = fN         )rU   rV   TYPE_ERROR_PATTERNr   r   rX   s    r   %test_cbc256_encrypt_invalid_args_type5TestCBC256Input.test_cbc256_encrypt_invalid_args_type   7    ##It/F/FG##Aq!, HGG   A
Ac                     U R                  [        S5         [        R                  " S[        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = fNzData must not be emptyr   rT   rS   rU   
ValueErrorr   r   r:   rW   rX   s    r   test_cbc256_encrypt_empty_data.TestCBC256Input.test_cbc256_encrypt_empty_data   B    ##J0IJ##CBBH KJJ   AA!!
A/c                    U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = fNz!Key size must be exactly 32 bytesrS      ri   rX   s    r   $test_cbc256_encrypt_invalid_key_size4TestCBC256Input.test_cbc256_encrypt_invalid_key_size   J    ##J0TU##BJJrNBJJrNBJJrNS VUU   AA55
Bc                    U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = fNz IV size must be exactly 16 bytesrS   rT      ri   rX   s    r   #test_cbc256_encrypt_invalid_iv_size3TestCBC256Input.test_cbc256_encrypt_invalid_iv_size   J    ##J0ST##BJJrNBJJrNBJJrNS UTTru   c                     U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = frR   )rU   rV   r   r   r:   rW   rX   s    r   &test_cbc256_decrypt_invalid_args_count6TestCBC256Input.test_cbc256_decrypt_invalid_args_count   r[   r\   c                     U R                  [        U R                  5         [        R                  " SSS5        S S S 5        g ! , (       d  f       g = fr^   )rU   rV   rb   r   r   rX   s    r   %test_cbc256_decrypt_invalid_args_type5TestCBC256Input.test_cbc256_decrypt_invalid_args_type   re   rf   c                     U R                  [        S5         [        R                  " S[        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = frh   rU   rj   r   r   r:   rW   rX   s    r   test_cbc256_decrypt_empty_data.TestCBC256Input.test_cbc256_decrypt_empty_data   rm   rn   c                    U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = frp   r   rX   s    r   $test_cbc256_decrypt_invalid_key_size4TestCBC256Input.test_cbc256_decrypt_invalid_key_size   rt   ru   c                    U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = frw   r   rX   s    r   #test_cbc256_decrypt_invalid_iv_size3TestCBC256Input.test_cbc256_decrypt_invalid_iv_size   r{   ru   r!   N)r"   r#   r$   r%   rb   rY   rc   rk   rr   ry   r}   r   r   r   r   r&   r!   r   r   rO   rO      sB    yD-ITTD-ITTr   rO   c                      \ rS rSrSrSrSrSrSR                  SS5      r	\
" \5       Hg  r\" \	R                  S	S
\\R                  " \R"                  " S\5      S-  5      \R                  " \5      \" \R                  " \5      5      S95        Mi     \
" \5       Hg  r\" \	R                  S
S	\\R                  " \R"                  " S\5      S-  5      \R                  " \5      \" \R                  " \5      5      S95        Mi     Srg)TestCBC256Random   @   rT   rS   i  a  
    def test_cbc256_random_{mode1}_{count}(self):
        data = {data}
        key = {key}
        iv = {iv}
        iv_copy = iv.copy()

        a = tgcrypto.cbc256_{mode1}(data, key, iv)
        b = tgcrypto.cbc256_{mode2}(a, key, iv_copy)

        self.assertEqual(data, b)
    r*   r
   r/   r0   r_   )mode1mode2r5   datar   r   r!   N)r"   r#   r$   r%   DATA_CHUNK_MAX_SIZEKEY_SIZEIV_SIZETESTS_AMOUNTr   r8   ranger5   rK   rL   r:   rW   randomrandint	bytearrayr&   r!   r   r   r   r      s	   HGL 	$  |$OOZZq2E F KLJJx(RZZ01  		
 % |$OOZZq2E F KLJJx(RZZ01  		
 %r   r   __main__)r:   r   rB   unittestr   TestCaser   r(   rO   r   r"   mainr!   r   r   <module>r      s~   & 
  	  5RX&& 5Rp1X.. 1h)Th'' )TX*
x(( *
Z zMMO r   