Ñò pØcJc @s˜dZddklZddklZddkTddklZddkl Z ddk l Z e dd ƒ\Z ZZZZd efd „ƒYZd S( sÒ Variant on L{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ÿÿÿÿ(tSHA(tnumber(t*(tutil(tMessage(t SSHExceptionii#tKexGexcBsteZdZdZdZdZd„Zed„Zd„Z d„Z d„Z d „Z d „Z d „Zd „ZRS( s"diffie-hellman-group-exchange-sha1ii icCsL||_d|_d|_d|_d|_d|_d|_t|_ dS(N( t transporttNonetptqtgtxtetftFalset old_style(tselfR((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyt__init__-s       cCsÌ|iio|iittƒdStƒ}|o0|ittƒƒ|i|i ƒt |_ nD|ittƒƒ|i|i ƒ|i|i ƒ|i|i ƒ|ii|ƒ|iitƒdS(N(Rt server_modet_expect_packett_MSG_KEXDH_GEX_REQUESTt_MSG_KEXDH_GEX_REQUEST_OLDRtadd_bytetchrtadd_inttpreferred_bitstTrueRtmin_bitstmax_bitst _send_messaget_MSG_KEXDH_GEX_GROUP(Rt_test_old_styletm((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyt start_kex7s   cCs›|tjo|i|ƒS|tjo|i|ƒS|tjo|i|ƒS|tjo|i|ƒS|tjo|i |ƒSt d|ƒ‚dS(Ns%KexGex asked to handle packet type %d( Rt_parse_kexdh_gex_requestRt_parse_kexdh_gex_groupt_MSG_KEXDH_GEX_INITt_parse_kexdh_gex_initt_MSG_KEXDH_GEX_REPLYt_parse_kexdh_gex_replyRt_parse_kexdh_gex_request_oldR(RtptypeR!((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyt parse_nextLs     cCs|idd}ti|dƒ}t|dƒ}t|ƒ}d}x$|d@p|dK}|dL}qHWx„to||iiiƒ|iii |ƒ}t t|dƒ|@ƒ|d}ti |dƒ}|djo||joPqoqoW||_ dS(Niiiiÿi€( R Rt deflate_longtordtlenRRtrandpooltstirt get_bytesRt inflate_longR (RR tqnormtqhbytetbytestqmasktx_bytesR ((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyt _generate_x]s$   " cCst|iƒ}|iƒ}|iƒ}||ijo |i}n||ijo |i}n||jo |}n||jo |}n||_||_||_|iiƒ}|djotdƒ‚n|iit d|||fƒ|i |||ƒ\|_ |_ t ƒ}|ittƒƒ|i|i ƒ|i|i ƒ|ii|ƒ|iitƒdS(Ns-Can't do server-side gex with no modulus packsPicking p (%d <= %d <= %d bits)(tget_intRRRRt_get_modulus_packRRt_logtDEBUGt get_modulusR R RRRRt add_mpintRRR%(RR!tminbitst preferredbitstmaxbitstpack((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR#ps2              ! cCs1|iƒ|_|i|ijo|i|_n|i|ijo|i|_n|iiƒ}|djotdƒ‚n|iit d|ifƒ|i |i|i|iƒ\|_ |_ t ƒ}|ittƒƒ|i|i ƒ|i|i ƒ|ii|ƒ|iitƒt|_dS(Ns-Can't do server-side gex with no modulus packsPicking p (~ %d bits)(R9RRRRR:RRR;R<R=R R RRRRR>RRR%RR(RR!RB((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR)‘s" * cCsí|iƒ|_|iƒ|_ti|iƒ}|djp |djotd|ƒ‚n|iitd|ƒ|i ƒt |i|i |iƒ|_ t ƒ}|ittƒƒ|i|i ƒ|ii|ƒ|iitƒdS(Nii s<Server-generated gex p (don't ask) is out of range (%d bits)sGot server p (%d bits)(t get_mpintR R Rt bit_lengthRRR;R<R8tpowR R RRRR%R>RRR'(RR!tbitlen((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR$§s  cCs-|iƒ|_|idjp|i|idjotdƒ‚n|iƒt|i|i|iƒ|_t|i|i|iƒ}t |i i ƒƒ}t ƒ}|i |i i|i i|i i|i i|ƒ|ip|i|iƒn|i|iƒ|ip|i|iƒn|i|iƒ|i|iƒ|i|iƒ|i|iƒ|i|ƒtit |ƒƒiƒ}|i i||ƒ|i i ƒi|i i|ƒ}t ƒ}|itt ƒƒ|i!|ƒ|i|iƒ|i!t |ƒƒ|i i"|ƒ|i i#ƒdS(NisClient kex "e" is out of range($RCR R RR8RER R RtstrRtget_server_keyRtaddtremote_versiont local_versiontremote_kex_inittlocal_kex_initRRRRRR>Rtnewtdigestt_set_K_Ht sign_ssh_dataR/RRR't add_stringRt_activate_outbound(RR!tKtkeythmtHtsig((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR&¸s>'     !  cCs˜|iƒ}|iƒ|_|iƒ}|idjp|i|idjotdƒ‚nt|i|i|iƒ}tƒ}|i|i i |i i |i i |i i |ƒ|ip|i|iƒn|i|iƒ|ip|i|iƒn|i|iƒ|i|iƒ|i|iƒ|i|iƒ|i|ƒ|i i|tit|ƒƒiƒƒ|i i||ƒ|i iƒdS(NisServer kex "f" is out of range(t get_stringRCRR RRER RRIRRKRJRMRLRRRRRR>R R RPRRNRGROt _verify_keyRS(RR!thost_keyRXRTRV((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR(Üs.  '    ((t__name__t __module__tnameRRRRRR"R+R8R#R)R$R&R((((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyR&s    !   $N(t__doc__t Crypto.HashRt Crypto.UtilRtparamiko.commontparamikoRtparamiko.messageRtparamiko.ssh_exceptionRtrangeRRR%R'RtobjectR(((s4/usr/lib/python2.6/site-packages/paramiko/kex_gex.pyts