ó
j4Vdc           @   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 Td d l Td e j f d	 „  ƒ  YZ i  d
 „ Z e d k rµ d „  Z e j d d ƒ n  d S(   s,   Self-test suite for Crypto.PublicKey.ElGamals   $Id$iÿÿÿÿN(   t   list_test_casest   a2b_hext   b2a_hex(   t   Random(   t   ElGamal(   t   *t   ElGamalTestc           B   so  e  Z i d  d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6i d d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6g Z i d d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6i d  d 6d! d 6d" d 6d# d 6d$ d	 6d
 d 6d% d 6d& d 6g Z d' „  Z d( „  Z d) „  Z d* „  Z d+ „  Z d, „  Z	 d- d. „ Z
 d/ „  Z d0 „  Z d1 „  Z d2 „  Z d3 „  Z RS(4   t@   BA4CAEAAED8CBE952AFD2126C63EB3B345D65C2A0A73D2A3AD4138B6D09BD933t   pt   05t   gt@   60D063600ECED7C7C55146020E7A31C4476E9793BEAED420FEC9E77604CAE4EFt   yt.   1D391BA2EE3C37FE1BA175A69B2C73A11238AD77675932t   xt.   F5893C5BAB4131264066F57AB3D8AD89E391A0B68A68A1t   kt   48656C6C6F207468657265t   ptt@   32BFD5F487966CEA9E9356715788C491EC515E4ED48B58F0F00971E93AAA5EC7t   ct1t@   7BE8FBFF317C93E82FCEF9BD515284BA506603FEA25D01C0CB874A31F315EE68t   ct2t€   F1B18AE9F7B4E08FDA9A04832F4E919D89462FD31BF12F92791A93519F75076D6CE3942689CDFF2F344CAFF0F82D01864F69F3AECF566C774CBACF728B81A227t   07t€   688628C676E4F05D630E1BE39D0066178CA7AA83836B645DE5ADD359B4825A12B02EF4252E4E6FA9BEC1DB0BE90F6D7C8629CABB6E531F472B2664868156E20Ct.   14E60B1BDFD33436C0DA8A22FDC14A2CCDBBED0627CE68t.   38DBF14E1F319BDA9BAB33EEEADCAF6B2EA5250577ACE7t€   290F8530C2CC312EC46178724F196F308AD4C523CEABB001FACB0506BFED676083FE0F27AC688B5C749AB3CB8A80CD6F7094DBA421FB19442F5A413E06A9772Bt€   1D69AAAD1DC50493FB1B8E8721D621D683F3BF1321BE21BC4A43E11B40C9D4D9C80DE3AAC2AB60D31782B16B61112E68220889D53C4C3136EE6F6CE61F8A23A0t@   D2F3C41EA66530838A704A48FFAC9334F4701ECE3A97CEE4C69DD01AE7129DD7t@   C3F9417DC0DAFEA6A05C1D2333B7A95E63B3F4F28CC962254B3256984D1012E7t.   165E4A39BE44D5A2D8B1332D416BC559616F536BC735BBt@   C7F0C794A7EAD726E25A47FF8928013680E73C51DD3D7D99BFDA8F492585928Ft   ht@   35CA98133779E2073EF31165AFCDEB764DD54E96ADE851715495F9C635E1E7C2t   sig1t@   0135B88B1151279FE5D8078D4FC685EE81177EE9802AB123A73925FC1CB059A7t   sig2t€   E24CF3A4B8A6AF749DCA6D714282FE4AABEEE44A53BB6ED15FBE32B5D3C3EF9CC4124A2ECA331F3C1C1B667ACA3766825217E7B5F9856648D95F05330C6A19CFt   0Bt€   2AD3A1049CA5D4ED207B2431C79A8719BB4073D4A94E450EA6CEE8A760EB07ADB67C0D52C275EE85D7B52789061EE45F2F37D9B2AE522A51C28329766BFE68ACt.   16CBB4F46D9ECCF24FF9F7E63CAA3BD8936341555062ABt€   8A3D89A4E429FD2476D7D717251FB79BF900FFE77444E6BB8299DC3F84D0DD57ABAB50732AE158EA52F5B9E7D8813E81FD9F79470AE22F8F1CF9AEC820A78C69t€   BE001AABAFFF976EC9016198FBFEA14CBEF96B000CCC0063D3324016F9E91FE80D8F9325812ED24DDB2B4D4CF4430B169880B3CE88313B53255BD4EC0378586Ft€   5E266F3F837BA204E3BBB6DBECC0611429D96F8C7CE8F4EFDF9D4CB681C2A954468A357BF4242CEC7418B51DFC081BCD21299EF5B5A0DDEF3A139A1817503DDEc         C   s   |  j  d ƒ d  S(   Ni€   (   t   _test_random_key(   t   self(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_generate_128`   s    c         C   s   |  j  d ƒ d  S(   Ni   (   R.   (   R/   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_generate_512c   s    c         C   s˜   x‘ |  j  D]† } x} d D]u } |  j | | ƒ } t j | d ƒ } | j | d | d ƒ } |  j | d | d ƒ |  j | d | d ƒ q Wq
 Wd  S(	   Ni    i   t   keyR   R   R   R   (   i    i   (   t   tvet
   convert_tvR   t	   constructt   encryptt   assertEquals(   R/   t   tvt   as_longst   dR2   t   ct(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_encryptionf   s    c         C   s   xx |  j  D]m } xd d D]\ } |  j | | ƒ } t j | d ƒ } | j | d | d f ƒ } |  j | | d ƒ q Wq
 Wd  S(   Ni    i   R2   R   R   R   (   i    i   (   R3   R4   R   R5   t   decryptR7   (   R/   R8   R9   R:   R2   R   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_decryptiono   s    c         C   s–   x |  j  D]„ } x{ d D]s } |  j | | ƒ } t j | d ƒ } | j | d | d ƒ \ } } |  j | | d ƒ |  j | | d ƒ q Wq
 Wd  S(	   Ni    i   R2   R"   R   R$   R&   (   i    i   (   t   tvsR4   R   R5   t   signR7   (   R/   R8   R9   R:   R2   R$   R&   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_signingw   s     c         C   s´   x­ |  j  D]¢ } x™ d D]‘ } |  j | | ƒ } t j | d ƒ } | j | d | d | d f ƒ } |  j | ƒ | j | d | d d | d f ƒ } |  j | ƒ q Wq
 Wd  S(   Ni    i   R2   R"   R$   R&   (   i    i   (   R?   R4   R   R5   t   verifyt
   failUnlesst   failIf(   R/   R8   R9   R:   R2   t   res(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   test_verification€   s    $(i    c         C   s©   d } i  } x] | j  ƒ  D]O } t | | ƒ | | <| sQ | | k sQ | d	 k r t | | ƒ | | <q q Wg  | d <x, | D]$ } | d c | | g 7<| | =q} W| S(
   sf   Convert a test vector from textual form (hexadecimal ascii
        to either integers or byte strings.R   R
   R   R   R$   R&   R2   (   R   R
   R   R   (   R$   R&   (   t   keysR   t   bytes_to_long(   R/   R8   R9   t	   key_compst   tv2t   c(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyR4   Œ   s    
c         C   s_   t  j | t j ƒ  j ƒ } |  j | ƒ |  j | ƒ | j ƒ  } |  j | ƒ |  j	 | ƒ d  S(   N(
   R   t   generateR   t   newt   readt   _check_private_keyt   _exercise_primitivet	   publickeyt   _check_public_keyt   _exercise_public_primitive(   R/   t   bitst   elgObjt   pub(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyR.   ›   s    c         C   sè   |  j  | j ƒ  ƒ |  j  | j ƒ  ƒ |  j  | j ƒ  ƒ |  j  d | j k  o` | j d k  n ƒ |  j t | j | j d | j ƒ d ƒ |  j  d | j k  o¶ | j d k  n ƒ |  j t | j | j | j ƒ | j	 ƒ d  S(   Ni   (
   RC   t   has_privatet   can_signt   can_encryptR
   R   R7   t   powR   R   (   R/   RU   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyRO   £   s    -)-c         C   s“   |  j  | j ƒ  ƒ |  j | j ƒ  ƒ |  j | j ƒ  ƒ |  j d | j k  o` | j d k  n ƒ |  j t | j | j d | j ƒ d ƒ d  S(   Ni   (	   RD   RW   RC   RX   RY   R
   R   R7   RZ   (   R/   RU   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyRR   °   s
    -c         C   sc   t  d ƒ } | j | d ƒ } | j | ƒ } |  j | | ƒ | j | d ƒ } | j | | ƒ d  S(   Nt   Testl   M·l   ±h¼u(   t   bR6   R=   R7   R@   RB   (   R/   RU   t	   plaintextt
   ciphertextt
   plaintextPt	   signature(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyRP   »   s    c         C   s"   t  d ƒ } | j | d ƒ } d  S(   NR[   l   M·(   R\   R6   (   R/   RU   R]   R^   (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyRS   Æ   s    (   t   __name__t
   __module__R3   R?   R0   R1   R<   R>   RA   RF   R4   R.   RO   RR   RP   RS   (    (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyR   "   s`   												c         C   s   g  } | t  t ƒ 7} | S(   N(   R    R   (   t   configt   tests(    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt	   get_testsÊ   s    t   __main__c           C   s   t  j t ƒ  ƒ S(   N(   t   unittestt	   TestSuiteRe   (    (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   <lambda>Ð   t    t   defaultTestt   suite(   t   __doc__t   __revision__Rg   t   Crypto.SelfTest.st_commonR    R   R   t   CryptoR   t   Crypto.PublicKeyR   t   Crypto.Util.numbert   Crypto.Util.py3compatt   TestCaseR   Re   Ra   Rl   t   main(    (    (    st   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/PublicKey/test_ElGamal.pyt   <module>   s   

¨	