
    h                          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                     dS dS )    Nc                       e Zd Zd Zd ZdS )TestCBC256NISTc                 j   t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }|                     t	          j        |||          |           d S )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        R/var/www/html/auto_sub_bot/venv/lib/python3.11/site-packages/tests/cbc/test_cbc.pytest_cbc256_encryptz"TestCBC256NIST.test_cbc256_encrypt   s   mm  GCWWT2..0 0
 ]] GCWWT2..0 0 MM #
 GCWWT2..0 0	 ]] $
 GCWWT2..0 0
 	0CDDjQQQQQ    c                 j   t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }t                               d                    dd                              dd                    }|                     t	          j        |||          |           d S )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 0
 ]] GCWWT2..0 0 ]] $
 GCWWT2..0 0
 MM #
 GCWWT2..0 0	 	0S"EEyQQQQQr   N)__name__
__module____qualname__r   r    r   r   r   r      s:        R R R4R R R R Rr   r   c                   r   e Zd Zd                    dd          ZdZe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                                          D ]Ze                                \  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                     eej        !                    e          d         !                    d          d         eeeeeee	  	                   	 ddd           n# 1 swxY w Y   dS )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   s        	$  xG))J6I
9%%    3%T$g... 	!$Waffhh77  EJ\\^^BsBF"k11$D &I!'J'E)FF$D &I!'J(E(FOO!W]]4004::3??B#"+#-#% $ 
 
   !	 	 	 	 	 	 	 	 	 	 	 	 	 	 	   s   "B<D++D/	2D/	r#   c                   N    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dS )TestCBC256Inputz]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c                     |                      t          d          5  t          j        t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S 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       ##I/bcc 	D 	D#BJrNNBJrNNCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D   :A##A'*A'c                     |                      t          | j                  5  t          j        ddd           d d d            d S # 1 swxY w Y   d S N         )rN   rO   TYPE_ERROR_PATTERNr   r   rQ   s    r   %test_cbc256_encrypt_invalid_args_typez5TestCBC256Input.test_cbc256_encrypt_invalid_args_type       ##It/FGG 	- 	-#Aq!,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   AA	A	c                     |                      t          d          5  t          j        dt	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S 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       ##J0IJJ 	I 	I#CBBHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I   ;A$$A(+A(c                    |                      t          d          5  t          j        t	          j        d          t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S Nz!Key size must be exactly 32 bytesrL      r`   rQ   s    r   $test_cbc256_encrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_encrypt_invalid_key_size       ##J0TUU 	T 	T#BJrNNBJrNNBJrNNSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T   AA66A:=A:c                    |                      t          d          5  t          j        t	          j        d          t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S 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       ##J0STT 	T 	T#BJrNNBJrNNBJrNNSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Trj   c                     |                      t          d          5  t          j        t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S 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                     |                      t          | j                  5  t          j        ddd           d d d            d S # 1 swxY w Y   d S rV   )rN   rO   rZ   r   r   rQ   s    r   %test_cbc256_decrypt_invalid_args_typez5TestCBC256Input.test_cbc256_decrypt_invalid_args_type   r\   r]   c                     |                      t          d          5  t          j        dt	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S r_   rN   ra   r   r   r4   rP   rQ   s    r   test_cbc256_decrypt_empty_dataz.TestCBC256Input.test_cbc256_decrypt_empty_data   rc   rd   c                    |                      t          d          5  t          j        t	          j        d          t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S rf   ru   rQ   s    r   $test_cbc256_decrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_decrypt_invalid_key_size   ri   rj   c                    |                      t          d          5  t          j        t	          j        d          t	          j        d          t	          j        d                     d d d            d S # 1 swxY w Y   d S 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      s        yD D D- - -I I IT T TT T TD D D- - -I I IT T TT T T T Tr   rI   c                   &   e Zd ZdZdZdZdZd                    dd          Z e	e          D ]kZ
 ee                    dd	e
 ej         ej        d
e          dz             ej        e           e ej        e                                         l e	e          D ]kZ
 ee                    d	de
 ej         ej        d
e          dz             ej        e           e ej        e                                         ldS )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RZq2E F F KLLBJx((9ZRZ0011   		
 		
 		
 		
 |$$ 

 

OORZq2E F F KLLBJx((9ZRZ0011   		
 		
 		
 		


 

r   r|   __main__)r4   r   r<   unittestr   TestCaser   r#   rI   r|   r   mainr!   r   r   <module>r      s"  & 
			  				  5R 5R 5R 5R 5RX& 5R 5R 5Rp1 1 1 1 1X. 1 1 1h)T )T )T )T )Th' )T )T )TX*
 *
 *
 *
 *
x( *
 *
 *
Z zHMOOOOO r   