
    N[ik$                         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)TestCTR256NISTc           
         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
                  |||t        d            |       y )	Na
        603DEB10 15CA71BE 2B73AEF0 857D7781
        1F352C07 3B6108D7 2D9810A3 0914DFF4
          
5
        F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF
        
        6BC1BEE2 2E409F96 E93D7E11 7393172A
        AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
        30C81C46 A35CE411 E5FBC119 1A0A52EF
        F69F2445 DF4F9B17 AD2B417B E66C3710
        
        601EC313 775789A5 B7A7F504 BBF3D228
        F443E3CA 4D62B59A CA84E990 CACAF5C5
        2B0930DA A23DE94C E87017BA 2D84988D
        DFC9C58D B67AADA6 13C2DD08 457941A6
           )bytesfromhexreplaceassertEqualtgcryptoctr256_encryptselfkeyiv	plaintext
ciphertexts        E/var/www/files/kim/lib/python3.12/site-packages/tests/ctr/test_ctr.pytest_ctr256_encryptz"TestCTR256NIST.test_ctr256_encrypt   s    mm  GCWWT2.0
 ]] GCWWT2.0 MM #
 GCWWT2.0	 ]] $
 GCWWT2.0
 	00CU1XNPZ[    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
                  |||t        d            |       y )	Nr   r   r   r	   r
   r   r   r   )r   r   r   r   r   ctr256_decrypt)r   r   r   r   r   s        r   test_ctr256_decryptz"TestCTR256NIST.test_ctr256_decrypt7   s    mm  GCWWT2.0
 ]] GCWWT2.0 ]] $
 GCWWT2.0
 MM #
 GCWWT2.0	 	00S"eAhOQZ[r   N)__name__
__module____qualname__r   r    r   r   r   r      s    \4\r   r   c                       e Zd Zd Zd Zd Zy)TestCTR256Cryptographyc           
         t         j                  d      }t         j                  d      }t         j                  d      }t         j                  d      }| j                  t        j                  |||t        d            |       y )N@776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104 00000060DB5672C97AA8F0B200000001 53696E676C6520626C6F636B206D7367 145AD01DBF824EC7560863DC71E3E0C0r   r   r   r   r   r   r   s        r   test_ctr256_encrypt_extra1z1TestCTR256Cryptography.test_ctr256_encrypt_extra1U   sd    mm^_]]=>MM"DE	]]#EF
00CU1XNPZ[r   c           
         t         j                  d      }t         j                  d      }t         j                  d      }t         j                  d      }| j                  t        j                  |||t        d            |       y )N@F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884 00FAAC24C1585EF15A43D87500000001@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F@F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1Cr   r+   r   s        r   test_ctr256_encrypt_extra2z1TestCTR256Cryptography.test_ctr256_encrypt_extra2]   sd    mm^_]]=>MM"de	]]#ef
00CU1XNPZ[r   c           
         t         j                  d      }t         j                  d      }t         j                  d      }t         j                  d      }| j                  t        j                  |||t        d            |       y )N@FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153D 001CC5B751A51D70A1C1114800000001H000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223HEB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8r   r+   r   s        r   test_ctr256_encrypt_extra3z1TestCTR256Cryptography.test_ctr256_encrypt_extra3e   sd    mm^_]]=>MM"lm	]]#mn
00CU1XNPZ[r   N)r    r!   r"   r,   r2   r8   r#   r   r   r%   r%   R   s    \\\r   r%   c                   d    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 Zd Zd Zd Zy)TestCTR256Inputz]'\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      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   osurandomr   s    r   &test_ctr256_encrypt_invalid_args_countz6TestCTR256Input.test_ctr256_encrypt_invalid_args_countq   V    ##I/bc 	S##BJJqM2::b>2::b>R	S 	S 	S   AA11A:c                     | j                  t        | j                        5  t        j                  dddd       d d d        y # 1 sw Y   y xY wNr            )r@   rA   TYPE_ERROR_PATTERNr   r   rD   s    r   %test_ctr256_encrypt_invalid_args_typez5TestCTR256Input.test_ctr256_encrypt_invalid_args_typeu   A    ##It/F/FG 	0##Aq!Q/	0 	0 	0   AAc           	          | j                  t        d      5  t        j                  dt	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wNzData must not be emptyr   r>   r?   r   r@   
ValueErrorr   r   rB   rC   r   rD   s    r   test_ctr256_encrypt_empty_dataz.TestCTR256Input.test_ctr256_encrypt_empty_datay   T    ##J0IJ 	S##CBBqR	S 	S 	S   AA((A1c           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wNz!Key size must be exactly 32 bytesr=      r?   r   rS   rD   s    r   $test_ctr256_encrypt_invalid_key_sizez4TestCTR256Input.test_ctr256_encrypt_invalid_key_size}   _    ##J0TU 	]##BJJqM2::b>2::b>SXYZS[\	] 	] 	]   AA;;Bc           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wNz IV size must be exactly 16 bytesr=   r>      r   rS   rD   s    r   #test_ctr256_encrypt_invalid_iv_sizez3TestCTR256Input.test_ctr256_encrypt_invalid_iv_size   _    ##J0ST 	]##BJJqM2::b>2::b>SXYZS[\	] 	] 	]r]   c           
         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        g d             d d d        y # 1 sw Y   y xY wNz!State size must be exactly 1 byter=   r>   r?   )r   rJ   rK   rS   rD   s    r   &test_ctr256_encrypt_invalid_state_sizez6TestCTR256Input.test_ctr256_encrypt_invalid_state_size   _    ##J0TU 	e##BJJqM2::b>2::b>SXYbScd	e 	e 	e   AA==Bc           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        dg             d d d        y # 1 sw Y   y xY wNz*State value must be in the range \[0, 15\]r=   r>   r?   rS   rD   s    r   'test_ctr256_encrypt_invalid_state_valuez7TestCTR256Input.test_ctr256_encrypt_invalid_state_value   b    ##J0]^ 	`##BJJqM2::b>2::b>SXZ\Y]S^_	` 	` 	`   AA<<B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r<   )r@   rA   r   r   rB   rC   rD   s    r   &test_ctr256_decrypt_invalid_args_countz6TestCTR256Input.test_ctr256_decrypt_invalid_args_count   rF   rG   c                     | j                  t        | j                        5  t        j                  dddd       d d d        y # 1 sw Y   y xY wrI   )r@   rA   rM   r   r   rD   s    r   %test_ctr256_decrypt_invalid_args_typez5TestCTR256Input.test_ctr256_decrypt_invalid_args_type   rO   rP   c           	          | j                  t        d      5  t        j                  dt	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wrR   r@   rT   r   r   rB   rC   r   rD   s    r   test_ctr256_decrypt_empty_dataz.TestCTR256Input.test_ctr256_decrypt_empty_data   rV   rW   c           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wrY   rr   rD   s    r   $test_ctr256_decrypt_invalid_key_sizez4TestCTR256Input.test_ctr256_decrypt_invalid_key_size   r\   r]   c           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        d             d d d        y # 1 sw Y   y xY wr_   rr   rD   s    r   #test_ctr256_decrypt_invalid_iv_sizez3TestCTR256Input.test_ctr256_decrypt_invalid_iv_size   rb   r]   c           
         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        g d             d d d        y # 1 sw Y   y xY wrd   rr   rD   s    r   &test_ctr256_decrypt_invalid_state_sizez6TestCTR256Input.test_ctr256_decrypt_invalid_state_size   rf   rg   c           	         | j                  t        d      5  t        j                  t	        j
                  d      t	        j
                  d      t	        j
                  d      t        dg             d d d        y # 1 sw Y   y xY wri   rr   rD   s    r   'test_ctr256_decrypt_invalid_state_valuez7TestCTR256Input.test_ctr256_decrypt_invalid_state_value   rk   rl   N)r    r!   r"   rM   rE   rN   rU   r[   ra   re   rj   rn   rp   rs   ru   rw   ry   r{   r#   r   r   r:   r:   n   sZ    yS0S]]e`S0S]]e`r   r:   c                   h   e Zd ZdZdZdZdZdj                  dd      Z e	e      D ]  Z
 eej                  dd	e
 ej                   ej                   d
e             ej                  e       e ej                  e             e ej                   dd      g                     e	e      D ]  Z
 eej                  d	de
 ej                   ej                   d
e             ej                  e       e ej                  e             e ej                   dd      g                    y)TestCTR256Randomi   r>   r?   i  ah  
    def test_ctr256_random_{mode1}_{count}(self):
        data = {data}
        key = {key}
        iv = {iv}
        iv_copy = iv.copy()
        state = {state}
        state_copy = state.copy()

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

        self.assertEqual(data, b)
    z
    r	   encryptdecryptr   r   r`   )mode1mode2countdatar   r   stateN)r    r!   r"   DATA_MAX_SIZEKEY_SIZEIV_SIZETESTS_AMOUNTr   TEMPLATEranger   execformatrB   rC   randomrandint	bytearrayr#   r   r   r}   r}      sF   MHGL 	$  |$ 
OORZZq- @ABJJx(ZRZZ012!6 78  
	

 |$ 
OORZZq- @ABJJx(ZRZZ012!6 78  
	

r   r}   __main__)rB   r   unittestr   TestCaser   r%   r:   r}   r    mainr#   r   r   <module>r      s~   & 
   5\X&& 5\p\X.. \89`h'' 9`x.
x(( .
b zHMMO r   