U vù¾fP(ã@s¬dZddlZddlmZmZddlmZddlmZm Z m Z m Z ddl m Z ddlmZedd ƒ\ZZZZZd d „edd ƒDƒ\ZZZZZGd d „d ƒ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Úbyte_chrÚbyte_ordÚ byte_mask)ÚMessage)Ú SSHExceptionéé#cCsg|] }t|ƒ‘qS©)r)Ú.0Úcr r úA/opt/alt/python38/lib/python3.8/site-packages/paramiko/kex_gex.pyÚ 0src@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_kexEs"ÿ       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ÚurandomrZ inflate_longr)rrZqnormZqhbyteZ byte_countZqmaskZx_bytesrr r rÚ _generate_xls     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_modulusrrr r"Ú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 rDrr4rErrr r"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.commonrrrrZparamiko.messager Zparamiko.ssh_exceptionr Úranger!r*r/r1r r#rFrLrVr&rr`r r r rÚs.   ú úl