ó
j4Vdc           @   s_  d  Z  d Z d d l Z d d l Z d d l m Z m Z d d l Te j d k  r_ d „  Z	 n e	 Z	 d d d	 „  ƒ  YZ
 e
 d
 „ Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d „  Z d „  Z d S(   s&   Self-testing for PyCrypto hash moduless   $Id$iÿÿÿÿN(   t   a2b_hext   b2a_hex(   t   *i  c          K   s
   |  j  ƒ  S(   N(   t   copy(   t   kwargs(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   dict&   s    t
   _NoDefaultc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   +   s    c         C   s@   y |  | } Wn$ t  k
 r4 | t k r0 ‚  n  | SX|  | =| S(   sA   Get an item from a dictionary, and remove it from the dictionary.(   t   KeyErrorR   (   t   dt   kt   defaultt   retval(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   _extract,   s    t   CipherSelfTestc           B   s/   e  Z d  „  Z d „  Z d d „ Z d „  Z RS(   c         C   sn  t  j j |  ƒ | |  _ | j ƒ  } t | d ƒ |  _ t t | d ƒ ƒ |  _ t t | d ƒ ƒ |  _	 t t | d ƒ ƒ |  _
 t | d d  ƒ |  _ t | d d  ƒ } t | ƒ |  _ | d  k	 rOt |  j d | ƒ |  _ t | d d  ƒ |  _ |  j d  k	 rt |  j ƒ |  _ n  t | d	 d  ƒ |  _ |  j d  k	 rat |  j ƒ |  _ qan d  |  _ d  |  _ | |  _ d  S(
   Nt   descriptiont   keyt	   plaintextt
   ciphertextt   module_namet   modet   MODE_t   ivt   encrypted_iv(   t   unittestt   TestCaset   __init__t   moduleR   R   R   t   bR   R   R   t   NoneR   t   strt	   mode_namet   getattrR   R   R   t   extra_params(   t   selfR   t   paramsR   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   :   s*    	 		c         C   s   |  j  S(   N(   R   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   shortDescriptionY   s    i    c         C   s  |  j  j ƒ  } t |  j d ƒ r0|  j |  j j k r0d d l m } t | d | j	 ƒ } t | d i  ƒ j ƒ  } | j
 d ƒ rŸ t t | d ƒ ƒ | d <n  | j
 d ƒ rË t t | d ƒ ƒ | d <n  | j
 d ƒ sd	 |  j j t | j d d
 ƒ ƒ t | j d d
 ƒ ƒ | d <n  | |   | d <n  |  j d  k r[|  j j	 t |  j ƒ |  S|  j d  k rŒ|  j j	 t |  j ƒ |  j |  S| rÕ|  j |  j j k rÕ|  j j	 t |  j ƒ |  j t |  j ƒ |  S|  j j	 t |  j ƒ |  j t |  j ƒ |  Sd  S(   Nt   MODE_CTRiÿÿÿÿ(   t   Countert	   ctr_classt
   ctr_paramst   prefixt   suffixt   nbitsi   t    t   counter(   R"   R   t   hasattrR   R   R&   t   Crypto.UtilR'   R   t   newt   has_keyR    R   t
   block_sizet   lent   getR   R   R   t   MODE_OPENPGPR   (   R#   t   do_decryptionR$   R'   R(   R)   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   _new\   s&    '  C".c         C   s[  t  |  j ƒ } t  |  j ƒ } t |  j ƒ  j | ƒ ƒ } t |  j d ƒ j | ƒ ƒ } t |  j ƒ  j | ƒ ƒ } t |  j d ƒ j | ƒ ƒ } t |  j d ƒ r|  j	 |  j j
 k rt |  j ƒ } |  j |  j | |  ƒ |  j |  j | |  ƒ | | } | | } n  |  j |  j | ƒ |  j |  j | ƒ |  j |  j | ƒ |  j |  j | ƒ d  S(   Ni   R6   (   R    R   R   R   R8   t   encryptt   decryptR/   R   R   R6   R4   R   t   assertEqual(   R#   R   R   t   ct1t   pt1t   ct2t   pt2t   eilen(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   runTestx   s     '
(   R   R   R   R%   R8   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   8   s   		t   CipherStreamingSelfTestc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s:   |  j  } |  j d  k	 r/ | d |  j f 7} n  d | f S(   Ns    in %s modes%   %s should behave like a stream cipher(   R   R   R   R    (   R#   t   desc(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%   ’   s    	c         C   s*  t  |  j ƒ } t  |  j ƒ } g  } |  j ƒ  } xA t d t | ƒ d ƒ D]' } | j | j | | | d !ƒ ƒ qI Wt t	 d ƒ j
 | ƒ ƒ } |  j |  j | ƒ g  } |  j ƒ  } xA t d t | ƒ d ƒ D]' } | j | j | | | d !ƒ ƒ qÍ Wt t	 d ƒ j
 | ƒ ƒ } |  j |  j | ƒ d  S(   Ni    i   R-   (   R    R   R   R8   t   rangeR4   t   appendR9   R   R   t   joinR;   (   R#   R   R   t   ct3t   ciphert   it   pt3(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA   ˜   s    %%(   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRB      s   	t   CTRSegfaultTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sE   t  j j |  ƒ | |  _ t | d ƒ |  _ | j d d  ƒ |  _ d  S(   NR   R   (	   R   R   R   R   R   R   R5   R   R   (   R#   R   R$   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   ±   s    	c         C   s   d |  j  |  j  f S(   NsN   Regression test: %s.new(key, %s.MODE_CTR) should raise TypeError, not segfault(   R   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%   ·   s    c         C   s/   |  j  t |  j j t |  j ƒ |  j j ƒ d  S(   N(   t   assertRaisest	   TypeErrorR   R1   R    R   R&   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA   º   s    (   R   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRK   ¯   s   		t   CTRWraparoundTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   sE   t  j j |  ƒ | |  _ t | d ƒ |  _ | j d d  ƒ |  _ d  S(   NR   R   (	   R   R   R   R   R   R   R5   R   R   (   R#   R   R$   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   ¿   s    	c         C   s   d |  j  f S(   Ns]   Regression test: %s with MODE_CTR should raise OverflowError on wraparound when shortcut used(   R   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%   Å   s    c      
   C   sÖ   d d l  m } x¿ d D]· } x® d D]¦ } | j d |  j j d d d |  j j d d | d	 | ƒ} |  j j t |  j ƒ |  j j d
 | ƒ} t d ƒ |  j j } | j	 | ƒ |  j
 t | j	 | ƒ q$ Wq Wd  S(   Niÿÿÿÿ(   R'   i    i   i   t   initial_valuel    t   little_endiant   disable_shortcutR.   s    (   i    i   (   i    i   (   R0   R'   R1   R   R3   R    R   R&   R   R9   RL   t   OverflowError(   R#   R'   RQ   RP   t   ctrRH   t   block(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA   È   s    =*(   R   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRN   ½   s   		t   CFBSegmentSizeTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s=   t  j j |  ƒ | |  _ t | d ƒ |  _ | d |  _ d  S(   NR   R   (   R   R   R   R   R   R   R   (   R#   R   R$   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   Õ   s    	c         C   s   |  j  S(   N(   R   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%   Û   s    c         C   s„   xH t  d d ƒ D]7 } |  j t |  j j t |  j ƒ |  j j d | ƒq W|  j j t |  j ƒ |  j j d |  j j d d ƒd S(   sn   Regression test: m.new(key, m.MODE_CFB, segment_size=N) should require segment_size to be a multiple of 8 bitsi   i   t   segment_sizes    N(	   RD   RL   t
   ValueErrorR   R1   R    R   t   MODE_CFBR3   (   R#   RI   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA   Þ   s    5(   R   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRU   Ó   s   		t   RoundtripTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   d d l  m } t j j |  ƒ | |  _ | j | j ƒ |  _ t	 | d ƒ |  _
 d t	 | d ƒ |  _ | j d d  ƒ |  _ d  S(   Niÿÿÿÿ(   t   RandomR   id   R   R   (   t   CryptoRZ   R   R   R   R   t   get_random_bytesR3   R   R   R   R   R5   R   R   (   R#   R   R$   RZ   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR   å   s    	c         C   s   d |  j  f S(   Ns8   %s .decrypt() output of .encrypt() should not be garbled(   R   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%   î   s    c         C   s  x|  j  j |  j  j |  j  j |  j  j |  j  j f D]à } |  j  j t |  j ƒ | |  j	 ƒ } | j
 |  j ƒ } | |  j  j k r© |  j  j t |  j ƒ | |  j	 ƒ } nI | |  j  j d  } | |  j  j d } |  j  j t |  j ƒ | | ƒ } | j | ƒ } |  j |  j | ƒ q4 Wd  S(   Ni   (   R   t   MODE_ECBt   MODE_CBCRX   t   MODE_OFBR6   R1   R    R   R   R9   R   R3   R:   R;   (   R#   R   t   encryption_cipherR   t   decryption_ciphert   eivt   decrypted_plaintext(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA   ñ   s    :$'!(   R   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRY   ä   s   			t   PGPTestc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s0   t  j j |  ƒ | |  _ t | d ƒ |  _ d  S(   NR   (   R   R   R   R   R   R   (   R#   R   R$   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR      s    	c         C   s   d S(   NsR   MODE_PGP was implemented incorrectly and insecurely. It's completely banished now.(    (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%     s    c         C   s/   |  j  t |  j j t |  j ƒ |  j j ƒ d  S(   N(   RL   RW   R   R1   R    R   t   MODE_PGP(   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA     s    (   R   R   R   R%   RA   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRd   ÿ   s   		t   IVLengthTestc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s0   t  j j |  ƒ | |  _ t | d ƒ |  _ d  S(   NR   (   R   R   R   R   R   R   (   R#   R   R$   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR     s    	c         C   s   d S(   NsT   Check that all modes except MODE_ECB and MODE_CTR require an IV of the proper length(    (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyR%     s    c         C   s  |  j  t |  j j t |  j ƒ |  j j d ƒ |  j  t |  j j t |  j ƒ |  j j d ƒ |  j  t |  j j t |  j ƒ |  j j d ƒ |  j  t |  j j t |  j ƒ |  j j	 d ƒ |  j j t |  j ƒ |  j j
 d ƒ |  j j t |  j ƒ |  j j d d |  j ƒd  S(   NR-   R.   (   RL   RW   R   R1   R    R   R^   RX   R_   R6   R]   R&   t   _dummy_counter(   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRA     s    %c         C   s   d |  j  j S(   Ns    (   R   R3   (   R#   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRg   !  s    (   R   R   R   R%   RA   Rg   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyRf     s   			c      
   C   s3  g  } d } x t  t | ƒ ƒ D]} | | } i d d 6} t | ƒ d k rl | \ | d <| d <| d <n— t | ƒ d k r£ | \ | d <| d <| d <| d	 <n` t | ƒ d
 k rê | \ | d <| d <| d <| d	 <} | j | ƒ n t d t | ƒ f ƒ ‚ | j ƒ  }	 t |	 d ƒ }
 t |	 d ƒ } t |	 d ƒ } t |	 d	 d  ƒ } |	 j d d ƒ } | d k rt |	 d d ƒ n  | d  k	 r”| } n9 | d k rº|	 rºd | |
 f } n d | |
 |	 f } d | | d | f } | | d	 <| | d <| sY| t |  | ƒ t	 |  | ƒ t
 |  | ƒ t |  | ƒ t |  | ƒ t |  | ƒ g 7} d } n  | j t |  | ƒ ƒ | d k r”| j t |  | ƒ ƒ n  | d k r | j d ƒ r | j ƒ  } | d	 c d 7<| j d i  ƒ j ƒ  } | | d <| d j d ƒ sd | d d <n  | j t |  | ƒ ƒ q q W| S(   Ni    t   ECBR   i   R   R   R   i   R   i   s   Unsupported tuple size %ds
   p=%s, k=%ss   p=%s, k=%s, %rs
   %s #%d: %si   R   t   CTRR(   s    (shortcut disabled)R)   RQ   (   RD   R4   t   updatet   AssertionErrorR   R   R   R5   RK   RN   RU   RY   Rd   Rf   RE   R   RB   R2   (   R   R   t	   test_datat   testst   extra_tests_addedRI   t   rowR$   R"   t   p2t   p_keyt   p_plaintextt   p_ciphertextt   p_descriptiont   p_modeR   t   namet   params2t   ctr_params2(    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   make_block_tests$  sd    
%%	

	
c         C   sá  g  } xÔt  t | ƒ ƒ D]À} | | } i  } t | ƒ d k r_ | \ | d <| d <| d <n— t | ƒ d k r– | \ | d <| d <| d <| d <n` t | ƒ d k rÝ | \ | d <| d <| d <| d <} | j | ƒ n t d t | ƒ f ƒ ‚ | j ƒ  } t | d ƒ }	 t | d ƒ }
 t | d ƒ } t | d d  ƒ } | d  k	 rV| } n, | sod	 |
 |	 f } n d
 |
 |	 | f } d | | d | f } | | d <| | d <| j t |  | ƒ ƒ | j t	 |  | ƒ ƒ q W| S(   Ni   R   R   R   i   R   i   s   Unsupported tuple size %ds
   p=%s, k=%ss   p=%s, k=%s, %rs
   %s #%d: %si   R   (
   RD   R4   Rj   Rk   R   R   R   RE   R   RB   (   R   R   Rl   Rm   RI   Ro   R$   R"   Rp   Rq   Rr   Rs   Rt   R   Rv   (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   make_stream_testsh  s8    
%%	

(    (   t   __doc__t   __revision__t   sysR   t   binasciiR    R   t   Crypto.Util.py3compatt
   hexversionR   R   R   R   R   RB   RK   RN   RU   RY   Rd   Rf   Ry   Rz   (    (    (    sk   /var/www/html/phendo-backend/phendo_python/env/lib/python2.7/site-packages/Crypto/SelfTest/Cipher/common.pyt   <module>   s(   
X	D