a °…bv(ã@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-98j97qn4/lib/python/paramiko/kex_gex.pyÚ 1órc@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 ¡}|dur|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 Ú_logrr5Ú get_modulusrrrr#Úc_MSG_KEXDH_GEX_GROUPÚ add_mpintr*r r0)rr,ZminbitsZ preferredbitsZmaxbitsÚpackr r rr.s<   ÿþ    zKexGex._parse_kexdh_gex_requestcCsÈ| ¡|_|j|jkr|j|_|j|jkr2|j|_|j ¡}|durLtdƒ‚|j td  |j¡¡|  |j|j|j¡\|_ |_ t ƒ}| t¡| |j ¡| |j ¡|j |¡|j t¡d|_dS)NrBzPicking p (~ {} bits)T)rCr&r)r(rrDr rErr5rFrrrr#rGrHr*r r0r)rr,rIr r rr4¥s*     ÿ ÿ      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)Nrrzs0    ú úl