B
    i’»dk$  ã               @   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rxe 
¡  dS )é    Nc               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCTR256NISTc          	   C   sˆ   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 )	Nza
        603DEB10 15CA71BE 2B73AEF0 857D7781
        1F352C07 3B6108D7 2D9810A3 0914DFF4
        ú Ú Ú
z5
        F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF
        z¹
        6BC1BEE2 2E409F96 E93D7E11 7393172A
        AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
        30C81C46 A35CE411 E5FBC119 1A0A52EF
        F69F2445 DF4F9B17 AD2B417B E66C3710
        z¹
        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   ú6/tmp/pip-unpacked-wheel-rb8agyfe/tests/ctr/test_ctr.pyÚtest_ctr256_encrypt   s    z"TestCTR256NIST.test_ctr256_encryptc          	   C   sˆ   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 )	Nza
        603DEB10 15CA71BE 2B73AEF0 857D7781
        1F352C07 3B6108D7 2D9810A3 0914DFF4
        r   r   r   z5
        F0F1F2F3 F4F5F6F7 F8F9FAFB FCFDFEFF
        z¹
        601EC313 775789A5 B7A7F504 BBF3D228
        F443E3CA 4D62B59A CA84E990 CACAF5C5
        2B0930DA A23DE94C E87017BA 2D84988D
        DFC9C58D B67AADA6 13C2DD08 457941A6
        z¹
        6BC1BEE2 2E409F96 E93D7E11 7393172A
        AE2D8A57 1E03AC9C 9EB76FAC 45AF8E51
        30C81C46 A35CE411 E5FBC119 1A0A52EF
        F69F2445 DF4F9B17 AD2B417B E66C3710
        r   )r   r   r	   r
   r   Úctr256_decrypt)r   r   r   r   r   r   r   r   Útest_ctr256_decrypt7   s    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   sH   t  d¡}t  d¡}t  d¡}t  d¡}|  t |||t dƒ¡|¡ d S )NZ@776BEFF2851DB06F4C8A0542C8696F6C6A81AF1EEC96B4D37FC1D689E6C1C104Z 00000060DB5672C97AA8F0B200000001Z 53696E676C6520626C6F636B206D7367Z 145AD01DBF824EC7560863DC71E3E0C0r   )r   r   r
   r   r   )r   r   r   r   r   r   r   r   Útest_ctr256_encrypt_extra1U   s
    



z1TestCTR256Cryptography.test_ctr256_encrypt_extra1c          	   C   sH   t  d¡}t  d¡}t  d¡}t  d¡}|  t |||t dƒ¡|¡ d S )NZ@F6D66D6BD52D59BB0796365879EFF886C66DD51A5B6A99744B50590C87A23884Z 00FAAC24C1585EF15A43D87500000001Z@000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1FZ@F05E231B3894612C49EE000B804EB2A9B8306B508F839D6A5530831D9344AF1Cr   )r   r   r
   r   r   )r   r   r   r   r   r   r   r   Útest_ctr256_encrypt_extra2]   s
    



z1TestCTR256Cryptography.test_ctr256_encrypt_extra2c          	   C   sH   t  d¡}t  d¡}t  d¡}t  d¡}|  t |||t dƒ¡|¡ d S )NZ@FF7A617CE69148E4F1726E2F43581DE2AA62D9F805532EDFF1EED687FB54153DZ 001CC5B751A51D70A1C1114800000001ZH000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212223ZHEB6C52821D0BBBF7CE7594462ACA4FAAB407DF866569FD07F48CC0B583D6071F1EC0E6B8r   )r   r   r
   r   r   )r   r   r   r   r   r   r   r   Útest_ctr256_encrypt_extra3e   s
    



z1TestCTR256Cryptography.test_ctr256_encrypt_extra3N)r   r   r   r   r   r   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   s<   |   td¡& t t d¡t d¡t d¡¡ W d Q R X d S )Nz0function takes exactly \d arguments \(\d given\)é   é    é   )ÚassertRaisesRegexÚ	TypeErrorr   r   ÚosÚurandom)r   r   r   r   Ú&test_ctr256_encrypt_invalid_args_countq   s    z6TestCTR256Input.test_ctr256_encrypt_invalid_args_countc          	   C   s.   |   t| j¡ t dddd¡ W d Q R X d S )Nr   é   é   é   )r"   r#   ÚTYPE_ERROR_PATTERNr   r   )r   r   r   r   Ú%test_ctr256_encrypt_invalid_args_typeu   s    z5TestCTR256Input.test_ctr256_encrypt_invalid_args_typec          	   C   s<   |   td¡& t dt d¡t d¡tdƒ¡ W d Q R X d S )NzData must not be emptyó    r    r!   r   )r"   Ú
ValueErrorr   r   r$   r%   r   )r   r   r   r   Útest_ctr256_encrypt_empty_datay   s    z.TestCTR256Input.test_ctr256_encrypt_empty_datac          	   C   sB   |   td¡, t t d¡t d¡t d¡tdƒ¡ W d Q R X d S )Nz!Key size must be exactly 32 bytesr   é   r!   r   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú$test_ctr256_encrypt_invalid_key_size}   s    z4TestCTR256Input.test_ctr256_encrypt_invalid_key_sizec          	   C   sB   |   td¡, t t d¡t d¡t d¡tdƒ¡ W d Q R X d S )Nz IV size must be exactly 16 bytesr   r    é   r   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú#test_ctr256_encrypt_invalid_iv_size   s    z3TestCTR256Input.test_ctr256_encrypt_invalid_iv_sizec          
   C   sH   |   td¡2 t t d¡t d¡t d¡tdddgƒ¡ W d Q R X d S )Nz!State size must be exactly 1 byter   r    r!   r   r'   r(   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú&test_ctr256_encrypt_invalid_state_size…   s    z6TestCTR256Input.test_ctr256_encrypt_invalid_state_sizec          	   C   sD   |   td¡. t t d¡t d¡t d¡tdgƒ¡ W d Q R X d S )Nz*State value must be in the range \[0, 15\]r   r    r!   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú'test_ctr256_encrypt_invalid_state_value‰   s    z7TestCTR256Input.test_ctr256_encrypt_invalid_state_valuec          	   C   s<   |   td¡& t t d¡t d¡t d¡¡ W d Q R X d S )Nz0function takes exactly \d arguments \(\d given\)r   r    r!   )r"   r#   r   r   r$   r%   )r   r   r   r   Ú&test_ctr256_decrypt_invalid_args_count   s    z6TestCTR256Input.test_ctr256_decrypt_invalid_args_countc          	   C   s.   |   t| j¡ t dddd¡ W d Q R X d S )Nr   r'   r(   r)   )r"   r#   r*   r   r   )r   r   r   r   Ú%test_ctr256_decrypt_invalid_args_type‘   s    z5TestCTR256Input.test_ctr256_decrypt_invalid_args_typec          	   C   s<   |   td¡& t dt d¡t d¡tdƒ¡ W d Q R X d S )NzData must not be emptyr,   r    r!   r   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Útest_ctr256_decrypt_empty_data•   s    z.TestCTR256Input.test_ctr256_decrypt_empty_datac          	   C   sB   |   td¡, t t d¡t d¡t d¡tdƒ¡ W d Q R X d S )Nz!Key size must be exactly 32 bytesr   r/   r!   r   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú$test_ctr256_decrypt_invalid_key_size™   s    z4TestCTR256Input.test_ctr256_decrypt_invalid_key_sizec          	   C   sB   |   td¡, t t d¡t d¡t d¡tdƒ¡ W d Q R X d S )Nz IV size must be exactly 16 bytesr   r    r1   r   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú#test_ctr256_decrypt_invalid_iv_size   s    z3TestCTR256Input.test_ctr256_decrypt_invalid_iv_sizec          
   C   sH   |   td¡2 t t d¡t d¡t d¡tdddgƒ¡ W d Q R X d S )Nz!State size must be exactly 1 byter   r    r!   r   r'   r(   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú&test_ctr256_decrypt_invalid_state_size¡   s    z6TestCTR256Input.test_ctr256_decrypt_invalid_state_sizec          	   C   sD   |   td¡. t t d¡t d¡t d¡tdgƒ¡ W d Q R X d S )Nz*State value must be in the range \[0, 15\]r   r    r!   )r"   r-   r   r   r$   r%   r   )r   r   r   r   Ú'test_ctr256_decrypt_invalid_state_value¥   s    z7TestCTR256Input.test_ctr256_decrypt_invalid_state_valueN)r   r   r   r*   r&   r+   r.   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r   r   r   r   r   n   s   r   c               @   sÜ   e Zd ZdZdZdZdZd dd¡ZxXe	eƒD ]LZ
eejdd	e
e e d
e¡¡e e¡ee e¡ƒee dd¡gƒdƒ q.W xXe	eƒD ]LZ
eejd	de
e e d
e¡¡e e¡ee e¡ƒee dd¡gƒdƒ qˆW dS )Ú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   ZencryptZdecryptr   r   r1   )Zmode1Zmode2ÚcountÚdatar   r   ÚstateN)r   r   r   ZDATA_MAX_SIZEZKEY_SIZEZIV_SIZEZTESTS_AMOUNTr	   ÚTEMPLATEÚranger=   ÚexecÚformatr$   r%   ÚrandomÚrandintÚ	bytearrayr   r   r   r   r<   ª   s2   r<   Ú__main__)r$   rD   Zunittestr   ZTestCaser   r   r   r<   r   Úmainr   r   r   r   Ú<module>   s   8<1