o
    ,˜Žj    ã                   @   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rBe ¡  dS dS )é    Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCBC256NISTc                 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 |||¡|¡ 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   úO/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/tests/cbc/test_cbc.pyÚtest_cbc256_encrypt   ó   ýþûûz"TestCBC256NIST.test_cbc256_encryptc                 C   r   )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   r   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 ]iZe
d e Zeeddd	��RZe ee ¡ ¡D ]AZe ¡ \ZZZZZZZed
krMd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�	ƒ q1W d  ƒ n1 s}w   Y  qd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)ÚencodingÚ	PLAINTEXTÚencryptr   r   ÚdecryptéÿÿÿÿÚ.r   )	ÚmodeÚnameÚcountr   r   r   r   ÚinputÚoutputN)"r   r   r   r   ÚTEMPLATEÚPATTERNÚosÚpathÚdirnameÚ__file__Ú	BASE_PATHÚlistdirÚopenÚfÚreÚfinditerÚreadÚmatchÚgroupsr+   r   r   Úplain_or_cipherÚbytes1Ú_Úbytes2r)   r   r   r,   r-   ÚexecÚformatÚsplitr   r   r   r   r   S   sN    ø
÷ÿðÿ€ý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   óJ   |   td¡� t t d¡t d¡¡ W d   ƒ d S 1 sw   Y  d S ©Nz0function takes exactly \d arguments \(\d given\)é   é    )ÚassertRaisesRegexÚ	TypeErrorr   r   r0   Úurandom©r   r   r   r   Ú&test_cbc256_encrypt_invalid_args_countŠ   ó   "ÿz6TestCBC256Input.test_cbc256_encrypt_invalid_args_countc                 C   óB   |   t| j¡� t ddd¡ W d   ƒ d S 1 sw   Y  d S ©Né   é   é   )rI   rJ   ÚTYPE_ERROR_PATTERNr   r   rL   r   r   r   Ú%test_cbc256_encrypt_invalid_args_typeŽ   ó   "ÿz5TestCBC256Input.test_cbc256_encrypt_invalid_args_typec                 C   óL   |   td¡� t dt d¡t d¡¡ W d   ƒ d S 1 sw   Y  d S ©NzData must not be emptyó    rH   rG   ©rI   Ú
ValueErrorr   r   r0   rK   rL   r   r   r   Útest_cbc256_encrypt_empty_data’   ó   "ÿz.TestCBC256Input.test_cbc256_encrypt_empty_datac                 C   óR   |   td¡� t t d¡t d¡t d¡¡ W d   ƒ d S 1 s"w   Y  d S ©Nz!Key size must be exactly 32 bytesrG   é   rZ   rL   r   r   r   Ú$test_cbc256_encrypt_invalid_key_size–   ó   ""ÿz4TestCBC256Input.test_cbc256_encrypt_invalid_key_sizec                 C   óR   |   td¡� t t d¡t d¡t d¡¡ W d   ƒ d S 1 s"w   Y  d S ©Nz IV size must be exactly 16 bytesrG   rH   é   rZ   rL   r   r   r   Ú#test_cbc256_encrypt_invalid_iv_sizeš   rb   z3TestCBC256Input.test_cbc256_encrypt_invalid_iv_sizec                 C   rE   rF   )rI   rJ   r   r   r0   rK   rL   r   r   r   Ú&test_cbc256_decrypt_invalid_args_countž   rN   z6TestCBC256Input.test_cbc256_decrypt_invalid_args_countc                 C   rO   rP   )rI   rJ   rT   r   r   rL   r   r   r   Ú%test_cbc256_decrypt_invalid_args_type¢   rV   z5TestCBC256Input.test_cbc256_decrypt_invalid_args_typec                 C   rW   rX   ©rI   r[   r   r   r0   rK   rL   r   r   r   Útest_cbc256_decrypt_empty_data¦   r]   z.TestCBC256Input.test_cbc256_decrypt_empty_datac                 C   r^   r_   ri   rL   r   r   r   Ú$test_cbc256_decrypt_invalid_key_sizeª   rb   z4TestCBC256Input.test_cbc256_decrypt_invalid_key_sizec                 C   rc   rd   ri   rL   r   r   r   Ú#test_cbc256_decrypt_invalid_iv_size®   rb   z3TestCBC256Input.test_cbc256_decrypt_invalid_iv_sizeN)r   r   r   rT   rM   rU   r\   ra   rf   rg   rh   rj   rk   rl   r   r   r   r   rD   ‡   s    rD   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�ƒ q;dS )ÚTestCBC256Randomé@   rH   rG   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&   rQ   )Úmode1Úmode2r+   Údatar   r   N)r   r   r   ÚDATA_CHUNK_MAX_SIZEÚKEY_SIZEÚIV_SIZEÚTESTS_AMOUNTr   r.   Úranger+   rA   rB   r0   rK   ÚrandomÚrandintÚ	bytearrayr   r   r   r   rm   ³   s>    õúÿúÿÿrm   Ú__main__)r0   rw   r8   Úunittestr   ÚTestCaser   r   rD   rm   r   Úmainr   r   r   r   Ú<module>   s   84,-ÿ