ó
BwLc           @   sœ   d  Z  d Z d g Z d d l Td d l m Z m Z d e f d „  ƒ  YZ d e	 f d	 „  ƒ  YZ
 d d d d d
 „ Z d e	 f d „  ƒ  YZ d d „ Z d S(   sU   Pure Python implementation of the RSA-related portions of Crypto.PublicKey._fastmath.s   $Id$t   rsa_constructiÿÿÿÿ(   t   *(   t   sizet   inverset   errorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   #   s   t   _RSAKeyc           B   sP   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   c         C   s   | t  | |  j |  j ƒ S(   N(   t   powt   et   n(   t   selft   mt   r(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _blind'   s    c         C   s   t  | |  j ƒ | |  j S(   N(   R   R
   (   R   R   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _unblind+   s    c         C   s1   |  j  ƒ  s t d ƒ ‚ n  t | |  j |  j ƒ S(   Ns   No private key(   t   has_privatet	   TypeErrorR   t   dR
   (   R   t   c(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _decrypt/   s    c         C   s   t  | |  j |  j ƒ S(   N(   R   R	   R
   (   R   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _encrypt5   s    c         C   s(   |  j  ƒ  s t d ƒ ‚ n  |  j | ƒ S(   Ns   No private key(   R   R   R   (   R   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _sign9   s    c         C   s   |  j  | ƒ | k S(   N(   R   (   R   R   t   sig(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   _verify>   s    c         C   s   t  |  d ƒ S(   NR   (   t   hasattr(   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   A   s    c         C   s   t  |  j ƒ d S(   s7   Return the maximum number of bits that can be encryptedi   (   R   R
   (   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   D   s    (
   R   R   R   R   R   R   R   R   R   R   (    (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   &   s   							c         C   sZ  t  |  t ƒ s t ‚ t  | t ƒ s* t ‚ t  | t t d ƒ f ƒ sK t ‚ t  | t t d ƒ f ƒ sl t ‚ t  | t t d ƒ f ƒ s t ‚ t  | t t d ƒ f ƒ s® t ‚ t ƒ  } |  | _ | | _ | d k	 rá | | _ n  | d k	 rù | | _	 n  | d k	 r| | _
 n  | d k	 r)| | _ n- | d k	 rV| d k	 rVt | | ƒ | _ n  | S(   s   Construct an RSAKey objectN(   t
   isinstancet   longt   AssertionErrort   typet   NoneR   R
   R	   R   t   pt   qt   uR   (   R
   R	   R   R   R    R!   t   obj(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR    H   s(    !!!!			   t   _DSAKeyc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   t  |  j ƒ d S(   s7   Return the maximum number of bits that can be encryptedi   (   R   R   (   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   ]   s    c         C   s   t  |  d ƒ S(   Nt   x(   R   (   R   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   a   s    c         C   s    |  j  ƒ  s t d ƒ ‚ n  d | k  o5 |  j k  n sI t d ƒ ‚ n  t | |  j ƒ } t |  j | |  j ƒ |  j } | | |  j | |  j } | | f S(   Ns   No private keyl    s   k is not between 2 and q-1(	   R   R   R    t
   ValueErrorR   R   t   gR   R$   (   R   R   t   kt   inv_kR   t   s(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   d   s    c         C   s¾   d | k  o |  j  k  n s@ d | k  o: |  j  k  n rD t St | |  j  ƒ } | | |  j  } | | |  j  } t |  j | |  j ƒ t |  j | |  j ƒ |  j |  j  } | | k S(   Ni    (   R    t   FalseR   R   R&   R   t   y(   R   R   R   R)   t   wt   u1t   u2t   v(    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR   o   s    @<(   R   R   R   R   R   R   (    (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyR#   \   s   			c         C   s¾   t  |  t ƒ s t ‚ t  | t ƒ s* t ‚ t  | t ƒ s? t ‚ t  | t ƒ sT t ‚ t  | t t d  ƒ f ƒ su t ‚ t ƒ  } |  | _ | | _ | | _ | | _	 | d  k	 rº | | _
 n  | S(   N(   R   R   R   R   R   R#   R+   R&   R   R    R$   (   R+   R&   R   R    R$   R"   (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   dsa_constructy   s    !					 N(   t   __doc__t   __revision__t   __all__t   Crypto.Util.python_compatt   Crypto.Util.numberR   R   t	   ExceptionR   t   objectR   R   R    R#   R0   (    (    (    s>   /usr/lib/python2.7/dist-packages/Crypto/PublicKey/_slowmath.pyt   <module>   s   	
"