
    N[i                         d dl Z d dlZd dlZd dlZd dlZ G d dej
                        Z G d dej
                        Z G d dej
                        Z G d d	ej
                        Z	e
d
k(  r ej                          yy)    Nc                       e Zd Zd Zd Zy)TestCBC256NISTc                    t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }| j                  t	        j
                  |||      |       y )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        E/var/www/files/kim/lib/python3.12/site-packages/tests/cbc/test_cbc.pytest_cbc256_encryptz"TestCBC256NIST.test_cbc256_encrypt   s    mm  GCWWT2.0
 ]] GCWWT2.0 MM #
 GCWWT2.0	 ]] $
 GCWWT2.0
 	00CDjQ    c                    t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }t         j                  dj                  dd      j                  dd            }| j                  t	        j
                  |||      |       y )Nr   r   r   r	   r
   r   r   )r   r   r   r   r   cbc256_decrypt)r   r   r   r   r   s        r   test_cbc256_decryptz"TestCBC256NIST.test_cbc256_decrypt8   s    mm  GCWWT2.0
 ]] GCWWT2.0 ]] $
 GCWWT2.0
 MM #
 GCWWT2.0	 	00S"EyQr   N)__name__
__module____qualname__r   r    r   r   r   r      s    R4Rr   r   c                   <   e Zd Zdj                  dd      ZdZej                  j                  e	      dz   Z
 ej                  e
      D ]  Ze
dz   ez   Z eedd	      5 Z ej                  eej!                               D ]  Zej%                         \  ZZZZZZZed
k(  rdZeZeZdZdZn
dZeZeZdZdZ eejA                  eej                  jC                  e      d   jC                  d      d   eeeeeee	              	 ddd        y# 1 sw Y   xY w)TestCBC256Cryptographya4  
    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outputN)"r   r   r    r   TEMPLATEPATTERNospathdirname__file__	BASE_PATHlistdiropenfrefinditerreadmatchgroupsr/   r   r   plain_or_cipherbytes1_bytes2r-   r   r   r0   r1   execformatsplitr!   r   r   r#   r#   S   sU    	$  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#"+#-#% $ 
!	 	 	 	s   B'DD	r#   c                   L    e 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)TestCBC256Inputz]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wNz0function takes exactly \d arguments \(\d given\)       )assertRaisesRegex	TypeErrorr   r   r4   urandomr   s    r   &test_cbc256_encrypt_invalid_args_countz6TestCBC256Input.test_cbc256_encrypt_invalid_args_count   L    ##I/bc 	D##BJJrNBJJrNC	D 	D 	D   =AA&c                     | j                  t        | j                        5  t        j                  ddd       d d d        y # 1 sw Y   y xY wN         )rN   rO   TYPE_ERROR_PATTERNr   r   rQ   s    r   %test_cbc256_encrypt_invalid_args_typez5TestCBC256Input.test_cbc256_encrypt_invalid_args_type   ?    ##It/F/FG 	-##Aq!,	- 	- 	-   AAc                     | j                  t        d      5  t        j                  dt	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wNzData must not be emptyr   rM   rL   rN   
ValueErrorr   r   r4   rP   rQ   s    r   test_cbc256_encrypt_empty_dataz.TestCBC256Input.test_cbc256_encrypt_empty_data   N    ##J0IJ 	I##CBBH	I 	I 	I   >AA'c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wNz!Key size must be exactly 32 bytesrL      r`   rQ   s    r   $test_cbc256_encrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_encrypt_invalid_key_size   V    ##J0TU 	T##BJJrNBJJrNBJJrNS	T 	T 	T   AA11A:c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wNz IV size must be exactly 16 bytesrL   rM      r`   rQ   s    r   #test_cbc256_encrypt_invalid_iv_sizez3TestCBC256Input.test_cbc256_encrypt_invalid_iv_size   V    ##J0ST 	T##BJJrNBJJrNBJJrNS	T 	T 	Trj   c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wrK   )rN   rO   r   r   r4   rP   rQ   s    r   &test_cbc256_decrypt_invalid_args_countz6TestCBC256Input.test_cbc256_decrypt_invalid_args_count   rS   rT   c                     | j                  t        | j                        5  t        j                  ddd       d d d        y # 1 sw Y   y xY wrV   )rN   rO   rZ   r   r   rQ   s    r   %test_cbc256_decrypt_invalid_args_typez5TestCBC256Input.test_cbc256_decrypt_invalid_args_type   r\   r]   c                     | j                  t        d      5  t        j                  dt	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wr_   rN   ra   r   r   r4   rP   rQ   s    r   test_cbc256_decrypt_empty_dataz.TestCBC256Input.test_cbc256_decrypt_empty_data   rc   rd   c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wrf   ru   rQ   s    r   $test_cbc256_decrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_decrypt_invalid_key_size   ri   rj   c                     | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d             d d d        y # 1 sw Y   y xY wrl   ru   rQ   s    r   #test_cbc256_decrypt_invalid_iv_sizez3TestCBC256Input.test_cbc256_decrypt_invalid_iv_size   ro   rj   N)r   r   r    rZ   rR   r[   rb   rh   rn   rq   rs   rv   rx   rz   r!   r   r   rI   rI      sB    yD-ITTD-ITTr   rI   c                      e Zd ZdZdZdZdZdj                  dd      Z e	e      D ]i  Z
 eej                  dd	e
 ej                   ej                   d
e      dz         ej                  e       e ej                  e                         k  e	e      D ]i  Z
 eej                  d	de
 ej                   ej                   d
e      dz         ej                  e       e ej                  e                         k y)TestCBC256Random@   rM   rL   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)   r*   rW   )mode1mode2r/   datar   r   N)r   r   r    DATA_CHUNK_MAX_SIZEKEY_SIZEIV_SIZETESTS_AMOUNTr   r2   ranger/   rE   rF   r4   rP   randomrandint	bytearrayr!   r   r   r|   r|      s#   HGL 	$  |$ 

OORZZq2E F KLBJJx(ZRZZ01  		


 |$ 

OORZZq2E F KLBJJx(ZRZZ01  		


r   r|   __main__)r4   r   r<   unittestr   TestCaser   r#   rI   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HMMO r   