Ë
    (üàgÈ!  ã                   óÂ   — 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mZ ddl­  G d	„ d
ej                  «      Zi fd„Zedk(  rd„ Z ej&                  d¬«       yy)z,Self-test suite for Crypto.PublicKey.ElGamalz$Id$é    N)Úlist_test_casesÚa2b_hexÚb2a_hex)ÚRandom)ÚElGamal)Úbytes_to_long)Ú*c            
       ó´   — 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„ Zd „ Zd!„ Zd"„ Zd#„ Z	d$„ Z
d%„ Zd-d&„Zd'„ Zd(„ Zd)„ Zd*„ Zd+„ Zy,).Ú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                 ó&   — | j                  d«       y )Né´   )Ú_test_random_key)Úselfs    úd/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyÚtest_generate_180zElGamalTest.test_generate_180`   s   € Ø×Ñ˜cÕ"ó    c                 ó
  — | j                   D ]t  }| j                  |d«      }t        j                  |d   «      }|j	                  |d   |d   «      }| j                  |d   |d   «       | j                  |d   |d   «       Œv y )	NTÚkeyr   r   r   r   é   r   )ÚtveÚ
convert_tvr   Ú	constructÚ_encryptÚassertEqual)r6   ÚtvÚdr;   Úcts        r7   Útest_encryptionzElGamalTest.test_encryptionc   s�   € Ø—(‘(ò 	.ˆBØ—‘  DÓ)ˆAÜ×#Ñ# A e¡HÓ-ˆCØ—‘˜a ™g q¨¡vÓ.ˆBØ×Ñ˜R ™U A e¡HÔ-Ø×Ñ˜R ™U A e¡HÕ-ñ	.r9   c                 óÖ   — | j                   D ]Z  }| j                  |d«      }t        j                  |d   «      }|j	                  |d   |d   f«      }| j                  ||d   «       Œ\ y )NTr;   r   r   r   )r=   r>   r   r?   Ú_decryptrA   )r6   rB   rC   r;   r   s        r7   Útest_decryptionzElGamalTest.test_decryptionk   sh   € Ø—(‘(ò 	*ˆBØ—‘  DÓ)ˆAÜ×#Ñ# A e¡HÓ-ˆCØ—‘˜q ™x¨¨5©Ð2Ó3ˆBØ×Ñ˜R  4¡Õ)ñ		*r9   c                 ó  — | j                   D ]q  }| j                  |d«      }t        j                  |d   «      }|j	                  |d   |d   «      \  }}| j                  ||d   «       | j                  ||d   «       Œs y )NTr;   r)   r   r*   r+   )Útvsr>   r   r?   Ú_signrA   )r6   rB   rC   r;   r*   r+   s         r7   Útest_signingzElGamalTest.test_signingr   s}   € Ø—(‘(ò 	.ˆBØ—‘  DÓ)ˆAÜ×#Ñ# A e¡HÓ-ˆCØŸ™ 1 S¡6¨1¨S©6Ó2‰JˆD�$Ø×Ñ˜T 1 V¡9Ô-Ø×Ñ˜T 1 V¡9Õ-ñ	.r9   c                 ó8  — | j                   D ]‹  }| j                  |d«      }t        j                  |d   «      }|j	                  |d   |d   |d   f«      }| j                  |«       |j	                  |d   |d   dz   |d   f«      }| j                  |«       Œ� y )NTr;   r)   r*   r+   r<   )rJ   r>   r   r?   Ú_verifyÚ
assertTrueÚassertFalse)r6   rB   rC   r;   Úress        r7   Útest_verificationzElGamalTest.test_verificationz   s™   € Ø—(‘(ò 	"ˆBØ—‘  DÓ)ˆAÜ×#Ñ# A e¡HÓ-ˆCà—+‘+˜q ™v¨¨&©	°!°F±)Ð'<Ó>ˆCØ�O‰O˜CÔ à—+‘+˜q ™v¨¨&©	°!©°A°f±IÐ'>Ó@ˆCØ×Ñ˜SÕ!ñ	"r9   c                 ó„  — t        | j                  | j                  d   d«      d   «      d d x}}|dxx   dz  cc<   | j                  t        t
        j                  |«       |}d|d<   | j                  t        t
        j                  |«       |}|d   dz  |d<   | j                  t        t
        j                  |«       y )Nr   r<   r;   é   é   ©Úlistr>   rJ   ÚassertRaisesÚ
ValueErrorr   r?   ©r6   ÚtupÚtup0s      r7   Útest_bad_key3zElGamalTest.test_bad_key3…   s©   € Ü˜$Ÿ/™/¨$¯(©(°1©+°qÓ9¸%Ñ@ÓAÀ"À1ÐEÐEˆˆdØˆA‹�!‰‹Ø×Ñœ*¤g×&7Ñ&7¸Ô=àˆØˆˆA‰Ø×Ñœ*¤g×&7Ñ&7¸Ô=àˆØ�Q‘˜‘ˆˆA‰Ø×Ñœ*¤g×&7Ñ&7¸Õ=r9   c                 óÂ   — t        | j                  | j                  d   d«      d   «      x}}|dxx   dz  cc<   | j                  t        t
        j                  |«       y )Nr   r<   r;   rT   rV   rZ   s      r7   Útest_bad_key4zElGamalTest.test_bad_key4’   sN   € Ü˜$Ÿ/™/¨$¯(©(°1©+°qÓ9¸%Ñ@ÓAÐAˆˆdØˆA‹�!‰‹Ø×Ñœ*¤g×&7Ñ&7¸Õ=r9   c                 óÒ   — d}i }|j                  «       D ]/  }t        ||   «      ||<   |s	||v s|dv sŒt        ||   «      ||<   Œ1 g |d<   |D ]  }|dxx   ||   gz  cc<   ||= Œ |S )zfConvert a test vector from textual form (hexadecimal ascii
        to either integers or byte strings.)r   r   r   r   )r*   r+   r;   )Úkeysr   r   )r6   rB   Úas_longsÚ	key_compsÚtv2Úcs         r7   r>   zElGamalTest.convert_tv—   s’   € ð $ˆ	ØˆØ—‘“ò 	/ˆAÜ˜R ™U“^ˆC�‰FÙ˜1 	™>¨Q°/Ò-AÜ& s¨1¡vÓ.��A’ð	/ð ˆˆE‰
Øò 	ˆAØ�‹J˜3˜q™6˜(Ñ"‹JØ�A‘ð	ð ˆ
r9   c                 ó  — t        j                  |t        j                  «       j                  «      }| j                  |«       | j                  |«       |j                  «       }| j                  |«       | j                  |«       y ©N)
r   Úgenerater   ÚnewÚreadÚ_check_private_keyÚ_exercise_primitiveÚ	publickeyÚ_check_public_keyÚ_exercise_public_primitive)r6   ÚbitsÚelgObjÚpubs       r7   r5   zElGamalTest._test_random_key¦   sf   € Ü×!Ñ! $¬¯
©
«×(9Ñ(9Ó:ˆØ×Ñ Ô'Ø× Ñ  Ô(Ø×ÑÓ ˆØ×Ñ˜sÔ#Ø×'Ñ'¨Õ/r9   c                 ó   — | j                  |j                  «       «       | j                  d|j                  cxk  xr |j                  dz
  k  nc «       | j	                  t        |j                  |j                  dz
  |j                  «      d«       | j                  d|j                  cxk  xr |j                  dz
  k  nc «       | j	                  t        |j                  |j                  |j                  «      |j                  «       y ©Nr<   )rO   Úhas_privater   r   rA   Úpowr   r   ©r6   rq   s     r7   rk   zElGamalTest._check_private_key®   s±   € ð 	�‰˜×*Ñ*Ó,Ô-ð 	�‰˜˜&Ÿ(™(Ö/ F§H¡H¨Q¡JÔ/Ô0Ø×Ñœ˜VŸX™X v§x¡x°¡z°6·8±8Ó<¸aÔ@Ø�‰˜˜&Ÿ(™(Ö/ F§H¡H¨Q¡JÔ/Ô0Ø×Ñœ˜VŸX™X v§x¡x°·±Ó:¸F¿H¹HÕEr9   c                 ó*  — | j                  |j                  «       «       | j                  d|j                  cxk  xr |j                  dz
  k  nc «       | j                  t        |j                  |j                  dz
  |j                  «      d«       y rt   )rP   ru   rO   r   r   rA   rv   rw   s     r7   rn   zElGamalTest._check_public_key¹   sh   € ð 	×Ñ˜×+Ñ+Ó-Ô.ð 	�‰˜˜&Ÿ(™(Ö/ F§H¡H¨Q¡JÔ/Ô0Ø×Ñœ˜VŸX™X v§x¡x°¡z°6·8±8Ó<¸aÕ@r9   c                 óº   — d}|j                  |d«      }|j                  |«      }| j                  ||«       |j                  |d«      }|j	                  ||«       y )Niòð éÍ[i±hÞ:)r@   rG   rA   rK   rN   )r6   rq   Ú	plaintextÚ
ciphertextÚ
plaintextPÚ	signatures         r7   rl   zElGamalTest._exercise_primitiveÂ   sU   € àˆ	Ø—_‘_ Y°	Ó:ˆ
Ø—_‘_ ZÓ0ˆ
Ø×Ñ˜ JÔ/ð —L‘L ¨IÓ6ˆ	Ø�‰�y )Õ,r9   c                 ó,   — d}|j                  |d«      }y )NiŒßŠrz   )r@   )r6   rq   r{   r|   s       r7   ro   z&ElGamalTest._exercise_public_primitiveÍ   s   € Øˆ	Ø—_‘_ Y°	Ó:‰
r9   N)r   )Ú__name__Ú
__module__Ú__qualname__r=   rJ   r8   rE   rH   rL   rR   r]   r_   r>   r5   rk   rn   rl   ro   © r9   r7   r   r   "   sè   „ ð QØØPØ>Ø>Ø&ØPØPñ
	
ð QØð QØ>Ø>Ø&ð Qð Qñ
	
ð	€Cð< QØØPØ>ØPØ&ØQØQñ
	
ð QØð QØ>ð QØ&ð Rð Rñ
	
ð	€Cò2#ò.ò*ò.ò	"ò>ò>ó
ò0ò	FòAò	-ó;r9   r   c                 ó.   — g }|t        t        «      z  }|S rg   )r   r   )ÚconfigÚtestss     r7   Ú	get_testsr‡   Ñ   s   € Ø€EØ	Œ_œ[Ó)Ñ)€EØ€Lr9   Ú__main__c                  ó<   — t        j                  t        «       «      S rg   )ÚunittestÚ	TestSuiter‡   rƒ   r9   r7   ú<lambda>rŒ   ×   s   € ”H×&Ñ&¤y£{Ó3€ r9   Úsuite)ÚdefaultTest)Ú__doc__Ú__revision__rŠ   ÚCrypto.SelfTest.st_commonr   r   r   ÚCryptor   ÚCrypto.PublicKeyr   ÚCrypto.Util.numberr   ÚCrypto.Util.py3compatÚTestCaser   r‡   r€   r�   Úmainrƒ   r9   r7   ú<module>r˜      se   ðñ. 3à€ã ß GÑ GÝ Ý $Ý ,Ü #ôm;�(×#Ñ#ô m;ð^ ó ð
 ˆzÒÙ3€EØ€H‡M�M˜gÖ&ð r9   