U ¨Ãq`>(ã@s¶dZddlZddlmZmZddlmZddlmZddl m Z ddl m Z m Z mZddlmZed d ƒ\ZZZZZd d „ed d ƒDƒ\ZZZZZGd d„deƒZGdd„deƒZdS)zÒ Variant on `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 **lot** more on the server side. éN)Úsha1Úsha256)Úutil)ÚDEBUG)ÚMessage)Úbyte_chrÚbyte_ordÚ byte_mask)Ú SSHExceptionéé#cCsg|] }t|ƒ‘qS©)r)Ú.0Úcr r ú7/tmp/pip-target-nv4zd3e_/lib/python/paramiko/kex_gex.pyÚ 1src@sjeZdZdZdZdZdZeZdd„Z ddd „Z d d „Z d d „Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)ÚKexGexz"diffie-hellman-group-exchange-sha1éé icCs4||_d|_d|_d|_d|_d|_d|_d|_dS)NF)Ú transportÚpÚqÚgÚxÚeÚfÚ old_style)Úselfrr r rÚ__init__<szKexGex.__init__FcCsŒ|jjr|j tt¡dStƒ}|rB| t¡| |j ¡d|_ n.| t ¡| |j ¡| |j ¡| |j ¡|j |¡|j t¡dS)NT)rZ server_modeÚ_expect_packetÚ_MSG_KEXDH_GEX_REQUESTÚ_MSG_KEXDH_GEX_REQUEST_OLDrÚadd_byteÚc_MSG_KEXDH_GEX_REQUEST_OLDÚadd_intÚpreferred_bitsrÚc_MSG_KEXDH_GEX_REQUESTÚmin_bitsÚmax_bitsÚ _send_messageÚ_MSG_KEXDH_GEX_GROUP)rZ_test_old_styleÚmr r rÚ start_kexFs"ÿ       zKexGex.start_kexcCst|tkr| |¡S|tkr$| |¡S|tkr6| |¡S|tkrH| |¡S|tkrZ|  |¡Sd}t |  |j |¡ƒ‚dS)Nz*KexGex {} asked to handle packet type {:d}) r Ú_parse_kexdh_gex_requestr*Ú_parse_kexdh_gex_groupÚ_MSG_KEXDH_GEX_INITÚ_parse_kexdh_gex_initÚ_MSG_KEXDH_GEX_REPLYÚ_parse_kexdh_gex_replyr!Ú_parse_kexdh_gex_request_oldr ÚformatÚname)rÚptyper+Úmsgr r rÚ parse_next]s     zKexGex.parse_nextcCsš|jdd}t |d¡}t|dƒ}t|ƒ}d}|d@sL|dK}|dL}q2t |¡}t|d|ƒ|dd…}t |d¡}|dkrL||krLqqL||_ dS)Nééréÿé€) rrZ deflate_longrÚlenÚosÚurandomr Z inflate_longr)rrZqnormZqhbyteZ byte_countZqmaskZx_bytesrr r rÚ _generate_xms     zKexGex._generate_xcCsî| ¡}| ¡}| ¡}||jkr(|j}||jkr8|j}||krD|}||krP|}||_||_||_|j ¡}|dkr|tdƒ‚|j td  |||¡¡|  |||¡\|_ |_ t ƒ}| t¡| |j ¡| |j ¡|j |¡|j t¡dS)Nú-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))Úget_intr(r'r%rÚ_get_modulus_packr Ú_logrr4Ú get_modulusrrrr"Úc_MSG_KEXDH_GEX_GROUPÚ add_mpintr)rr/)rr+ZminbitsZ preferredbitsZmaxbitsÚpackr r rr-s@   ÿþ    zKexGex._parse_kexdh_gex_requestcCsÈ| ¡|_|j|jkr|j|_|j|jkr2|j|_|j ¡}|dkrLtdƒ‚|j td  |j¡¡|  |j|j|j¡\|_ |_ t ƒ}| t¡| |j ¡| |j ¡|j |¡|j t¡d|_dS)NrAzPicking p (~ {} bits)T)rBr%r(r'rrCr rDrr4rErrrr"rFrGr)rr/r)rr+rHr r rr3¥s0     ÿÿ      z#KexGex._parse_kexdh_gex_request_oldcCs¦| ¡|_| ¡|_t |j¡}|dks0|dkr>td |¡ƒ‚|j t d |¡¡|  ¡t |j|j |jƒ|_ tƒ}| t¡| |j ¡|j |¡|j t¡dS)NrrzÚhashlibrrZparamikorZparamiko.commonrZparamiko.messagerZparamiko.py3compatrrr Zparamiko.ssh_exceptionr Úranger!r*r/r1r r#rFrLrVr&Úobjectrr`r r r rÚs0    ú új