U
vù¾fP( ã @ s¬ d Z ddlZddlmZmZ ddlmZ ddlmZm Z m
Z
mZ ddlm
Z
ddlmZ edd ƒ\ZZZZZd
d„ edd ƒD ƒ\ZZZZZG dd
„ d
ƒZG dd„ 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é é# c C s g | ]}t |ƒ‘qS © )r )Ú.0Úcr
r
úA/opt/alt/python38/lib/python3.8/site-packages/paramiko/kex_gex.pyÚ
0 s r c @ sj e Zd ZdZdZdZdZeZdd„ Z ddd „Z
d
d„ Zdd
„ Zdd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚKexGexz"diffie-hellman-group-exchange-sha1é é i c C s4 || _ d | _d | _d | _d | _d | _d | _d| _d S )NF)Ú transportÚpÚqÚgÚxÚeÚfÚ old_style)Úselfr r
r
r Ú__init__; s zKexGex.__init__Fc C sŒ | j jr| j tt¡ d S tƒ }|rB| t¡ | | j ¡ d| _
n.| t¡ | | j¡ | | j ¡ | | j
¡ | j |¡ | j t¡ d S )NT)r Zserver_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)r Z_test_old_styleÚmr
r
r Ú start_kexE s" ÿ
zKexGex.start_kexc C st |t kr| |¡S |tkr$| |¡S |tkr6| |¡S |tkrH| |¡S |tkrZ| |¡S d}t
| | j|¡ƒ‚d S )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_nextc C sš | j d d }t |d¡}t|d ƒ}t|ƒ}d}|d@ sL|dK }|dL }q2t |¡}t|d |ƒ|dd … }t |d¡}|dkrL||k rLqqL|| _ d S )Né é r éÿ é€ )
r r Zdeflate_longr ÚlenÚosÚurandomr Zinflate_longr )r r ZqnormZqhbyteZ
byte_countZqmaskZx_bytesr r
r
r Ú_generate_xl s
zKexGex._generate_xc C sî | ¡ }| ¡ }| ¡ }|| jkr(| j}|| jk r8| j}||krD|}||k rP|}|| _|| _|| _| j ¡ }|d kr|tdƒ‚| j td |||¡¡ |
|||¡\| _| _t
ƒ }| t¡ | | j¡ | | j¡ | j |¡ | j t¡ d S )Nú-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))Úget_intr( r' r% r Ú_get_modulus_packr
Ú_logr r4 Úget_modulusr r r r" Úc_MSG_KEXDH_GEX_GROUPÚ add_mpintr) r r/ )r r+ ZminbitsZ
preferredbitsZmaxbitsÚpackr
r
r r- ~ s@
ÿþ
zKexGex._parse_kexdh_gex_requestc C sÈ | ¡ | _| j| jkr| j| _| j| jk r2| j| _| j ¡ }|d krLtdƒ‚| j td | j¡¡ |
| j| j| j¡\| _| _t
ƒ }| t¡ | | j¡ | | j¡ | j |¡ | j t¡ d| _d S )NrA zPicking p (~ {} bits)T)rB r% r( r' r rC r
rD r r4 rE r r r r" rF rG r) r r/ r )r r+ rH r
r
r r3 ¤ s0
ÿ ÿ
z#KexGex._parse_kexdh_gex_request_oldc C s¦ | ¡ | _| ¡ | _t | j¡}|dk s0|dkr>td |¡ƒ‚| j t d |¡¡ |
¡ t| j| j| jƒ| _
tƒ }| t¡ | | j
¡ | j |¡ | j t¡ d S )Nr r z