§
    3xÅj›'  ã                   óÐ   — d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZ  edd	¦  «        \  ZZZZZd
„  edd	¦  «        D ¦   «         \  ZZZZZ G d„ d¦  «        ZdS )zÑ
Variant on the (now deprecated/removed) ``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)Úsha256)Úutil)ÚDEBUGÚbyte_chrÚ	byte_maskÚbyte_ord)ÚMessage)ÚSSHExceptioné   é#   c                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r   )Ú.0Úcs     úAC:\Projects\Historical\venv\Lib\site-packages\paramiko/kex_gex.pyú
<listcomp>r   /   s   € Ð(Ð(Ð(�Q…Xˆa�[„[Ð(Ð(Ð(ó    c                   óZ   — e Zd ZdZdZdZdZeZd„ Z	dd„Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚKexGexSHA256z$diffie-hellman-group-exchange-sha256i   é    c                 óv   — || _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        d S )NF)Ú	transportÚpÚqÚgÚxÚeÚfÚ	old_style)Úselfr   s     r   Ú__init__zKexGexSHA256.__init__9   s>   € Ø"ˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒˆˆr   Fc                 óF  — | j         j        r'| j                              t          t          ¦  «         d S t          ¦   «         }|r<|                     t          ¦  «         |                     | j	        ¦  «         d| _
        nh|                     t          ¦  «         |                     | j        ¦  «         |                     | j	        ¦  «         |                     | j        ¦  «         | j                              |¦  «         | j                              t          ¦  «         d S )NT)r   Ú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)r    Ú_test_old_styleÚms      r   Ú	start_kexzKexGexSHA256.start_kexC   sý   € ØŒ>Ô%ð 	ØŒN×)Ò)Ý&Õ(Bñô ð ð ˆFõ ‰IŒIˆØð 		%à�JŠJÕ2Ñ3Ô3Ð3Ø�IŠI�dÔ)Ñ*Ô*Ð*Ø!ˆDŒNˆNà�JŠJÕ.Ñ/Ô/Ð/Ø�IŠI�d”mÑ$Ô$Ð$Ø�IŠI�dÔ)Ñ*Ô*Ð*Ø�IŠI�d”mÑ$Ô$Ð$ØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×%Ò%Õ&:Ñ;Ô;Ð;Ð;Ð;r   c                 ó–  — |t           k    r|                      |¦  «        S |t          k    r|                      |¦  «        S |t          k    r|                      |¦  «        S |t          k    r|                      |¦  «        S |t          k    r|  	                    |¦  «        S d}t          |                     | j        |¦  «        ¦  «        ‚)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    Úptyper1   Úmsgs       r   Ú
parse_nextzKexGexSHA256.parse_nextY   sÅ   € ØÕ*Ò*Ð*Ø×0Ò0°Ñ3Ô3Ð3ØÕ*Ò*Ð*Ø×.Ò.¨qÑ1Ô1Ð1ØÕ)Ò)Ð)Ø×-Ò-¨aÑ0Ô0Ð0ØÕ*Ò*Ð*Ø×.Ò.¨qÑ1Ô1Ð1ØÕ0Ò0Ð0Ø×4Ò4°QÑ7Ô7Ð7Ø:ˆÝ˜3Ÿ:š: d¤i°Ñ7Ô7Ñ8Ô8Ð8r   c                 ó~  — | j         dz
  dz  }t          j        |d¦  «        }t          |d         ¦  «        }t	          |¦  «        }d}|dz  s|dz  }|dz  }|dz  ¯	 t          j        |¦  «        }t          |d         |¦  «        |dd …         z   }t          j        |d¦  «        }|dk    r||k     rnŒX|| _	        d S )Né   é   r   éÿ   é€   )
r   r   Údeflate_longr   ÚlenÚosÚurandomr   Úinflate_longr   )r    r   ÚqnormÚqhbyteÚ
byte_countÚqmaskÚx_bytesr   s           r   Ú_generate_xzKexGexSHA256._generate_xi   sÝ   € àŒV�a‰Z˜AÑˆÝÔ! ! QÑ'Ô'ˆÝ˜% œ(Ñ#Ô#ˆÝ˜‘Z”Zˆ
ØˆØ˜D‘=ð 	Ø�q‰LˆFØ�a‰KˆEð ˜D‘=ð 	ð	Ý”j Ñ,Ô,ˆGÝ ¨¤
¨EÑ2Ô2°W¸Q¸R¸R´[Ñ@ˆGÝÔ! '¨1Ñ-Ô-ˆAØ�A’�˜A šE˜EØð	ð ˆŒˆˆr   c                 ó@  — |                      ¦   «         }|                      ¦   «         }|                      ¦   «         }|| j        k    r| j        }|| j        k     r| j        }||k    r|}||k     r|}|| _        || _        || _        | j                             ¦   «         }|€t          d¦  «        ‚| j                             t          d 	                    |||¦  «        ¦  «         | 
                    |||¦  «        \  | _        | _        t          ¦   «         }|                     t          ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         | j                             |¦  «         | j                             t&          ¦  «         d S )Nú-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))Úget_intr-   r,   r*   r   Ú_get_modulus_packr
   Ú_logr   r;   Úget_modulusr   r   r	   r'   Úc_MSG_KEXDH_GEX_GROUPÚ	add_mpintr.   r$   r6   )r    r1   ÚminbitsÚpreferredbitsÚmaxbitsÚpacks         r   r4   z%KexGexSHA256._parse_kexdh_gex_request{   s  € Ø—)’)‘+”+ˆØŸ	š	™œˆØ—)’)‘+”+ˆà˜4œ=Ò(Ð(Ø œMˆMØ˜4œ=Ò(Ð(Ø œMˆMð �]Ò"Ð"Ø#ˆGØ�]Ò"Ð"Ø#ˆGàˆŒØ+ˆÔØˆŒàŒ~×/Ò/Ñ1Ô1ˆØˆ<ÝÐNÑOÔOÐOØŒ×ÒÝØ-×4Ò4Ø˜¨ñô ñ	
ô 	
ð 	
ð ×)Ò)¨'°=À'ÑJÔJ‰ˆŒ�”Ý‰IŒIˆØ	�
Š
Õ(Ñ)Ô)Ð)Ø	�Š�D”FÑÔÐØ	�Š�D”FÑÔÐØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×%Ò%Õ&9Ñ:Ô:Ð:Ð:Ð:r   c                 ó
  — |                      ¦   «         | _        | j        | j        k    r| j        | _        | j        | j        k     r| j        | _        | j                             ¦   «         }|€t          d¦  «        ‚| j                             t          d 	                    | j        ¦  «        ¦  «         | 
                    | j        | j        | j        ¦  «        \  | _        | _        t          ¦   «         }|                     t          ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         | j                             |¦  «         | j                             t&          ¦  «         d| _        d S )NrQ   zPicking p (~ {} bits)T)rR   r*   r-   r,   r   rS   r
   rT   r   r;   rU   r   r   r	   r'   rV   rW   r.   r$   r6   r   )r    r1   r[   s      r   r:   z)KexGexSHA256._parse_kexdh_gex_request_old¡   sK  € ð  Ÿiši™kœkˆÔàÔ ¤Ò.Ð.Ø"&¤-ˆDÔØÔ ¤Ò.Ð.Ø"&¤-ˆDÔàŒ~×/Ò/Ñ1Ô1ˆØˆ<ÝÐNÑOÔOÐOØŒ×ÒÝÐ*×1Ò1°$Ô2EÑFÔFñ	
ô 	
ð 	
ð ×)Ò)ØŒM˜4Ô.°´ñ
ô 
‰ˆŒ�”õ ‰IŒIˆØ	�
Š
Õ(Ñ)Ô)Ð)Ø	�Š�D”FÑÔÐØ	�Š�D”FÑÔÐØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×%Ò%Õ&9Ñ:Ô:Ð:ØˆŒˆˆr   c                 óÆ  — |                      ¦   «         | _        |                      ¦   «         | _        t          j        | j        ¦  «        }|dk     s|dk    r"t          d                     |¦  «        ¦  «        ‚| j                             t          d                     |¦  «        ¦  «         |  
                    ¦   «          t          | j        | j        | j        ¦  «        | _        t          ¦   «         }|                     t           ¦  «         |                     | j        ¦  «         | j                             |¦  «         | j                             t(          ¦  «         d S )Ni   r   z<Server-generated gex p (don't ask) is out of range ({} bits)zGot server p ({} bits))Ú	get_mpintr   r   r   Ú
bit_lengthr
   r;   r   rT   r   rO   Úpowr   r   r	   r'   Úc_MSG_KEXDH_GEX_INITrW   r.   r$   r8   )r    r1   Úbitlens      r   r5   z#KexGexSHA256._parse_kexdh_gex_group¼   s  € Ø—’‘”ˆŒØ—’‘”ˆŒå” ¤Ñ(Ô(ˆØ�TŠMˆM˜v¨š}˜}Ýðß"šF 6™NœNñô ð ð 	Œ×Ò�EÐ#;×#BÒ#BÀ6Ñ#JÔ#JÑKÔKÐKØ×ÒÑÔÐå�T”V˜TœV T¤VÑ,Ô,ˆŒÝ‰IŒIˆØ	�
Š
Õ'Ñ(Ô(Ð(Ø	�Š�D”FÑÔÐØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×%Ò%Õ&:Ñ;Ô;Ð;Ð;Ð;r   c                 ó>  — |                      ¦   «         | _        | j        dk     s| j        | j        dz
  k    rt          d¦  «        ‚|                      ¦   «          t          | j        | j        | j        ¦  «        | _        t          | j        | j        | j        ¦  «        }| j	         
                    ¦   «                              ¦   «         }t          ¦   «         }|                     | j	        j        | j	        j        | j	        j        | j	        j        |¦  «         | j        s|                     | j        ¦  «         |                     | j        ¦  «         | j        s|                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     |¦  «         |                      |                     ¦   «         ¦  «                             ¦   «         }| j	                             ||¦  «         | j	         
                    ¦   «                              || j	        j        ¦  «        }t          ¦   «         }|                     t<          ¦  «         |                     |¦  «         |                     | j        ¦  «         |                     |¦  «         | j	                              |¦  «         | j	         !                    ¦   «          d S )NrA   zClient kex "e" is out of range)"r^   r   r   r
   rO   r`   r   r   r   r   Úget_server_keyÚasbytesr	   ÚaddÚremote_versionÚlocal_versionÚremote_kex_initÚlocal_kex_initr   r)   r,   r*   r-   rW   Ú	hash_algoÚdigestÚ_set_K_HÚsign_ssh_dataÚhost_key_typer'   Úc_MSG_KEXDH_GEX_REPLYÚ
add_stringr.   Ú_activate_outbound)r    r1   ÚKÚkeyÚhmÚHÚsigs          r   r7   z"KexGexSHA256._parse_kexdh_gex_initÐ   s„  € Ø—’‘”ˆŒØŒF�QŠJˆJ˜DœF T¤V¨a¡ZÒ/Ð/ÝÐ?Ñ@Ô@Ð@Ø×ÒÑÔÐÝ�T”V˜TœV T¤VÑ,Ô,ˆŒÝ�”˜œ ¤Ñ'Ô'ˆØŒn×+Ò+Ñ-Ô-×5Ò5Ñ7Ô7ˆõ ‰YŒYˆØ
�ŠØŒNÔ)ØŒNÔ(ØŒNÔ*ØŒNÔ)Øñ	
ô 	
ð 	
ð Œ~ð 	&Ø�JŠJ�t”}Ñ%Ô%Ð%Ø
�
Š
�4Ô&Ñ'Ô'Ð'ØŒ~ð 	&Ø�JŠJ�t”}Ñ%Ô%Ð%Ø
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�Q‰ŒˆØ�NŠN˜2Ÿ:š:™<œ<Ñ(Ô(×/Ò/Ñ1Ô1ˆØŒ×Ò  1Ñ%Ô%Ð%àŒn×+Ò+Ñ-Ô-×;Ò;ØˆtŒ~Ô+ñ
ô 
ˆõ ‰IŒIˆØ	�
Š
Õ(Ñ)Ô)Ð)Ø	�Š�SÑÔÐØ	�Š�D”FÑÔÐØ	�Š�SÑÔÐØŒ×$Ò$ QÑ'Ô'Ð'ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   c                 ó~  — |                      ¦   «         }|                     ¦   «         | _        |                      ¦   «         }| j        dk     s| j        | j        dz
  k    rt	          d¦  «        ‚t          | j        | j        | j        ¦  «        }t          ¦   «         }|                     | j	        j
        | j	        j        | j	        j        | j	        j        |¦  «         | j        s|                     | j        ¦  «         |                     | j        ¦  «         | j        s|                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                     |¦  «         | j	                             ||                      |                     ¦   «         ¦  «                             ¦   «         ¦  «         | j	                             ||¦  «         | j	                             ¦   «          d S )NrA   zServer kex "f" is out of range)Ú
get_stringr^   r   r   r
   r`   r   r	   rf   r   rh   rg   rj   ri   r   r)   r,   r*   r-   rW   r   r   rm   rk   re   rl   Ú_verify_keyrr   )r    r1   Úhost_keyrw   rs   ru   s         r   r9   z#KexGexSHA256._parse_kexdh_gex_replyû   sÎ  € Ø—<’<‘>”>ˆØ—’‘”ˆŒØ�lŠl‰nŒnˆØŒF�QŠJˆJ˜DœF T¤V¨a¡ZÒ/Ð/ÝÐ?Ñ@Ô@Ð@Ý�”˜œ ¤Ñ'Ô'ˆõ ‰YŒYˆØ
�ŠØŒNÔ(ØŒNÔ)ØŒNÔ)ØŒNÔ*Øñ	
ô 	
ð 	
ð Œ~ð 	&Ø�JŠJ�t”}Ñ%Ô%Ð%Ø
�
Š
�4Ô&Ñ'Ô'Ð'ØŒ~ð 	&Ø�JŠJ�t”}Ñ%Ô%Ð%Ø
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�T”VÑÔÐØ
�Š�Q‰ŒˆØŒ×Ò  4§>¢>°"·*²*±,´,Ñ#?Ô#?×#FÒ#FÑ#HÔ#HÑIÔIÐIØŒ×"Ò" 8¨SÑ1Ô1Ð1ØŒ×)Ò)Ñ+Ô+Ð+Ð+Ð+r   N)F)Ú__name__Ú
__module__Ú__qualname__r<   r,   r-   r*   r   rk   r!   r2   r?   rO   r4   r:   r5   r7   r9   r   r   r   r   r   2   s»   € € € € € Ø1€DØ€HØ€HØ€NØ€Iðð ð ð<ð <ð <ð <ð,9ð 9ð 9ð ð ð ð$$;ð $;ð $;ðLð ð ð6<ð <ð <ð(),ð ),ð ),ðV,ð ,ð ,ð ,ð ,r   r   )Ú__doc__rG   Úhashlibr   Úparamikor   Úparamiko.commonr   r   r   r   Úparamiko.messager	   Úparamiko.ssh_exceptionr
   Úranger&   r/   r6   r8   r%   r(   rV   ra   rp   r+   r   r   r   r   ú<module>r†      s  ðð&ð ð 
€	€	€	Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø $Ð $Ð $Ð $Ð $Ð $Ø /Ð /Ð /Ð /Ð /Ð /ð 
€Eˆ"ˆb�M„MñØØØØØð )Ð(˜%˜%  B™-œ-Ð(Ñ(Ô(ñØØØØØðf,ð f,ð f,ð f,ð f,ñ f,ô f,ð f,ð f,ð f,r   