o
    ,˜Žjk$  ã                   @   s€   d dl Z d dlZd dlZd dlZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd	„ d	ejƒZe	d
kr>e 
¡  dS dS )é    Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCTR256NISTc              	   C   óˆ   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 |||t dƒ¡|¡ d S )	Núa
        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Ú
ciphertext© r   úO/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/tests/ctr/test_ctr.pyÚtest_ctr256_encrypt   ó   ýþûû z"TestCTR256NIST.test_ctr256_encryptc              	   C   r   )	Nr   r   r   r   r   r
   r	   r   )r   r   r   r   r   Úctr256_decrypt)r   r   r   r   r   r   r   r   Útest_ctr256_decrypt7   r   z"TestCTR256NIST.test_ctr256_decryptN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestCTR256Cryptographyc              	   C   óH   t  d¡}t  d¡}t  d¡}t  d¡}|  t |||t dƒ¡|¡ d S )NÚ@776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104Ú 00000060DB5672C97AA8F0B200000001Ú 53696E676C6520626C6F636B206D7367Ú 145AD01DBF824EC7560863DC71E3E0C0r   ©r   r   r   r   r   r   r   r   r   Útest_ctr256_encrypt_extra1U   ó
   



 z1TestCTR256Cryptography.test_ctr256_encrypt_extra1c              	   C   r"   )NÚ@F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884Ú 00FAAC24C1585EF15A43D87500000001Ú@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1FÚ@F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1Cr   r'   r   r   r   r   Útest_ctr256_encrypt_extra2]   r)   z1TestCTR256Cryptography.test_ctr256_encrypt_extra2c              	   C   r"   )NÚ@FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153DÚ 001CC5B751A51D70A1C1114800000001ÚH000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223ÚHEB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8r   r'   r   r   r   r   Útest_ctr256_encrypt_extra3e   r)   z1TestCTR256Cryptography.test_ctr256_encrypt_extra3N)r   r   r    r(   r.   r3   r   r   r   r   r!   R   s    r!   c                   @   s€   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCTR256Inputz]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c                 C   óR   |   td¡� t t d¡t d¡t d¡¡ W d   ƒ d S 1 s"w   Y  d S ©Nz0function takes exactly \d arguments \(\d given\)é   é    é   )ÚassertRaisesRegexÚ	TypeErrorr   r   ÚosÚurandom©r   r   r   r   Ú&test_ctr256_encrypt_invalid_args_countq   ó   ""ÿz6TestCTR256Input.test_ctr256_encrypt_invalid_args_countc                 C   óD   |   t| j¡� t dddd¡ W d   ƒ d S 1 sw   Y  d S ©Nr   é   é   é   )r:   r;   ÚTYPE_ERROR_PATTERNr   r   r>   r   r   r   Ú%test_ctr256_encrypt_invalid_args_typeu   ó   "ÿz5TestCTR256Input.test_ctr256_encrypt_invalid_args_typec                 C   óR   |   td¡� t dt d¡t d¡tdƒ¡ W d   ƒ d S 1 s"w   Y  d S ©NzData must not be emptyó    r8   r9   r   ©r:   Ú
ValueErrorr   r   r<   r=   r   r>   r   r   r   Útest_ctr256_encrypt_empty_datay   r@   z.TestCTR256Input.test_ctr256_encrypt_empty_datac                 C   óX   |   td¡� t t d¡t d¡t d¡tdƒ¡ W d   ƒ d S 1 s%w   Y  d S ©Nz!Key size must be exactly 32 bytesr7   é   r9   r   rL   r>   r   r   r   Ú$test_ctr256_encrypt_invalid_key_size}   ó   ("ÿz4TestCTR256Input.test_ctr256_encrypt_invalid_key_sizec                 C   rO   ©Nz IV size must be exactly 16 bytesr7   r8   é   r   rL   r>   r   r   r   Ú#test_ctr256_encrypt_invalid_iv_size�   rS   z3TestCTR256Input.test_ctr256_encrypt_invalid_iv_sizec              	   C   ó\   |   td¡� t t d¡t d¡t d¡tg d¢ƒ¡ W d   ƒ d S 1 s'w   Y  d S ©Nz!State size must be exactly 1 byter7   r8   r9   )r   rC   rD   rL   r>   r   r   r   Ú&test_ctr256_encrypt_invalid_state_size…   ó   ,"ÿz6TestCTR256Input.test_ctr256_encrypt_invalid_state_sizec                 C   óZ   |   td¡� t t d¡t d¡t d¡tdgƒ¡ W d   ƒ d S 1 s&w   Y  d S ©Nz*State value must be in the range \[0, 15\]r7   r8   r9   rL   r>   r   r   r   Ú'test_ctr256_encrypt_invalid_state_value‰   ó   *"ÿz7TestCTR256Input.test_ctr256_encrypt_invalid_state_valuec                 C   r5   r6   )r:   r;   r   r   r<   r=   r>   r   r   r   Ú&test_ctr256_decrypt_invalid_args_count�   r@   z6TestCTR256Input.test_ctr256_decrypt_invalid_args_countc                 C   rA   rB   )r:   r;   rF   r   r   r>   r   r   r   Ú%test_ctr256_decrypt_invalid_args_type‘   rH   z5TestCTR256Input.test_ctr256_decrypt_invalid_args_typec                 C   rI   rJ   ©r:   rM   r   r   r<   r=   r   r>   r   r   r   Útest_ctr256_decrypt_empty_data•   r@   z.TestCTR256Input.test_ctr256_decrypt_empty_datac                 C   rO   rP   ra   r>   r   r   r   Ú$test_ctr256_decrypt_invalid_key_size™   rS   z4TestCTR256Input.test_ctr256_decrypt_invalid_key_sizec                 C   rO   rT   ra   r>   r   r   r   Ú#test_ctr256_decrypt_invalid_iv_size�   rS   z3TestCTR256Input.test_ctr256_decrypt_invalid_iv_sizec              	   C   rW   rX   ra   r>   r   r   r   Ú&test_ctr256_decrypt_invalid_state_size¡   rZ   z6TestCTR256Input.test_ctr256_decrypt_invalid_state_sizec                 C   r[   r\   ra   r>   r   r   r   Ú'test_ctr256_decrypt_invalid_state_value¥   r^   z7TestCTR256Input.test_ctr256_decrypt_invalid_state_valueN)r   r   r    rF   r?   rG   rN   rR   rV   rY   r]   r_   r`   rb   rc   rd   re   rf   r   r   r   r   r4   n   s     r4   c                   @   sÔ   e Zd ZdZdZdZdZd dd¡Ze	eƒD ]&Z
eejdd	e
e e d
e¡¡e e¡ee e¡ƒee dd¡gƒd�ƒ qe	eƒD ]&Z
eejd	de
e e d
e¡¡e e¡ee e¡ƒee dd¡gƒd�ƒ qAdS )ÚTestCTR256Randomi   r8   r9   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   rU   )Úmode1Úmode2ÚcountÚdatar   r   ÚstateN)r   r   r    ÚDATA_MAX_SIZEÚKEY_SIZEÚIV_SIZEÚTESTS_AMOUNTr   ÚTEMPLATEÚrangerl   ÚexecÚformatr<   r=   ÚrandomÚrandintÚ	bytearrayr   r   r   r   rg   ª   sB    óùÿùÿÿrg   Ú__main__)r<   rw   Úunittestr   ÚTestCaser   r!   r4   rg   r   Úmainr   r   r   r   Ú<module>   s   8<1ÿ