Ñò
ðgcJc           @   s˜   d  Z  d d k l Z d d k l Z d d k Td d k l Z d d k l	 Z	 d d k
 l Z e d d	 ƒ \ Z Z Z Z Z d
 e f d „  ƒ  YZ d S(   sÒ   
Variant on L{KexGroup1 <paramiko.kex_group1.KexGroup1>} where the prime "p" and
generator "g" are provided by the server.  A bit more work is required on the
client side, and a B{lot} more on the server side.
iÿÿÿÿ(   t   SHA(   t   number(   t   *(   t   util(   t   Message(   t   SSHExceptioni   i#   t   KexGexc           B   st   e  Z d  Z d Z d Z d Z d „  Z e d „ Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z RS(   s"   diffie-hellman-group-exchange-sha1i   i    i   c         C   sL   | |  _  d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ t |  _	 d  S(   N(
   t	   transportt   Nonet   pt   qt   gt   xt   et   ft   Falset	   old_style(   t   selfR   (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyt   __init__-   s    							c         C   sÌ   |  i  i o |  i  i t t ƒ d  St ƒ  } | o0 | i t t ƒ ƒ | i |  i	 ƒ t
 |  _ nD | i t t ƒ ƒ | i |  i ƒ | i |  i	 ƒ | i |  i ƒ |  i  i | ƒ |  i  i t ƒ d  S(   N(   R   t   server_modet   _expect_packett   _MSG_KEXDH_GEX_REQUESTt   _MSG_KEXDH_GEX_REQUEST_OLDR   t   add_bytet   chrt   add_intt   preferred_bitst   TrueR   t   min_bitst   max_bitst   _send_messaget   _MSG_KEXDH_GEX_GROUP(   R   t   _test_old_stylet   m(    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyt	   start_kex7   s    	c         C   s›   | t  j o |  i | ƒ S| t j o |  i | ƒ S| t j o |  i | ƒ S| t j o |  i | ƒ S| t j o |  i	 | ƒ St
 d | ƒ ‚ d  S(   Ns%   KexGex asked to handle packet type %d(   R   t   _parse_kexdh_gex_requestR   t   _parse_kexdh_gex_groupt   _MSG_KEXDH_GEX_INITt   _parse_kexdh_gex_initt   _MSG_KEXDH_GEX_REPLYt   _parse_kexdh_gex_replyR   t   _parse_kexdh_gex_request_oldR   (   R   t   ptypeR!   (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyt
   parse_nextL   s    c         C   s   |  i  d d } t i | d ƒ } t | d ƒ } t | ƒ } d } x$ | d @p | d K} | d L} qH Wx„ t o| |  i i i ƒ  |  i i i	 | ƒ } t
 t | d ƒ | @ƒ | d } t i | d ƒ } | d j o | | j  o Pqo qo W| |  _ d  S(   Ni   i   i    iÿ   i€   (   R	   R   t   deflate_longt   ordt   lenR   R   t   randpoolt   stirt	   get_bytesR   t   inflate_longR   (   R   R
   t   qnormt   qhbytet   bytest   qmaskt   x_bytesR   (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyt   _generate_x]   s$     
 "
c         C   st  | i  ƒ  } | i  ƒ  } | i  ƒ  } | |  i j o |  i } n | |  i j  o |  i } n | | j o
 | } n | | j  o
 | } n | |  _ | |  _ | |  _ |  i i ƒ  } | d  j o t d ƒ ‚ n |  i i t	 d | | | f ƒ | i
 | | | ƒ \ |  _ |  _ t ƒ  } | i t t ƒ ƒ | i |  i ƒ | i |  i ƒ |  i i | ƒ |  i i t ƒ d  S(   Ns-   Can't do server-side gex with no modulus packs   Picking p (%d <= %d <= %d bits)(   t   get_intR   R   R   R   t   _get_modulus_packR   R   t   _logt   DEBUGt   get_modulusR   R	   R   R   R   R   t	   add_mpintR   R   R%   (   R   R!   t   minbitst   preferredbitst   maxbitst   pack(    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR#   p   s2    

			 !	c         C   s1  | i  ƒ  |  _ |  i |  i j o |  i |  _ n |  i |  i j  o |  i |  _ n |  i i ƒ  } | d  j o t d ƒ ‚ n |  i i t	 d |  i f ƒ | i
 |  i |  i |  i ƒ \ |  _ |  _ t ƒ  } | i t t ƒ ƒ | i |  i ƒ | i |  i ƒ |  i i | ƒ |  i i t ƒ t |  _ d  S(   Ns-   Can't do server-side gex with no modulus packs   Picking p (~ %d bits)(   R9   R   R   R   R   R:   R   R   R;   R<   R=   R   R	   R   R   R   R   R>   R   R   R%   R   R   (   R   R!   RB   (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR)   ‘   s"    *	c         C   sí   | i  ƒ  |  _ | i  ƒ  |  _ t i |  i ƒ } | d j  p | d j o t d | ƒ ‚ n |  i i t d | ƒ |  i	 ƒ  t
 |  i |  i |  i ƒ |  _ t ƒ  } | i t t ƒ ƒ | i |  i ƒ |  i i | ƒ |  i i t ƒ d  S(   Ni   i    s<   Server-generated gex p (don't ask) is out of range (%d bits)s   Got server p (%d bits)(   t	   get_mpintR	   R   R   t
   bit_lengthR   R   R;   R<   R8   t   powR   R   R   R   R   R%   R>   R   R   R'   (   R   R!   t   bitlen(    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR$   §   s    
	c         C   s-  | i  ƒ  |  _ |  i d j  p |  i |  i d j o t d ƒ ‚ n |  i ƒ  t |  i |  i |  i ƒ |  _ t |  i |  i |  i ƒ } t	 |  i
 i ƒ  ƒ } t ƒ  } | i |  i
 i |  i
 i |  i
 i |  i
 i | ƒ |  i p | i |  i ƒ n | i |  i ƒ |  i p | i |  i ƒ n | i |  i ƒ | i |  i ƒ | i |  i ƒ | i |  i ƒ | i | ƒ t i t	 | ƒ ƒ i ƒ  } |  i
 i | | ƒ |  i
 i ƒ  i |  i
 i | ƒ } t ƒ  } | i t t  ƒ ƒ | i! | ƒ | i |  i ƒ | i! t	 | ƒ ƒ |  i
 i" | ƒ |  i
 i# ƒ  d  S(   Ni   s   Client kex "e" is out of range($   RC   R   R	   R   R8   RE   R   R   R   t   strR   t   get_server_keyR   t   addt   remote_versiont   local_versiont   remote_kex_initt   local_kex_initR   R   R   R   R   R>   R    t   newt   digestt   _set_K_Ht   sign_ssh_dataR/   R   R   R'   t
   add_stringR   t   _activate_outbound(   R   R!   t   Kt   keyt   hmt   Ht   sig(    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR&   ¸   s>    '
	

!	c         C   s˜  | i  ƒ  } | i ƒ  |  _ | i  ƒ  } |  i d j  p |  i |  i d j o t d ƒ ‚ n t |  i |  i |  i ƒ } t ƒ  } | i |  i	 i
 |  i	 i |  i	 i |  i	 i | ƒ |  i p | i |  i ƒ n | i |  i ƒ |  i p | i |  i ƒ n | i |  i ƒ | i |  i ƒ | i |  i ƒ | i |  i ƒ | i | ƒ |  i	 i | t i t | ƒ ƒ i ƒ  ƒ |  i	 i | | ƒ |  i	 i ƒ  d  S(   Ni   s   Server kex "f" is out of range(   t
   get_stringRC   R   R	   R   RE   R   R   RI   R   RK   RJ   RM   RL   R   R   R   R   R   R>   R   R   RP   R    RN   RG   RO   t   _verify_keyRS   (   R   R!   t   host_keyRX   RT   RV   (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR(   Ü   s.    '	

((   t   __name__t
   __module__t   nameR   R   R   R   R   R"   R+   R8   R#   R)   R$   R&   R(   (    (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyR   &   s   	
			!			$N(   t   __doc__t   Crypto.HashR    t   Crypto.UtilR   t   paramiko.commont   paramikoR   t   paramiko.messageR   t   paramiko.ssh_exceptionR   t   rangeR   R   R%   R'   R   t   objectR   (    (    (    sO   C:\Documents and Settings\red08xgu\Desktop\python_webupdate\paramiko\kex_gex.pyt   <module>   s   
