
    ik$                         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)TestCTR256NIST   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[        S5      5      U5        g )	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        ?/app/mltbenv/lib/python3.13/site-packages/tests/ctr/test_ctr.pytest_ctr256_encrypt"TestCTR256NIST.test_ctr256_encrypt   s    mm  GCWWT2.0
 ]] GCWWT2.0 MM #
 GCWWT2.0	 ]] $
 GCWWT2.0
 	00U1XNPZ[    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[        S5      5      U5        g )	Nr   r   r	   r
   r   r   r   r   )r   r   r   r   r   ctr256_decrypt)r   r   r   r   r   s        r   test_ctr256_decrypt"TestCTR256NIST.test_ctr256_decrypt7   s    mm  GCWWT2.0
 ]] GCWWT2.0 ]] $
 GCWWT2.0
 MM #
 GCWWT2.0	 	00"eAhOQZ[r    N)__name__
__module____qualname____firstlineno__r   r!   __static_attributes__r#   r   r   r   r      s    \4\r   r   c                   &    \ rS rSrS rS rS rSrg)TestCTR256CryptographyR   c           
         [         R                  S5      n[         R                  S5      n[         R                  S5      n[         R                  S5      nU R                  [        R                  " X1U[        S5      5      U5        g )N@776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104 00000060DB5672C97AA8F0B200000001 53696E676C6520626C6F636B206D7367 145AD01DBF824EC7560863DC71E3E0C0r   r   r   r   r   r   r   s        r   test_ctr256_encrypt_extra11TestCTR256Cryptography.test_ctr256_encrypt_extra1U   sb    mm^_]]=>MM"DE	]]#EF
00U1XNPZ[r   c           
         [         R                  S5      n[         R                  S5      n[         R                  S5      n[         R                  S5      nU R                  [        R                  " X1U[        S5      5      U5        g )N@F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884 00FAAC24C1585EF15A43D87500000001@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F@F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1Cr   r1   r   s        r   test_ctr256_encrypt_extra21TestCTR256Cryptography.test_ctr256_encrypt_extra2]   sb    mm^_]]=>MM"de	]]#ef
00U1XNPZ[r   c           
         [         R                  S5      n[         R                  S5      n[         R                  S5      n[         R                  S5      nU R                  [        R                  " X1U[        S5      5      U5        g )N@FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153D 001CC5B751A51D70A1C1114800000001H000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223HEB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8r   r1   r   s        r   test_ctr256_encrypt_extra31TestCTR256Cryptography.test_ctr256_encrypt_extra3e   sb    mm^_]]=>MM"lm	]]#mn
00U1XNPZ[r   r#   N)r$   r%   r&   r'   r2   r9   r@   r(   r#   r   r   r*   r*   R   s    \\\r   r*   c                   l    \ 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S rS rS rSrg)TestCTR256Inputn   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      [        R
                  " S5      5        S S S 5        g ! , (       d  f       g = fNz0function takes exactly \d arguments \(\d given\)          )assertRaisesRegex	TypeErrorr   r   osurandomr   s    r   &test_ctr256_encrypt_invalid_args_count6TestCTR256Input.test_ctr256_encrypt_invalid_args_countq   J    ##I/bc##BJJqM2::b>2::b>R dcc   AA55
Bc                     U R                  [        U R                  5         [        R                  " SSSS5        S S S 5        g ! , (       d  f       g = fNr            )rJ   rK   TYPE_ERROR_PATTERNr   r   rN   s    r   %test_ctr256_encrypt_invalid_args_type5TestCTR256Input.test_ctr256_encrypt_invalid_args_typeu   9    ##It/F/FG##Aq!Q/ HGG   A
Ac           	          U R                  [        S5         [        R                  " S[        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = fNzData must not be emptyr   rH   rI   r   rJ   
ValueErrorr   r   rL   rM   r   rN   s    r   test_ctr256_encrypt_empty_data.TestCTR256Input.test_ctr256_encrypt_empty_datay   H    ##J0IJ##CBBqR KJJ   AA++
A9c           	          U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = fNz!Key size must be exactly 32 bytesrG      rI   r   r_   rN   s    r   $test_ctr256_encrypt_invalid_key_size4TestCTR256Input.test_ctr256_encrypt_invalid_key_size}   S    ##J0TU##BJJqM2::b>2::b>SXYZS[\ VUU   AA??
Bc           	          U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = fNz IV size must be exactly 16 bytesrG   rH      r   r_   rN   s    r   #test_ctr256_encrypt_invalid_iv_size3TestCTR256Input.test_ctr256_encrypt_invalid_iv_size   S    ##J0ST##BJJqM2::b>2::b>SXYZS[\ UTTrk   c           
      $   U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        / SQ5      5        S S S 5        g ! , (       d  f       g = fNz!State size must be exactly 1 byterG   rH   rI   )r   rU   rV   r_   rN   s    r   &test_ctr256_encrypt_invalid_state_size6TestCTR256Input.test_ctr256_encrypt_invalid_state_size   S    ##J0TU##BJJqM2::b>2::b>SXYbScd VUU   A!B
Bc           	      "   U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S/5      5        S S S 5        g ! , (       d  f       g = fNz*State value must be in the range \[0, 15\]rG   rH   rI   r_   rN   s    r   'test_ctr256_encrypt_invalid_state_value7TestCTR256Input.test_ctr256_encrypt_invalid_state_value   V    ##J0]^##BJJqM2::b>2::b>SXZ\Y]S^_ _^^   A B  
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rF   )rJ   rK   r   r    rL   rM   rN   s    r   &test_ctr256_decrypt_invalid_args_count6TestCTR256Input.test_ctr256_decrypt_invalid_args_count   rQ   rR   c                     U R                  [        U R                  5         [        R                  " SSSS5        S S S 5        g ! , (       d  f       g = frT   )rJ   rK   rX   r   r    rN   s    r   %test_ctr256_decrypt_invalid_args_type5TestCTR256Input.test_ctr256_decrypt_invalid_args_type   r[   r\   c           	          U R                  [        S5         [        R                  " S[        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = fr^   rJ   r`   r   r    rL   rM   r   rN   s    r   test_ctr256_decrypt_empty_data.TestCTR256Input.test_ctr256_decrypt_empty_data   rc   rd   c           	          U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = frf   r   rN   s    r   $test_ctr256_decrypt_invalid_key_size4TestCTR256Input.test_ctr256_decrypt_invalid_key_size   rj   rk   c           	          U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S5      5        S S S 5        g ! , (       d  f       g = frm   r   rN   s    r   #test_ctr256_decrypt_invalid_iv_size3TestCTR256Input.test_ctr256_decrypt_invalid_iv_size   rq   rk   c           
      $   U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        / SQ5      5        S S S 5        g ! , (       d  f       g = frs   r   rN   s    r   &test_ctr256_decrypt_invalid_state_size6TestCTR256Input.test_ctr256_decrypt_invalid_state_size   rv   rw   c           	      "   U R                  [        S5         [        R                  " [        R
                  " S5      [        R
                  " S5      [        R
                  " S5      [        S/5      5        S S S 5        g ! , (       d  f       g = fry   r   rN   s    r   'test_ctr256_decrypt_invalid_state_value7TestCTR256Input.test_ctr256_decrypt_invalid_state_value   r|   r}   r#   N)r$   r%   r&   r'   rX   rO   rY   ra   rh   ro   rt   rz   r   r   r   r   r   r   r   r(   r#   r   r   rC   rC   n   sZ    yS0S]]e`S0S]]e`r   rC   c                   l   \ rS rSrSrSrSrSrSR                  SS5      r	\
" \5       H}  r\" \	R                  S	S
\\R                  " \R"                  " S\5      5      \R                  " \5      \" \R                  " \5      5      \" \R"                  " SS5      /5      S95        M     \
" \5       H}  r\" \	R                  S
S	\\R                  " \R"                  " S\5      5      \R                  " \5      \" \R                  " \5      5      \" \R"                  " SS5      /5      S95        M     Srg)TestCTR256Random   i   rH   rI   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   rn   )mode1mode2countdatar   r   stater#   N)r$   r%   r&   r'   DATA_MAX_SIZEKEY_SIZEIV_SIZETESTS_AMOUNTr   TEMPLATEranger   execformatrL   rM   randomrandint	bytearrayr(   r#   r   r   r   r      s(   MHGL 	$  |$OOZZq- @AJJx(RZZ012!6 78  
	
 % |$OOZZq- @AJJx(RZZ012!6 78  
	
 %r   r   __main__)rL   r   unittestr   TestCaser   r*   rC   r   r$   mainr#   r   r   <module>r      s|   & 
   5\X&& 5\p\X.. \89`h'' 9`x.
x(( .
b zMMO r   