o
    ^¨Êh?!  ã                   @   sŽ   d Z dZddlZddlmZmZmZ ddlmZ ddl	m
Z
 ddlT ddlT G dd	„ d	ejƒZi fd
d„ZedkrEdd„ Zejdd� dS dS )z,Self-test suite for Crypto.PublicKey.ElGamalz$Id$é    N)Úlist_test_casesÚa2b_hexÚb2a_hex)ÚRandom)ÚElGamal)Ú*c                
   @   sÆ   e Zd Zddddddddd	œd
dddddddd	œgZdddddddddœdddddddddœgZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Z	d)d*„ Z
d9d,d-„Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8S ):ÚElGamalTestÚ@BA4CAEAAED8CBE952AFD2126C63EB3B345D65C2A0A73D2A3AD4138B6D09BD933Ú05Ú@60D063600ECED7C7C55146020E7A31C4476E9793BEAED420FEC9E77604CAE4EFÚ.1D391BA2EE3C37FE1BA175A69B2C73A11238AD77675932Ú.F5893C5BAB4131264066F57AB3D8AD89E391A0B68A68A1Ú48656C6C6F207468657265Ú@32BFD5F487966CEA9E9356715788C491EC515E4ED48B58F0F00971E93AAA5EC7Ú@7BE8FBFF317C93E82FCEF9BD515284BA506603FEA25D01C0CB874A31F315EE68)ÚpÚgÚyÚxÚkÚptÚct1Úct2Ú€F1B18AE9F7B4E08FDA9A04832F4E919D89462FD31BF12F92791A93519F75076D6CE3942689CDFF2F344CAFF0F82D01864F69F3AECF566C774CBACF728B81A227Ú07Ú€688628C676E4F05D630E1BE39D0066178CA7AA83836B645DE5ADD359B4825A12B02EF4252E4E6FA9BEC1DB0BE90F6D7C8629CABB6E531F472B2664868156E20CÚ.14E60B1BDFD33436C0DA8A22FDC14A2CCDBBED0627CE68Ú.38DBF14E1F319BDA9BAB33EEEADCAF6B2EA5250577ACE7Ú€290F8530C2CC312EC46178724F196F308AD4C523CEABB001FACB0506BFED676083FE0F27AC688B5C749AB3CB8A80CD6F7094DBA421FB19442F5A413E06A9772BÚ€1D69AAAD1DC50493FB1B8E8721D621D683F3BF1321BE21BC4A43E11B40C9D4D9C80DE3AAC2AB60D31782B16B61112E68220889D53C4C3136EE6F6CE61F8A23A0Ú@D2F3C41EA66530838A704A48FFAC9334F4701ECE3A97CEE4C69DD01AE7129DD7Ú@C3F9417DC0DAFEA6A05C1D2333B7A95E63B3F4F28CC962254B3256984D1012E7Ú.165E4A39BE44D5A2D8B1332D416BC559616F536BC735BBÚ@C7F0C794A7EAD726E25A47FF8928013680E73C51DD3D7D99BFDA8F492585928FÚ@35CA98133779E2073EF31165AFCDEB764DD54E96ADE851715495F9C635E1E7C2Ú@0135B88B1151279FE5D8078D4FC685EE81177EE9802AB123A73925FC1CB059A7)r   r   r   r   r   ÚhÚsig1Úsig2Ú€E24CF3A4B8A6AF749DCA6D714282FE4AABEEE44A53BB6ED15FBE32B5D3C3EF9CC4124A2ECA331F3C1C1B667ACA3766825217E7B5F9856648D95F05330C6A19CFÚ0BÚ€2AD3A1049CA5D4ED207B2431C79A8719BB4073D4A94E450EA6CEE8A760EB07ADB67C0D52C275EE85D7B52789061EE45F2F37D9B2AE522A51C28329766BFE68ACÚ.16CBB4F46D9ECCF24FF9F7E63CAA3BD8936341555062ABÚ€8A3D89A4E429FD2476D7D717251FB79BF900FFE77444E6BB8299DC3F84D0DD57ABAB50732AE158EA52F5B9E7D8813E81FD9F79470AE22F8F1CF9AEC820A78C69Ú€BE001AABAFFF976EC9016198FBFEA14CBEF96B000CCC0063D3324016F9E91FE80D8F9325812ED24DDB2B4D4CF4430B169880B3CE88313B53255BD4EC0378586FÚ€5E266F3F837BA204E3BBB6DBECC0611429D96F8C7CE8F4EFDF9D4CB681C2A954468A357BF4242CEC7418B51DFC081BCD21299EF5B5A0DDEF3A139A1817503DDEc                 C   ó   |   d¡ d S )Né€   ©Ú_test_random_key©Úself© r6   úX/var/www/html/env/lib/python3.10/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyÚtest_generate_128`   ó   zElGamalTest.test_generate_128c                 C   r0   )Ni   r2   r4   r6   r6   r7   Útest_generate_512c   r9   zElGamalTest.test_generate_512c                 C   sp   | j D ]2}dD ]-}|  ||¡}t |d ¡}| |d |d ¡}|  |d |d ¡ |  |d |d ¡ qqd S )	N©r   é   Úkeyr   r   r   r   r<   r   )ÚtveÚ
convert_tvr   Ú	constructÚencryptÚassertEqual)r5   ÚtvÚas_longsÚdr=   Úctr6   r6   r7   Útest_encryptionf   s   
ûÿzElGamalTest.test_encryptionc                 C   sZ   | j D ]'}dD ]"}|  ||¡}t |d ¡}| |d |d f¡}|  ||d ¡ qqd S )Nr;   r=   r   r   r   )r>   r?   r   r@   ÚdecryptrB   )r5   rC   rD   rE   r=   r   r6   r6   r7   Útest_decryptiono   s   
üÿzElGamalTest.test_decryptionc                 C   sl   | j D ]0}dD ]+}|  ||¡}t |d ¡}| |d |d ¡\}}|  ||d ¡ |  ||d ¡ qqd S )Nr;   r=   r&   r   r'   r(   )Útvsr?   r   r@   ÚsignrB   )r5   rC   rD   rE   r=   r'   r(   r6   r6   r7   Útest_signingw   s   
ûÿzElGamalTest.test_signingc                 C   s„   | j D ]<}dD ]7}|  ||¡}t |d ¡}| |d |d |d f¡}|  |¡ | |d |d d |d f¡}|  |¡ qqd S )Nr;   r=   r&   r'   r(   r<   )rJ   r?   r   r@   ÚverifyÚ
assertTrueÚassertFalse)r5   rC   rD   rE   r=   Úresr6   r6   r7   Útest_verification€   s   

 øÿzElGamalTest.test_verificationr   c                 C   s€   d}i }t | ¡ ƒD ]}t|| ƒ||< |s||v s|dv r&t|| ƒ||< q
g |d< |D ]}|d  || g7  < ||= q-|S )zfConvert a test vector from textual form (hexadecimal ascii
        to either integers or byte strings.)r   r   r   r   )r'   r(   r=   )ÚlistÚkeysr   Úbytes_to_long)r5   rC   rD   Ú	key_compsÚtv2Úcr6   r6   r7   r?   Œ   s   €zElGamalTest.convert_tvc                 C   sF   t  |t ¡ j¡}|  |¡ |  |¡ | ¡ }|  |¡ |  	|¡ d S ©N)
r   Úgenerater   ÚnewÚreadÚ_check_private_keyÚ_exercise_primitiveÚ	publickeyÚ_check_public_keyÚ_exercise_public_primitive)r5   ÚbitsÚelgObjÚpubr6   r6   r7   r3   ›   s   


zElGamalTest._test_random_keyc                 C   s´   |   | ¡ ¡ |   | ¡ ¡ |   | ¡ ¡ |   d|j  k o$|jd k n  ¡ |  t|j|jd |jƒd¡ |   d|j  k oF|jd k n  ¡ |  t|j|j|jƒ|j	¡ d S ©Nr<   )
rN   Úhas_privateÚcan_signÚcan_encryptr   r   rB   Úpowr   r   ©r5   rb   r6   r6   r7   r\   £   s   && zElGamalTest._check_private_keyc                 C   sr   |   | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  d|j  k o$|jd k n  ¡ |  t|j|jd |jƒd¡ d S rd   )	rO   re   rN   rf   rg   r   r   rB   rh   ri   r6   r6   r7   r_   °   s
   &"zElGamalTest._check_public_keyc                 C   sF   t dƒ}| |d¡}| |¡}|  ||¡ | |d¡}| ||¡ d S )NÚTestéÍ[i±hÞ:)ÚbrA   rH   rB   rK   rM   )r5   rb   Ú	plaintextÚ
ciphertextÚ
plaintextPÚ	signaturer6   r6   r7   r]   »   s   
zElGamalTest._exercise_primitivec                 C   s   t dƒ}| |d¡}d S )Nrj   rk   )rl   rA   )r5   rb   rm   rn   r6   r6   r7   r`   Æ   s   z&ElGamalTest._exercise_public_primitiveN)r   )Ú__name__Ú
__module__Ú__qualname__r>   rJ   r8   r:   rG   rI   rL   rQ   r?   r3   r\   r_   r]   r`   r6   r6   r6   r7   r   "   sf    ÷÷ó÷÷ô		
r   c                 C   s   g }|t tƒ7 }|S rX   )r   r   )ÚconfigÚtestsr6   r6   r7   Ú	get_testsÊ   s   rv   Ú__main__c                   C   s   t  tƒ ¡S rX   )ÚunittestÚ	TestSuiterv   r6   r6   r6   r7   Ú<lambda>Ð   s    rz   Úsuite)ÚdefaultTest)Ú__doc__Ú__revision__rx   ÚCrypto.SelfTest.st_commonr   r   r   ÚCryptor   ÚCrypto.PublicKeyr   ÚCrypto.Util.numberÚCrypto.Util.py3compatÚTestCaser   rv   rq   r{   Úmainr6   r6   r6   r7   Ú<module>   s    )þ