Ë
    	š„j    ã                   ó  — d dl Z d dlZd dlZd dlZd dlZ G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ dej
                  «      Z G d„ d	ej
                  «      Z	e
d
k(  r ej                  «        yy)é    Nc                   ó   — e Zd Zd„ Zd„ Zy)ÚTestCBC256NISTc                 óú  — t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }| j                  t	        j
                  |||«      |«       y )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Ú
ciphertexts        úI/var/www/html/GAP/venv/lib/python3.12/site-packages/tests/cbc/test_cbc.pyÚtest_cbc256_encryptz"TestCBC256NIST.test_cbc256_encrypt   s×   € Ü�m‰mð ÷ ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆô
 �]‰]ð ç‰G�C˜ÓŸW™W T¨2Ó.ó0ˆô —M‘Mð #÷
 ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆ	ô —]‘]ð $÷
 ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆ
ð 	×Ñœ×0Ñ0°¸CÀÓDÀjÕQó    c                 óú  — t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }t         j                  dj                  dd«      j                  dd«      «      }| j                  t	        j
                  |||«      |«       y )Nr   r   r   r	   r
   r   r   )r   r   r   r   r   Úcbc256_decrypt)r   r   r   r   r   s        r   Útest_cbc256_decryptz"TestCBC256NIST.test_cbc256_decrypt8   s×   € Ü�m‰mð ÷ ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆô
 �]‰]ð ç‰G�C˜ÓŸW™W T¨2Ó.ó0ˆô —]‘]ð $÷
 ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆ
ô —M‘Mð #÷
 ‰G�C˜ÓŸW™W T¨2Ó.ó0ˆ	ð 	×Ñœ×0Ñ0°¸SÀ"ÓEÀyÕQr   N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s   „ òRó4Rr   r   c                   ó<  — e Zd Zdj                  dd«      ZdZej                  j                  e	«      dz   Z
 ej                  e
«      D ]Å  Ze
dz   ez   Z eedd¬	«      5 Z ej                  eej!                  «       «      D ]‚  Zej%                  «       \  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jA                  eej                  jC                  e«      d   jC                  d«      d   eeeeeee¬«	      «       Œ„ 	 ddd«       ŒÇ y# 1 sw Y   ŒÒxY w)Ú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   r0   r1   ÚexecÚformatÚsplitr!   r   r   r#   r#   S   sU  „ ð÷ 	‰�˜$Óð ð x€Gà—‘—‘ Ó)¨JÑ6€Ià�—
‘
˜9Ó%ò  ˆØ˜3‰ Ñ%ˆá�$˜ gÔ.ð 	°!Ø$˜Ÿ™ W¨a¯f©f«hÓ7ò �ØEJÇ\Á\Ã^ÑB��s˜B °¸¸Fà" kÒ1Ø$�DØ &�IØ!'�JØ'�EØ)‘Fà$�DØ &�IØ!'�JØ(�EØ(�FáØ—O‘OØ!ØŸW™WŸ]™]¨4Ó0°Ñ4×:Ñ:¸3Ó?ÀÑBØ#ØØØ"+Ø#-Ø#Ø%ð $ó 
õñ!÷	ð 	ñ ÷	ð 	ús   ÁB'DÄD	r#   c                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚTestCBC256Inputz]'\w+' does not (support|have) the buffer interface|a bytes-like object is required, not '\w+'c                 óÒ   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY w©Nz0function takes exactly \d arguments \(\d given\)é   é    )ÚassertRaisesRegexÚ	TypeErrorr   r   r4   Úurandom©r   s    r   Ú&test_cbc256_encrypt_invalid_args_countz6TestCBC256Input.test_cbc256_encrypt_invalid_args_countŠ   óL   € Ø×#Ñ#¤IÐ/bÓcñ 	DÜ×#Ñ#¤B§J¡J¨r£N´B·J±J¸r³NÔC÷	D÷ 	Dñ 	Dúó   —=AÁA&c                 óœ   — | j                  t        | j                  «      5  t        j                  ddd«       d d d «       y # 1 sw Y   y xY w©Né   é   é   )rN   rO   ÚTYPE_ERROR_PATTERNr   r   rQ   s    r   Ú%test_cbc256_encrypt_invalid_args_typez5TestCBC256Input.test_cbc256_encrypt_invalid_args_typeŽ   ó?   € Ø×#Ñ#¤I¨t×/FÑ/FÓGñ 	-Ü×#Ñ# A q¨!Ô,÷	-÷ 	-ñ 	-úó   ¡AÁAc                 óÔ   — | j                  t        d«      5  t        j                  dt	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY w©NzData must not be emptyr   rM   rL   ©rN   Ú
ValueErrorr   r   r4   rP   rQ   s    r   Útest_cbc256_encrypt_empty_dataz.TestCBC256Input.test_cbc256_encrypt_empty_data’   óN   € Ø×#Ñ#¤JÐ0IÓJñ 	IÜ×#Ñ# C¬¯©°B«¼¿¹ÀB»ÔH÷	I÷ 	Iñ 	Iúó   —>AÁA'c                 óú   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY w©Nz!Key size must be exactly 32 bytesrL   é   r`   rQ   s    r   Ú$test_cbc256_encrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_encrypt_invalid_key_size–   óV   € Ø×#Ñ#¤JÐ0TÓUñ 	TÜ×#Ñ#¤B§J¡J¨r£N´B·J±J¸r³NÄBÇJÁJÈrÃNÔS÷	T÷ 	Tñ 	Túó   —AA1Á1A:c                 óú   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY w©Nz IV size must be exactly 16 bytesrL   rM   é   r`   rQ   s    r   Ú#test_cbc256_encrypt_invalid_iv_sizez3TestCBC256Input.test_cbc256_encrypt_invalid_iv_sizeš   óV   € Ø×#Ñ#¤JÐ0SÓTñ 	TÜ×#Ñ#¤B§J¡J¨r£N´B·J±J¸r³NÄBÇJÁJÈrÃNÔS÷	T÷ 	Tñ 	Túrj   c                 óÒ   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY wrK   )rN   rO   r   r   r4   rP   rQ   s    r   Ú&test_cbc256_decrypt_invalid_args_countz6TestCBC256Input.test_cbc256_decrypt_invalid_args_countž   rS   rT   c                 óœ   — | j                  t        | j                  «      5  t        j                  ddd«       d d d «       y # 1 sw Y   y xY wrV   )rN   rO   rZ   r   r   rQ   s    r   Ú%test_cbc256_decrypt_invalid_args_typez5TestCBC256Input.test_cbc256_decrypt_invalid_args_type¢   r\   r]   c                 óÔ   — | j                  t        d«      5  t        j                  dt	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY wr_   ©rN   ra   r   r   r4   rP   rQ   s    r   Útest_cbc256_decrypt_empty_dataz.TestCBC256Input.test_cbc256_decrypt_empty_data¦   rc   rd   c                 óú   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY wrf   ru   rQ   s    r   Ú$test_cbc256_decrypt_invalid_key_sizez4TestCBC256Input.test_cbc256_decrypt_invalid_key_sizeª   ri   rj   c                 óú   — | j                  t        d«      5  t        j                  t	        j
                  d«      t	        j
                  d«      t	        j
                  d«      «       d d d «       y # 1 sw Y   y xY wrl   ru   rQ   s    r   Ú#test_cbc256_decrypt_invalid_iv_sizez3TestCBC256Input.test_cbc256_decrypt_invalid_iv_size®   ro   rj   N)r   r   r    rZ   rR   r[   rb   rh   rn   rq   rs   rv   rx   rz   r!   r   r   rI   rI   ‡   sB   „ ØyÐòDò-òIòTòTòDò-òIòTóTr   rI   c                   ó  — e Zd ZdZdZdZdZdj                  dd«      Z e	e«      D ]i  Z
 eej                  dd	e
 ej                   ej                   d
e«      dz  «       ej                  e«       e ej                  e«      «      ¬«      «       Œk  e	e«      D ]i  Z
 eej                  d	de
 ej                   ej                   d
e«      dz  «       ej                  e«       e ej                  e«      «      ¬«      «       Œk y)ÚTestCBC256Randomé@   rM   rL   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*   rW   )Úmode1Úmode2r/   Údatar   r   N)r   r   r    ÚDATA_CHUNK_MAX_SIZEÚKEY_SIZEÚIV_SIZEÚTESTS_AMOUNTr   r2   Úranger/   rE   rF   r4   rP   ÚrandomÚrandintÚ	bytearrayr!   r   r   r|   r|   ³   s#  „ ØÐØ€HØ€Gà€Lð÷ 	‰�˜$Óð ñ �|Ó$ò 

ˆÙØ�O‰OØØØØ�R—Z‘Z  §¡¨qÐ2EÓ FÈÑ KÓLØ�B—J‘J˜xÓ(Ù˜Z˜RŸZ™Z¨Ó0Ó1ð ó õ		
ð

ñ �|Ó$ò 

ˆÙØ�O‰OØØØØ�R—Z‘Z  §¡¨qÐ2EÓ FÈÑ KÓLØ�B—J‘J˜xÓ(Ù˜Z˜RŸZ™Z¨Ó0Ó1ð ó õ		
ñ

r   r|   Ú__main__)r4   r†   r<   Úunittestr   ÚTestCaser   r#   rI   r|   r   Úmainr!   r   r   ú<module>r�      s€   ðó& 
Û Û 	Û ã ô5R�X×&Ñ&ô 5Rôp1˜X×.Ñ.ô 1ôh)T�h×'Ñ'ô )TôX*
�x×(Ñ(ô *
ðZ ˆzÒØ€H‡M�M…Oð r   