U
    ç;ãg    ã                   @   s„   d dl Z 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 )é    Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCBC256NISTc                 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 |||¡|¡ d S )Núa
        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Ú
ciphertext© r   úR/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/tests/cbc/test_cbc.pyÚtest_cbc256_encrypt   s:     ý ý þ þ û û û ûz"TestCBC256NIST.test_cbc256_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 |||¡|¡ d S )Nr   r   r   r   r   r	   r   )r
   r   r   r   r   Úcbc256_decrypt)r   r   r   r   r   r   r   r   Útest_cbc256_decrypt8   s:     ý ý þ þ û û û ûz"TestCBC256NIST.test_cbc256_decryptN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c                   @   sö   e Zd Zd dd¡ZdZej e	¡d Z
e e
¡D ]¾Ze
d e Zeeddd	šZe 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j eej !e¡d  !d¡d eeeeeeed	ƒ qbW 5 Q R X q2d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)ÚencodingZ	PLAINTEXTÚencryptr   r   ÚdecryptéÿÿÿÿÚ.r   )	ÚmodeÚnameÚcountr   r   r   r   ÚinputÚoutputN)"r   r   r   r   ÚTEMPLATEZPATTERNÚosÚpathÚdirnameÚ__file__Z	BASE_PATHÚlistdirÚopenÚfÚreÚfinditerÚreadÚmatchÚgroupsr(   r   r   Zplain_or_cipherZbytes1Ú_Zbytes2r&   r   r   r)   r*   ÚexecÚformatÚsplitr   r   r   r   r   S   sF    ø
÷ÿ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S )ÚTestCBC256Inputz]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c              	   C   s4   |   td¡ t t d¡t d¡¡ W 5 Q R X d S ©Nz0function takes exactly \d arguments \(\d given\)é   é    )ÚassertRaisesRegexÚ	TypeErrorr   r   r,   Úurandom©r   r   r   r   Ú&test_cbc256_encrypt_invalid_args_countŠ   s    z6TestCBC256Input.test_cbc256_encrypt_invalid_args_countc              	   C   s,   |   t| j¡ t ddd¡ W 5 Q R X d S ©Né   é   é   )r@   rA   ÚTYPE_ERROR_PATTERNr   r   rC   r   r   r   Ú%test_cbc256_encrypt_invalid_args_typeŽ   s    z5TestCBC256Input.test_cbc256_encrypt_invalid_args_typec              	   C   s6   |   td¡  t dt d¡t d¡¡ W 5 Q R X d S ©NzData must not be emptyó    r?   r>   ©r@   Ú
ValueErrorr   r   r,   rB   rC   r   r   r   Útest_cbc256_encrypt_empty_data’   s    z.TestCBC256Input.test_cbc256_encrypt_empty_datac              	   C   s<   |   td¡& t t d¡t d¡t d¡¡ W 5 Q R X d S ©Nz!Key size must be exactly 32 bytesr>   é   rM   rC   r   r   r   Ú$test_cbc256_encrypt_invalid_key_size–   s    z4TestCBC256Input.test_cbc256_encrypt_invalid_key_sizec              	   C   s<   |   td¡& t t d¡t d¡t d¡¡ W 5 Q R X d S ©Nz IV size must be exactly 16 bytesr>   r?   é   rM   rC   r   r   r   Ú#test_cbc256_encrypt_invalid_iv_sizeš   s    z3TestCBC256Input.test_cbc256_encrypt_invalid_iv_sizec              	   C   s4   |   td¡ t t d¡t d¡¡ W 5 Q R X d S r=   )r@   rA   r   r   r,   rB   rC   r   r   r   Ú&test_cbc256_decrypt_invalid_args_countž   s    z6TestCBC256Input.test_cbc256_decrypt_invalid_args_countc              	   C   s,   |   t| j¡ t ddd¡ W 5 Q R X d S rE   )r@   rA   rI   r   r   rC   r   r   r   Ú%test_cbc256_decrypt_invalid_args_type¢   s    z5TestCBC256Input.test_cbc256_decrypt_invalid_args_typec              	   C   s6   |   td¡  t dt d¡t d¡¡ W 5 Q R X d S rK   ©r@   rN   r   r   r,   rB   rC   r   r   r   Útest_cbc256_decrypt_empty_data¦   s    z.TestCBC256Input.test_cbc256_decrypt_empty_datac              	   C   s<   |   td¡& t t d¡t d¡t d¡¡ W 5 Q R X d S rP   rX   rC   r   r   r   Ú$test_cbc256_decrypt_invalid_key_sizeª   s    z4TestCBC256Input.test_cbc256_decrypt_invalid_key_sizec              	   C   s<   |   td¡& t t d¡t d¡t d¡¡ W 5 Q R X d S rS   rX   rC   r   r   r   Ú#test_cbc256_decrypt_invalid_iv_size®   s    z3TestCBC256Input.test_cbc256_decrypt_invalid_iv_sizeN)r   r   r   rI   rD   rJ   rO   rR   rU   rV   rW   rY   rZ   r[   r   r   r   r   r<   ‡   s   r<   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¡d ¡e e¡ee e¡ƒdƒ q,e	eƒD ]@Z
eejd	de
e e d
e¡d ¡e e¡ee e¡ƒdƒ qvdS )ÚTestCBC256Randomé@   r?   r>   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#   rF   )Zmode1Zmode2r(   Údatar   r   N)r   r   r   ZDATA_CHUNK_MAX_SIZEZKEY_SIZEZIV_SIZEZTESTS_AMOUNTr   r+   Úranger(   r9   r:   r,   rB   ÚrandomÚrandintÚ	bytearrayr   r   r   r   r\   ³   s<    õúÿúÿr\   Ú__main__)r,   r`   r3   Zunittestr   ZTestCaser   r   r<   r\   r   Úmainr   r   r   r   Ú<module>   s   84,-