Ë
    (üàgúw  ã                   óª  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d	„ Z G d
„ de j                   «      Z G d„ de j                   «      Z G d„ de j                   «      Zd„ Z G d„ de j                   «      Z G d„ de j                   «      Z G d„ de j                   «      Zi fd„Zedk(  rd„ Z e j6                  d¬«       yy)é    N)Ú	unhexlify)Úlist_test_cases©Úload_test_vectors_wycheproof)Útobytes)ÚChaCha20_Poly1305)ÚSHAKE128)Ústrxorc                 ó^   — t        j                  t        | «      ¬«      j                  |«      S )N)Údata)r	   Únewr   Úread)ÚtagÚlengths     úk/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.pyÚget_tag_randomr   +   s    € Ü�<‰<œW S›\Ô*×/Ñ/°Ó7Ð7ó    c                   ó¢   — e Zd Z edd«      Z edd«      Z edd«      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d„ Zd„ Zd„ Zd„ Zy)ÚChaCha20Poly1305TestsÚkey_256é    Únonce_96é   Údata_128é   c                 ó0  — t        j                  | j                  | j                  ¬«      }t	        dd«      }|j                  |«      }t        j                  | j                  | j                  ¬«      }|j                  |«      }| j                  ||«       y )N©ÚkeyÚnonceÚ	plaintexti@  )r   r   r   r   r   ÚencryptÚdecryptÚassertEqual)ÚselfÚcipherÚptÚctÚpt2s        r   Útest_loopbackz#ChaCha20Poly1305Tests.test_loopback5   st   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆä˜K¨Ó2ˆØ�^‰^˜BÓˆä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�n‰n˜RÓ ˆØ×Ñ˜˜SÕ!r   c                 ó^  — t        j                  | j                  d¬«      }| j                  t	        |j
                  «      d«       t        j                  | j                  d¬«      }| j                  t	        |j
                  «      d«       t        j                  | j                  ¬«      }|j
                  }t        j                  | j                  ¬«      }|j
                  }| j                  t	        |«      d«       | j                  ||«       t        j                  | j                  | j                  ¬«      }|j                  | j                  «      }t        j                  | j                  | j                  ¬«      }| j                  ||j                  | j                  «      «       y )Ns   HHHHHHHHr   é   s   HHHHHHHHHHHHr   ©r   )
r   r   r   r#   Úlenr   ÚassertNotEqualr   r!   r   )r$   r%   Únonce1Únonce2r'   s        r   Ú
test_noncez ChaCha20Poly1305Tests.test_nonce@   s/  € ä"×&Ñ&¨4¯<©<Ø-5ô7ˆà×Ñœ˜VŸ\™\Ó*¨AÔ.Ü"×&Ñ&¨4¯<©<Ø-6ô8ˆà×Ñœ˜VŸ\™\Ó*¨BÔ/ô #×&Ñ&¨4¯<©<Ô8ˆØ—‘ˆÜ"×&Ñ&¨4¯<©<Ô8ˆØ—‘ˆØ×Ñœ˜V› bÔ)Ø×Ñ˜F FÔ+ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�^‰^˜DŸM™MÓ*ˆä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñ˜˜VŸ^™^¨D¯M©MÓ:Õ;r   c                 óf   — | j                  t        t        j                  | j                  d¬«       y )NÚtest12345678r   ©ÚassertRaisesÚ	TypeErrorr   r   r   ©r$   s    r   Útest_nonce_must_be_bytesz.ChaCha20Poly1305Tests.test_nonce_must_be_bytesY   s*   € Ø×Ñœ)Ü+×/Ñ/Ø"Ÿl™lØ /ð 	õ 	1r   c                 óÈ   — | j                  t        t        j                  | j                  d¬«       | j                  t        t        j                  | j                  d¬«       y )Ns   0000000r   r   )r5   Ú
ValueErrorr   r   r   r7   s    r   Útest_nonce_lengthz'ChaCha20Poly1305Tests.test_nonce_length_   sT   € à×Ñœ*Ü+×/Ñ/Ø"Ÿl™lØ (ð 	ô 	*ð 	×Ñœ*Ü+×/Ñ/Ø"Ÿl™lØ #ð 	õ 	%r   c                 ó�   — t        j                  | j                  | j                  ¬«      }| j	                  t        |d«      «       y )Nr   Ú
block_size)r   r   r   r   ÚassertFalseÚhasattr©r$   r%   s     r   Útest_block_sizez%ChaCha20Poly1305Tests.test_block_sizej   s4   € ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñœ ¨Ó6Õ7r   c                 ó¨  — t        j                  | j                  | j                  ¬«      }| j	                  |j
                  | j                  «       t        j                  | j                  ¬«      j
                  }t        j                  | j                  ¬«      j
                  }| j	                  t        |«      d«       | j                  ||«       y )Nr   r,   r   )r   r   r   r   r#   r   r-   r.   )r$   r%   r/   r0   s       r   Útest_nonce_attributez*ChaCha20Poly1305Tests.test_nonce_attributep   s‘   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñ˜Ÿ™ t§}¡}Ô5ô #×&Ñ&¨4¯<©<Ô8×>Ñ>ˆÜ"×&Ñ&¨4¯<©<Ô8×>Ñ>ˆØ×Ñœ˜V› bÔ)Ø×Ñ˜F FÕ+r   c                 óf   — | j                  t        t        j                  | j                  d¬«       y )Né	   )r   Úparamr4   r7   s    r   Útest_unknown_parametersz-ChaCha20Poly1305Tests.test_unknown_parameters{   s*   € Ø×Ñœ)Ü+×/Ñ/Ø"Ÿl™lØ !ð 	õ 	#r   c                 ó°   — dD ]Q  }t        j                  | j                  | j                  ¬«      } t	        ||«      d«      }| j                  |d«       ŒS y )N©r!   r"   r   r   )r   r   r   r   Úgetattrr#   )r$   Úfuncr%   Úresults       r   Útest_null_encryption_decryptionz5ChaCha20Poly1305Tests.test_null_encryption_decryption�   sR   € Ø(ò 	*ˆDÜ&×*Ñ*¨t¯|©|Ø15·±ô@ˆFà*”W˜V TÓ*¨3Ó/ˆFØ×Ñ˜V SÕ)ñ		*r   c                 óx  — t        j                  | j                  | j                  ¬«      }|j	                  d«       | j                  t        |j                  d«       t        j                  | j                  | j                  ¬«      }|j                  d«       | j                  t        |j                  d«       y )Nr   r   )r   r   r   r   r!   r5   r6   r"   r@   s     r   Útest_either_encrypt_or_decryptz4ChaCha20Poly1305Tests.test_either_encrypt_or_decryptˆ   s€   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�sÔØ×Ñœ) V§^¡^°SÔ9ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�sÔØ×Ñœ) V§^¡^°SÕ9r   c                 ó4  — t        j                  | j                  | j                  ¬«      }| j	                  t
        |j                  d«       t        j                  | j                  | j                  ¬«      }| j	                  t
        |j                  d«       y )Nr   ztest1234567890-*)r   r   r   r   r5   r6   r!   r"   r@   s     r   Útest_data_must_be_bytesz-ChaCha20Poly1305Tests.test_data_must_be_bytes“   sj   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñœ) V§^¡^Ð5HÔIä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñœ) V§^¡^Ð5HÕIr   c                 óÌ   — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «      \  }}| j                  t        |«      d«       y )Nr   r   )r   r   r   r   Úencrypt_and_digestr   r#   r-   )r$   r%   Ú_Úmacs       r   Útest_mac_lenz"ChaCha20Poly1305Tests.test_mac_lenœ   sK   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×*Ñ*¨4¯=©=Ó9‰ˆˆ3Ø×Ñœ˜S› 2Õ&r   c                 óN  — ddl m} t        j                  | j                  | j
                  ¬«      }|j                  | j                  «      \  }} ||d«      }t        j                  | j                  | j
                  ¬«      }| j                  t        |j                  ||«       y )Nr   )Ústrxor_cr   é   )ÚCrypto.Util.strxorrX   r   r   r   r   rS   r   r5   r:   Údecrypt_and_verify)r$   rX   r%   r'   rU   Úinvalid_macs         r   Útest_invalid_macz&ChaCha20Poly1305Tests.test_invalid_mac¢   s€   € Ý/Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×+Ñ+¨D¯M©MÓ:‰ˆˆCá˜s DÓ)ˆä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñœ* f×&?Ñ&?ÀØ%õ	'r   c                 óD  — t        j                  | j                  | j                  ¬«      }|j	                  «       }| j                  |j                  «       t        |«      «       t        j                  | j                  | j                  ¬«      }|j                  |«       y ©Nr   )	r   r   r   r   Ú	hexdigestr#   Údigestr   Ú	hexverify)r$   r%   Úmac_hexs      r   Útest_hex_macz"ChaCha20Poly1305Tests.test_hex_mac¯   ss   € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×"Ñ"Ó$ˆØ×Ñ˜Ÿ™›¬)°GÓ*<Ô=ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà×Ñ˜Õ!r   c                 óX  — t        dd«      }t        dd«      }t        j                  | j                  | j                  ¬«      }|j                  |«       |j                  |«      \  }}d„ }dD ]“  }t        j                  | j                  | j                  ¬«      } |||«      D ]  }|j                  |«       Œ d}	 |||«      D ]  }|	|j                  |«      z  }	Œ | j                  ||	«       |j                  |«       Œ• dD ]¢  }t        j                  | j                  | j                  ¬«      } |||«      D ]  }|j                  |«       Œ d}
 |||«      D ]  }|
|j                  |«      z  }
Œ | j                  ||
«       | j                  |j                  «       |«       Œ¤ y )Nzauthenticated dataé   r    r   c                 ó`   — t        dt        | «      |«      D �cg c]
  }| |||z    ‘Œ c}S c c}w )Nr   )Úranger-   )r   Úchunk_lengthÚis      r   Úbreak_upz;ChaCha20Poly1305Tests.test_message_chunks.<locals>.break_upÅ   s9   € Ü49¸!¼SÀ»YØ ó5"ö #¨q�D˜˜1˜\™>Ò*ò #ð #ùò #s   ™+)
rY   é   é   é   é
   é   r   é(   éP   é€   r   )r   r   r   r   r   ÚupdaterS   r"   r#   Úverifyr!   ra   )r$   Ú	auth_datar    r%   Ú
ciphertextÚref_macrk   ri   Úchunkr(   Úct2s              r   Útest_message_chunksz)ChaCha20Poly1305Tests.test_message_chunks¹   s¦  € ô #Ð#7¸Ó=ˆ	Ü" ;°Ó4ˆ	ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�iÔ Ø$×7Ñ7¸	ÓBÑˆ
�Gò	#ð
 @ò 	#ˆLä&×*Ñ*¨t¯|©|Ø15·±ô@ˆFñ " )¨\Ó:ò %�Ø—‘˜eÕ$ð%àˆCÙ! *¨lÓ;ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à×Ñ˜Y¨Ô,Ø�M‰M˜'Õ"ð	#ð @ò 	7ˆLä&×*Ñ*¨t¯|©|Ø15·±ô@ˆFñ " )¨\Ó:ò %�Ø—‘˜eÕ$ð%àˆCÙ! )¨\Ó:ò -�Ø�v—~‘~ eÓ,Ñ,‘ð-à×Ñ˜Z¨Ô-Ø×Ñ˜VŸ]™]›_¨gÕ6ñ	7r   c                 óÌ  — t        | j                  «      }t        | j                  «      }t        | j                  «      }t        | j                  «      }t	        j
                  | j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «      }|j                  «       }t	        j
                  | j                  | j                  ¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      }	d|d d |j                  «       }
| j                  ||	«       | j                  ||
«       | j                  |j                  |j                  «       t        | j                  «      }t        | j                  «      }t        | j                  «      }t        |«      }t        |«      }~t	        j
                  | j                  | j                  ¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      }d|d d |j                  |«       | j                  || j                  «       y ©Nr   s   ÿÿÿrm   s   ™™™)Ú	bytearrayr   r   r   r   r   rt   r!   ra   r#   r   r"   ru   )r$   Úkey_baÚnonce_baÚ	header_baÚdata_baÚcipher1r'   r   Úcipher2Úct_testÚtag_testÚct_baÚtag_baÚcipher3Úpt_tests                  r   Útest_bytearrayz$ChaCha20Poly1305Tests.test_bytearrayå   sò  € ô ˜4Ÿ<™<Ó(ˆÜ˜TŸ]™]Ó+ˆÜ˜dŸm™mÓ,ˆ	Ü˜DŸM™MÓ*ˆä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà�‰�t—}‘}Ô%Ø�_‰_˜TŸ]™]Ó+ˆØ�n‰nÓˆä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà$ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ 'Ó*ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô ˜4Ÿ<™<Ó(ˆÜ˜TŸ]™]Ó+ˆÜ˜dŸm™mÓ,ˆ	Ü˜"“ˆÜ˜3“ˆØä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà$ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ %Ó(ˆØ#ˆˆbˆqˆ	Ø�‰�vÔà×Ñ˜ $§-¡-Õ0r   c                 ón  — t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        | j                  «      «      }t        j                  | j                  | j                  ¬«      }|j                  | j                  «       |j                  | j                  «      }|j                  «       }t        j                  | j                  | j                  ¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      }	d|d d |j                  «       }
| j                  ||	«       | j                  ||
«       | j                  |j                  |j                  «       t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        | j                  «      «      }t        t        |«      «      }t        t        |«      «      }~t        j                  | j                  | j                  ¬«      }d|d d d|d d |j                  |«       d|d d |j                  |«      }d|d d |j                  |«       | j                  || j                  «       y r}   )Ú
memoryviewr~   r   r   r   r   r   rt   r!   ra   r#   r   r"   ru   )r$   Úkey_mvÚnonce_mvÚ	header_mvÚdata_mvrƒ   r'   r   r„   r…   r†   Úct_mvÚtag_mvr‰   rŠ   s                  r   Útest_memoryviewz%ChaCha20Poly1305Tests.test_memoryview  s  € ô œI d§l¡lÓ3Ó4ˆÜœi¨¯©Ó6Ó7ˆÜœy¨¯©Ó7Ó8ˆ	ÜœY t§}¡}Ó5Ó6ˆä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà�‰�t—}‘}Ô%Ø�_‰_˜TŸ]™]Ó+ˆØ�n‰nÓˆä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà$ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ 'Ó*ˆØ%ˆ��ˆØ—>‘>Ó#ˆà×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'Ø×Ñ˜Ÿ™¨¯©Ô6ô œI d§l¡lÓ3Ó4ˆÜœi¨¯©Ó6Ó7ˆÜœy¨¯©Ó7Ó8ˆ	Üœ9 R›=Ó)ˆÜœI c›NÓ+ˆØä#×'Ñ'¨D¯L©LØ.2¯m©mô=ˆà$ˆˆr�ˆ
Ø&ˆ��!ˆØ�‰�yÔ!Ø'ˆ	�"�1ˆØ—/‘/ %Ó(ˆØ#ˆˆbˆqˆ	Ø�‰�vÔà×Ñ˜ $§-¡-Õ0r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r)   r1   r8   r;   rA   rC   rG   rM   rO   rQ   rV   r]   rd   r{   r‹   r”   © r   r   r   r   /   sy   „ á˜Y¨Ó+€GÙ˜j¨"Ó-€HÙ˜j¨"Ó-€Hò	"ò<ò21ò	%ò8ò	,ò#ò*ò	:òJò'ò'ò"ò*7òX.1ó`.1r   r   c                   ó   — e Zd Zd„ Zd„ Zy)ÚXChaCha20Poly1305Testsc                 ó´   — t        j                  dd¬«      }| j                  t        |j                  «      d«       | j                  |j                  d«       y )Ns    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYs   HHHHHHHHHHHHHHHHHHHHHHHHr   é   )r   r   r#   r-   r   r@   s     r   r1   z!XChaCha20Poly1305Tests.test_nonceH  sD   € ä"×&Ñ&¨9Ø-6ô8ˆà×Ñœ˜VŸ\™\Ó*¨BÔ/Ø×Ñ˜Ÿ™ yÕ1r   c                 óD  — d}t        |j                  dd«      j                  dd«      «      }t        d«      }t        d«      }t        d«      }d}t        |j                  dd«      j                  dd«      «      }t        d	«      }t        j                  ||¬
«      }|j	                  |«       |j                  |«      \  }}	| j                  ||«       | j                  ||	«       t        j                  ||¬
«      }|j	                  |«       |j                  ||«       y )Ns(  
                4c616469657320616e642047656e746c656d656e206f662074686520636c6173
                73206f66202739393a204966204920636f756c64206f6666657220796f75206f
                6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73
                637265656e20776f756c642062652069742eó   
r   ó    s   50515253c0c1c2c3c4c5c6c7s@   808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fs0   404142434445464748494a4b4c4d4e4f5051525354555657s(  
                bd6d179d3e83d43b9576579493c0e939572a1700252bfaccbed2902c21396cbb
                731c7f1b0b4aa6440bf3a82f4eda7e39ae64c6708c54c216cb96b72e1213b452
                2f8c9ba40db5d945b11b69b982c1bb9e3f3fac2bc369488f76b2383565d3fff9
                21f9664c97637da9768812f615c68b13b52es    c0875924c1c7987947deafd8780acf49r   )r   Úreplacer   r   rt   rS   r#   r[   )
r$   r&   Úaadr   Úivr'   r   r%   r…   r†   s
             r   Útest_encryptz#XChaCha20Poly1305Tests.test_encryptO  s  € ð8ˆô
 �r—z‘z %¨Ó-×5Ñ5°d¸CÓ@ÓAˆäÐ3Ó4ˆÜÐ[Ó\ˆÜÐJÓKˆð8ˆô
 �r—z‘z %¨Ó-×5Ñ5°d¸CÓ@ÓAˆäÐ;Ó<ˆä"×&Ñ&¨3°bÔ9ˆØ�‰�cÔØ"×5Ñ5°bÓ9Ñˆ�à×Ñ˜˜WÔ%Ø×Ñ˜˜hÔ'ä"×&Ñ&¨3°bÔ9ˆØ�‰�cÔØ×!Ñ! " cÕ*r   N)r•   r–   r—   r1   r£   r˜   r   r   rš   rš   F  s   „ ò2ó!+r   rš   c                   ó„   — e Zd Z edd«      Z edd«      Z ed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)ÚChaCha20Poly1305FSMTestsr   r   r   r   r   r   c                 óJ  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «      }|j                  «       }t        j                  | j                  | j                  ¬«      }|j                  |«       |j                  |«       y r_   )	r   r   r   r   r!   r   ra   r"   ru   ©r$   r%   r'   rU   s       r   Ú-test_valid_init_encrypt_decrypt_digest_verifyzFChaCha20Poly1305FSMTests.test_valid_init_encrypt_decrypt_digest_verifyy  su   € ô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�^‰^˜DŸM™MÓ*ˆØ�m‰m‹oˆô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�rÔØ�‰�cÕr   c                 ó^  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  «       }t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  |«       y r_   )r   r   r   r   rt   r   ra   ru   ©r$   r%   rU   s      r   Ú$test_valid_init_update_digest_verifyz=ChaCha20Poly1305FSMTests.test_valid_init_update_digest_verify‡  sw   € ô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø�m‰m‹oˆô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø�‰�cÕr   c                 ó¶  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  | j
                  «      }|j                  «       }t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  |«       |j                  |«       y r_   )
r   r   r   r   rt   r   r!   ra   r"   ru   r§   s       r   Útest_valid_full_pathz-ChaCha20Poly1305FSMTests.test_valid_full_path•  s•   € ô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø�^‰^˜DŸM™MÓ*ˆØ�m‰m‹oˆô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø�‰�rÔØ�‰�cÕr   c                 óz   — t        j                  | j                  | j                  ¬«      }|j	                  «        y r_   )r   r   r   r   ra   r@   s     r   Útest_valid_init_digestz/ChaCha20Poly1305FSMTests.test_valid_init_digest¥  s(   € ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�r   c                 óò   — t        j                  | j                  | j                  ¬«      }|j	                  «       }t        j                  | j                  | j                  ¬«      }|j                  |«       y r_   )r   r   r   r   ra   ru   rª   s      r   Útest_valid_init_verifyz/ChaCha20Poly1305FSMTests.test_valid_init_verify«  sS   € ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�m‰m‹oˆä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�cÕr   c                 óz  — dD ]¶  }d d| j                   | j                   dz   fD ]”  }t        j                  | j                  | j                  ¬«      }|�|j                  |«       t        ||«      } || j                   «        || j                   «        || j                   «        || j                   «       Œ– Œ¸ y )NrI   s   333ó   3r   )r   r   r   r   r   rt   rJ   )r$   Úmethod_namerv   r%   Úmethods        r   Ú&test_valid_multiple_encrypt_or_decryptz?ChaCha20Poly1305FSMTests.test_valid_multiple_encrypt_or_decryptµ  s¥   € Ø/ò 	&ˆKØ" F¨D¯M©MØ"Ÿm™m¨dÑ2ð4ò 
&�	ä*×.Ñ.°4·<±<Ø59·]±]ôD�àÐ(Ø—M‘M )Ô,Ü  ¨Ó5�Ù�t—}‘}Ô%Ù�t—}‘}Ô%Ù�t—}‘}Ô%Ù�t—}‘}Õ%ñ
&ñ	&r   c                 óÞ  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  «       }t        d«      D ]"  }| j                  ||j                  «       «       Œ$ t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       t        d«      D ]  }|j                  |«       Œ y )Nr   é   é   )
r   r   r   r   rt   r   ra   rh   r#   ru   )r$   r%   Ú	first_macÚxs       r   Ú$test_valid_multiple_digest_or_verifyz=ChaCha20Poly1305FSMTests.test_valid_multiple_digest_or_verifyÃ  s±   € ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø—M‘M“Oˆ	Ü�q“ò 	9ˆAØ×Ñ˜Y¨¯©«Õ8ð	9ô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ü�q“ò 	%ˆAØ�M‰M˜)Õ$ñ	%r   c                 ó´  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  | j
                  «      \  }}t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  ||«      }| j                  | j
                  |«       y r_   )	r   r   r   r   rt   r   rS   r[   r#   )r$   r%   r'   rU   r&   s        r   Ú0test_valid_encrypt_and_digest_decrypt_and_verifyzIChaCha20Poly1305FSMTests.test_valid_encrypt_and_digest_decrypt_and_verifyÓ  sœ   € ä"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø×+Ñ+¨D¯M©MÓ:‰ˆˆCô #×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�‰�d—m‘mÔ$Ø×&Ñ& r¨3Ó/ˆØ×Ñ˜Ÿ™¨Õ+r   c           	      óD  — dD ]›  \  }}dD ]‘  }t        j                  | j                  | j                  ¬«      }|r|j	                  | j
                  «        t        ||«      | j
                  «       | j                  t        t        ||«      | j
                  «       Œ“ Œ� y )N)rI   )r"   r!   )TFr   )	r   r   r   r   rt   r   rJ   r5   r6   )r$   Úmethod1_nameÚmethod2_nameÚassoc_data_presentr%   s        r   Ú#test_invalid_mixing_encrypt_decryptz<ChaCha20Poly1305FSMTests.test_invalid_mixing_encrypt_decryptá  s�   € ð+Cò 		1Ñ&ˆL˜,à&3ò 1Ð"Ü*×.Ñ.°4·<±<Ø59·]±]ôD�á%Ø—M‘M $§-¡-Ô0Ø-”˜ Ó-¨d¯m©mÔ<Ø×!Ñ!¤)¬W°V¸\Ó-JØ"&§-¡-õ1ñ1ñ		1r   c                 ó   — dD ]É  }t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «       |j                  «        | j                  t        t        ||«      | j
                  «       t        j                  | j                  | j                  ¬«      }|j                  | j
                  «       ŒË y )N)r!   rt   r   )r   r   r   r   r!   r   ra   r5   r6   rJ   rS   )r$   r´   r%   s      r   Ú+test_invalid_encrypt_or_update_after_digestzDChaCha20Poly1305FSMTests.test_invalid_encrypt_or_update_after_digestî  sš   € Ø.ò 
	5ˆKÜ&×*Ñ*¨t¯|©|Ø15·±ô@ˆFà�N‰N˜4Ÿ=™=Ô)Ø�M‰MŒOØ×Ñœi¬°¸Ó)EØ"Ÿm™mô-ô '×*Ñ*¨t¯|©|Ø15·±ô@ˆFà×%Ñ% d§m¡mÕ4ñ
	5r   c                 ór  — t        j                  | j                  | j                  ¬«      }|j	                  | j
                  «      }|j                  «       }dD �][  }t        j                  | j                  | j                  ¬«      }|j                  |«       |j                  |«       | j                  t        t        ||«      | j
                  «       t        j                  | j                  | j                  ¬«      }|j                  |«       |j                  |«       | j                  t        t        ||«      | j
                  «       t        j                  | j                  | j                  ¬«      }|j                  ||«       | j                  t        t        ||«      | j
                  «       �Œ^ y )Nr   )r"   rt   )r   r   r   r   r!   r   ra   r"   ru   r5   r6   rJ   r[   )r$   r%   r'   rU   r´   s        r   Ú+test_invalid_decrypt_or_update_after_verifyzDChaCha20Poly1305FSMTests.test_invalid_decrypt_or_update_after_verifyû  sI  € Ü"×&Ñ&¨4¯<©<Ø-1¯]©]ô<ˆà�^‰^˜DŸM™MÓ*ˆØ�m‰m‹oˆà.ó 	-ˆKÜ&×*Ñ*¨t¯|©|Ø15·±ô@ˆFà�N‰N˜2ÔØ�M‰M˜#ÔØ×Ñœi¬°¸Ó)EØ"Ÿm™mô-ô '×*Ñ*¨t¯|©|Ø15·±ô@ˆFà�N‰N˜2ÔØ�M‰M˜#ÔØ×Ñœi¬°¸Ó)EØ"Ÿm™mô-ô '×*Ñ*¨t¯|©|Ø15·±ô@ˆFà×%Ñ% b¨#Ô.Ø×Ñœi¬°¸Ó)EØ"Ÿm™mö-ñ%	-r   N)r•   r–   r—   r   r   r   r   r¨   r«   r­   r¯   r±   r¶   r¼   r¾   rÃ   rÅ   rÇ   r˜   r   r   r¥   r¥   s  s]   „ á˜Y¨Ó+€GÙ˜j¨"Ó-€HÙ˜j¨"Ó-€Hòòòò òò&ò%ò ,ò1ò5ó-r   r¥   c                 óX   — t        | j                  dd«      j                  dd«      «      S )Nú Ú ú:)r   r    )r»   s    r   ÚcompactrÌ     s%   € Ü�Q—Y‘Y˜s BÓ'×/Ñ/°°RÓ8Ó9Ð9r   c                   óÒ   — e Zd ZdZddgZeD � ���cg c];  }|D �cg c]-  }t        |j                  dd«      j                  dd«      «      ‘Œ/ c}‘Œ= c}}}} Zd„ Zyc c}w c c}}}} w )	ÚTestVectorsRFCzTest cases from RFC7539)z#50 51 52 53 c0 c1 c2 c3 c4 c5 c6 c7aN  4c 61 64 69 65 73 20 61 6e 64 20 47 65 6e 74 6c65 6d 65 6e 20 6f 66 20 74 68 65 20 63 6c 61 7373 20 6f 66 20 27 39 39 3a 20 49 66 20 49 20 636f 75 6c 64 20 6f 66 66 65 72 20 79 6f 75 20 6f6e 6c 79 20 6f 6e 65 20 74 69 70 20 66 6f 72 2074 68 65 20 66 75 74 75 72 65 2c 20 73 75 6e 7363 72 65 65 6e 20 77 6f 75 6c 64 20 62 65 20 6974 2eaN  d3 1a 8d 34 64 8e 60 db 7b 86 af bc 53 ef 7e c2a4 ad ed 51 29 6e 08 fe a9 e2 b5 a7 36 ee 62 d63d be a4 5e 8c a9 67 12 82 fa fb 69 da 92 72 8b1a 71 de 0a 9e 06 0b 29 05 d6 a5 b6 7e cd 3b 3692 dd bd 7f 2d 77 8b 8c 98 03 ae e3 28 09 1b 58fa b3 24 e4 fa d6 75 94 55 85 80 8b 48 31 d7 bc3f f4 de f0 8e 4b 7a 9d e5 76 d2 65 86 ce c6 4b61 16z/1a:e1:0b:59:4f:09:e2:6a:7e:90:2e:cb:d0:60:06:91z^80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9fz"07 00 00 0040 41 42 43 44 45 46 47)z#f3 33 88 86 00 00 00 00 00 00 4e 91a
  49 6e 74 65 72 6e 65 74 2d 44 72 61 66 74 73 2061 72 65 20 64 72 61 66 74 20 64 6f 63 75 6d 656e 74 73 20 76 61 6c 69 64 20 66 6f 72 20 61 206d 61 78 69 6d 75 6d 20 6f 66 20 73 69 78 20 6d6f 6e 74 68 73 20 61 6e 64 20 6d 61 79 20 62 6520 75 70 64 61 74 65 64 2c 20 72 65 70 6c 61 6365 64 2c 20 6f 72 20 6f 62 73 6f 6c 65 74 65 6420 62 79 20 6f 74 68 65 72 20 64 6f 63 75 6d 656e 74 73 20 61 74 20 61 6e 79 20 74 69 6d 65 2e20 49 74 20 69 73 20 69 6e 61 70 70 72 6f 70 7269 61 74 65 20 74 6f 20 75 73 65 20 49 6e 74 6572 6e 65 74 2d 44 72 61 66 74 73 20 61 73 20 7265 66 65 72 65 6e 63 65 20 6d 61 74 65 72 69 616c 20 6f 72 20 74 6f 20 63 69 74 65 20 74 68 656d 20 6f 74 68 65 72 20 74 68 61 6e 20 61 73 202f e2 80 9c 77 6f 72 6b 20 69 6e 20 70 72 6f 6772 65 73 73 2e 2f e2 80 9da
  64 a0 86 15 75 86 1a f4 60 f0 62 c7 9b e6 43 bd5e 80 5c fd 34 5c f3 89 f1 08 67 0a c7 6c 8c b24c 6c fc 18 75 5d 43 ee a0 9e e9 4e 38 2d 26 b0bd b7 b7 3c 32 1b 01 00 d4 f0 3b 7f 35 58 94 cf33 2f 83 0e 71 0b 97 ce 98 c8 a8 4a bd 0b 94 8114 ad 17 6e 00 8d 33 bd 60 f9 82 b1 ff 37 c8 5597 97 a0 6e f4 f0 ef 61 c1 86 32 4e 2b 35 06 3836 06 90 7b 6a 7c 02 b0 f9 f6 15 7b 53 c8 67 e4b9 16 6c 76 7b 80 4d 46 a5 9b 52 16 cd e7 a4 e990 40 c5 a4 04 33 22 5e e2 82 a1 b0 a0 6c 52 3eaf 45 34 d7 f8 3f a1 15 5b 00 47 71 8c bc 54 6a0d 07 2b 04 b3 56 4e ea 1b 42 22 73 f5 48 27 1a0b b2 31 60 53 fa 76 99 19 55 eb d6 31 59 43 4ece bb 4e 46 6d ae 5a 10 73 a6 72 76 27 09 7a 1049 e6 17 d9 1d 36 10 94 fa 68 f0 ff 77 98 71 3030 5b ea ba 2e da 04 df 99 7b 71 4d 6c 6f 2c 29a6 ad 5c b4 02 2b 02 70 9bz/ee ad 9d 67 89 0c bb 22 39 23 36 fe a1 85 1f 38z^1c 92 40 a5 eb 55 d3 8a f3 33 88 86 04 f6 b5 f047 39 17 c1 40 2b 80 09 9d ca 5c bc 20 70 75 c0z#00 00 00 00 01 02 03 04 05 06 07 08rÉ   rÊ   rË   c                 óŒ  — | j                   D ]µ  \  }}}}}}t        j                  ||¬«      }|j                  |«       |j	                  |«      \  }}	| j                  ||«       | j                  ||	«       t        j                  ||¬«      }|j                  |«       |j                  ||«      }
| j                  ||
«       Œ· y r_   )Útest_vectorsr   r   rt   rS   r#   r[   )r$   Ú
assoc_datar&   r'   rU   r   r   r%   rz   Úmac2r(   s              r   ÚrunTestzTestVectorsRFC.runTestb  s¸   € Ø37×3DÑ3Dò 	&Ñ/ˆJ˜˜B  S¨%ä&×*Ñ*¨s¸%Ô@ˆFØ�M‰M˜*Ô%Ø×1Ñ1°"Ó5‰IˆC�Ø×Ñ˜R Ô%Ø×Ñ˜S $Ô'ô '×*Ñ*¨s¸%Ô@ˆFØ�M‰M˜*Ô%Ø×+Ñ+¨B°Ó4ˆCØ×Ñ˜R Õ%ñ	&r   N)	r•   r–   r—   Ú__doc__Útest_vectors_hexr   r    rÐ   rÓ   )Ú.0Útvr»   r   s   0000r   rÎ   rÎ     sf   „ Ù!ð	
ð,'	
ð/?ÐðB \l×lÑlÐUWÈRÖPÈ”Y˜qŸy™y¨¨bÓ1×9Ñ9¸#¸rÓBÕCÔPÕl€Ló&ùò QùÕls   ’	A!
›2AÁA!
ÁA!
rÎ   c                   óB   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)ÚTestVectorsWycheproofc                 ó^   — t         j                  j                  | «       || _        d| _        y )NÚNone)ÚunittestÚTestCaseÚ__init__Ú_wycheproof_warningsÚ_id)r$   Úwycheproof_warningss     r   rÞ   zTestVectorsWycheproof.__init__t  s%   € Ü×Ñ×"Ñ" 4Ô(Ø$7ˆÔ!Øˆ�r   c                 ó:   — d„ }d„ }t        d|dd|id|i¬«      }|S )Nc                 ó   — | d   dz  S )NÚtagSizer+   r˜   )Úgroups    r   Ú
filter_tagz4TestVectorsWycheproof.load_tests.<locals>.filter_tag{  s   € Ø˜Ñ# qÑ(Ð(r   c                 ó   — | d   S )NÚ	algorithmr˜   )Úroots    r   Úfilter_algoz5TestVectorsWycheproof.load_tests.<locals>.filter_algo~  s   € Ø˜Ñ$Ð$r   )ÚCipherÚ
wycheproofzWycheproof ChaCha20-Poly1305ÚalgoÚtag_size)Úroot_tagÚ	group_tagr   )r$   Úfilenameræ   rê   rL   s        r   Ú
load_testsz TestVectorsWycheproof.load_testsy  s9   € ò	)ò	%ô .Ð.FØ/7Ø/MØ9?ÀÐ8MØ:DÀjÐ9Qô	Sˆð
 ˆr   c                 óº   — g | _         | j                   j                  | j                  d«      «       | j                   j                  | j                  d«      «       y )Nzchacha20_poly1305_test.jsonzxchacha20_poly1305_test.json)r×   Úextendrò   r7   s    r   ÚsetUpzTestVectorsWycheproof.setUpˆ  s=   € ØˆŒØ�‰�‰�t—‘Ð'DÓEÔFØ�‰�‰�t—‘Ð'EÓFÕGr   c                 ó   — | j                   S ©N)rà   r7   s    r   ÚshortDescriptionz&TestVectorsWycheproof.shortDescription�  s   € Ø�x‰xˆr   c                 ó˜   — |j                   r>| j                  r1dd l}|j                  d| j                  ›d|j
                  ›d�«       y y y )Nr   zWycheproof warning: z (ú))Úwarningrß   ÚwarningsÚwarnrà   Úcomment)r$   r×   rü   s      r   rý   zTestVectorsWycheproof.warn�  s4   € Ø�:Š:˜$×3Ò3ÛØ�MŠM¸4¿8»8ÀRÇZÃZÐPÕQð 4ˆ:r   c                 ó4  — d|j                   ›d|j                  ›�| _        	 t        j                  |j
                  |j                  ¬«      }|j                  |j                  «       |j                  |j                  «      \  }}|j                  rJ| j                  ||j                   «       | j                  ||j"                  «       | j%                  |«       y y # t        $ r0}t        |j                  «      dvrdt        |«      v sJ ‚Y d }~y d }~ww xY w)NzWycheproof Encrypt ú Test #r   ©r+   r   úNonce must be)rí   Úidrà   r   r   r   r¢   r:   r-   Ústrrt   r¡   rS   ÚmsgÚvalidr#   r'   r   rý   )r$   r×   r%   Úer'   r   s         r   r£   z"TestVectorsWycheproof.test_encrypt•  sÔ   � Ø79·w³wÀÇÂÐFˆŒð	Ü&×*Ñ*¨r¯v©v¸R¿U¹UÔCˆFð
 	�‰�b—f‘fÔØ×+Ñ+¨B¯F©FÓ3‰ˆˆCØ�8Š8Ø×Ñ˜R §¡Ô'Ø×Ñ˜S "§&¡&Ô)Ø�I‰I�b�Mð øô ò 	Ü�r—u‘u“: WÑ,°ÄCÈÃFÑ1JÐJÐJÜûð	ús   £+C Ã	DÃ'&DÄDc                 óJ  — d|j                   ›d|j                  ›�| _        	 t        j                  |j
                  |j                  ¬«      }|j                  |j                  «       	 |j                  |j                  |j                  «      }|j                  sJ ‚| j!                  ||j"                  «       | j%                  |«       y # t        $ r0}t        |j                  «      dvrdt        |«      v sJ ‚Y d }~y d }~ww xY w# t        $ r |j                  rJ ‚Y y w xY w)NzWycheproof Decrypt r   r   r  r  )rí   r  rà   r   r   r   r¢   r:   r-   r  rt   r¡   r[   r'   r   r  r#   r  rý   )r$   r×   r%   r  r&   s        r   Útest_decryptz"TestVectorsWycheproof.test_decrypt¥  sæ   � Ø79·w³wÀÇÂÐFˆŒð	Ü&×*Ñ*¨r¯v©v¸R¿U¹UÔCˆFð
 	�‰�b—f‘fÔð	Ø×*Ñ*¨2¯5©5°"·&±&Ó9ˆBð —8’8ˆO�8Ø×Ñ˜R §¡Ô(Ø�I‰I�b�Møô ò 	Ü�r—u‘u“: WÑ,°ÄCÈÃFÑ1JÐJÐJÜûð	ûô ò 	 Ø—x’xÐ�<‘xð	 ús)   £+C Á*&D Ã	DÃ&D Ä DÄD"Ä!D"c                 óè  — dt        |j                  «      z   | _        t        |j                  «      dk(  st        |j
                  «      dk  ry t        j                  |j                  |j                  ¬«      }|j                  |j                  «       t        |j
                  dt        |j
                  «      dz
  z  dz   «      }| j                  t        |j                  ||j                  «       y )Nz3Wycheproof Corrupt Decrypt ChaCha20-Poly1305 Test #r   rY   r   ó    ó   )r  r  rà   r-   r¢   r'   r   r   r   rt   r¡   r
   r5   r:   r[   r   )r$   r×   r%   Ú
ct_corrupts       r   Útest_corrupt_decryptz*TestVectorsWycheproof.test_corrupt_decrypt¸  s¤   € ØHÌ3ÈrÏuÉuË:ÑUˆŒÜˆr�u‰u‹:˜Š?œc "§%¡%›j¨1šnØÜ"×&Ñ&¨2¯6©6¸¿¹Ô?ˆØ�‰�b—f‘fÔÜ˜BŸE™E 7¬c°"·%±%«j¸1©nÑ#=ÀÑ#GÓHˆ
Ø×Ñœ* f×&?Ñ&?ÀÈRÏVÉVÕTr   c                 óŒ   — | j                   D ]5  }| j                  |«       | j                  |«       | j                  |«       Œ7 y r÷   )r×   r£   r	  r  )r$   r×   s     r   rÓ   zTestVectorsWycheproof.runTestÁ  s?   € à—'‘'ò 	*ˆBØ×Ñ˜bÔ!Ø×Ñ˜bÔ!Ø×%Ñ% bÕ)ñ	*r   N)r•   r–   r—   rÞ   rò   rõ   rø   rý   r£   r	  r  rÓ   r˜   r   r   rÙ   rÙ   r  s2   „ òò
òHò
òRò
ò ò&Uó*r   rÙ   c                   ó   — e Zd Zd„ Zy)Ú
TestOutputc                 ó¬  — d}d}t        j                  ||¬«      }d}|j                  |«      }t        d«      }t        j                  ||¬«      }|j                  ||¬«      }| j	                  ||«       | j	                  |d «       t        j                  ||¬«      }|j                  ||¬«      }| j	                  ||«       | j	                  |d «       t        t        d«      «      }t        j                  ||¬«      }|j                  ||¬«       | j	                  ||«       t        j                  ||¬«      }|j                  ||¬«       | j	                  ||«       t        j                  ||¬«      }| j                  t        |j                  |d¬«       t        j                  ||¬«      }| j                  t        |j
                  |d¬«       t        d«      }t        j                  ||¬«      }| j                  t        |j                  ||¬«       t        j                  ||¬«      }| j                  t        |j
                  ||¬«       y )	Ns    44444444444444444444444444444444s   555555555555r   s   5555555555555555r   )Úoutputs   0000000000000000rn   )
r   r   r!   r~   r#   r"   r�   r5   r6   r:   )	r$   r   r   r%   r&   r'   r  ÚresÚshorter_outputs	            r   rÓ   zTestOutput.runTestË  só  € ð ˆØˆÜ"×&Ñ&¨3°eÔ<ˆàˆØ�^‰^˜BÓˆä˜2“ˆÜ"×&Ñ&¨3°eÔ<ˆØ�n‰n˜R¨ˆnÓ/ˆØ×Ñ˜˜VÔ$Ø×Ñ˜˜dÔ#ä"×&Ñ&¨3°eÔ<ˆØ�n‰n˜R¨ˆnÓ/ˆØ×Ñ˜˜VÔ$Ø×Ñ˜˜dÔ#äœI b›MÓ*ˆÜ"×&Ñ&¨3°eÔ<ˆØ�‰�r &ˆÔ)Ø×Ñ˜˜VÔ$ä"×&Ñ&¨3°eÔ<ˆØ�‰�r &ˆÔ)Ø×Ñ˜˜VÔ$ä"×&Ñ&¨3°eÔ<ˆØ×Ñœ) V§^¡^°RÀÐÔHä"×&Ñ&¨3°eÔ<ˆØ×Ñœ) V§^¡^°RÀÐÔHä" 1›ˆä"×&Ñ&¨3°eÔ<ˆØ×Ñœ* f§n¡n°bÀÐÔPä"×&Ñ&¨3°eÔ<ˆØ×Ñœ* f§n¡n°bÀÐÕPr   N)r•   r–   r—   rÓ   r˜   r   r   r  r  É  s   „ ó*Qr   r  c                 óî   — | j                  d«      }g }|t        t        «      z  }|t        t        «      z  }|t        t        «      z  }|t        «       gz  }|t        |«      gz  }|t        «       gz  }|S )Nrá   )Úgetr   r   rš   r¥   rÎ   rÙ   r  )Úconfigrá   Útestss      r   Ú	get_testsr  ø  s~   € Ø Ÿ*™*Ð%:Ó;Ðà€EØ	Œ_Ô2Ó3Ñ3€EØ	Œ_Ô3Ó4Ñ4€EØ	Œ_Ô5Ó6Ñ6€EØ	ŒnÓÐÑ€EØ	Ô#Ð$7Ó8Ð9Ñ9€EØ	Œj‹lˆ^Ñ€EØ€Lr   Ú__main__c                  ó>   — t        j                  t        «       «       y r÷   )rÜ   Ú	TestSuiter  r˜   r   r   Úsuiter    s   € Ü×Ñœ9›;Õ'r   r  )ÚdefaultTest)rÜ   Úbinasciir   ÚCrypto.SelfTest.st_commonr   ÚCrypto.SelfTest.loaderr   ÚCrypto.Util.py3compatr   ÚCrypto.Cipherr   ÚCrypto.Hashr	   rZ   r
   r   rÝ   r   rš   r¥   rÌ   rÎ   rÙ   r  r  r•   r  Úmainr˜   r   r   ú<module>r'     sÑ   ðó> Ý å 5Ý ?Ý )Ý +Ý  å %ò8ôT1˜H×-Ñ-ô T1ôn*+˜X×.Ñ.ô *+ôZa-˜x×0Ñ0ô a-òH:ôT&�X×&Ñ&ô T&ônT*˜H×-Ñ-ô T*ôn,Q�×"Ñ"ô ,Qð^ ó 
ð ˆzÒò(à€H‡M�M˜gÖ&ð r   