
    IiP(                         S r SSKrSSKJrJr  SSKJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJr  \" SS	5      u  rrrrr\" SS	5       V s/ s H  n \	" U 5      PM     sn u  rrrrr " S
 S5      r " S S\5      rgs  sn f )z
Variant on `KexGroup1 <paramiko.kex_group1.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                   b    \ rS rSrSrSrSrSr\r	S r
SS jrS rS	 rS
 rS rS rS rS rSrg)KexGex3   z"diffie-hellman-group-exchange-sha1       i   c                 r    Xl         S U l        S U l        S U l        S U l        S U l        S U l        SU l        g )NF)	transportpqgxef	old_style)selfr   s     6/venv/lib/python3.13/site-packages/paramiko/kex_gex.py__init__KexGex.__init__;   s8    "    c                 V   U R                   R                  (       a%  U R                   R                  [        [        5        g [        5       nU(       a8  UR                  [        5        UR                  U R                  5        SU l
        OfUR                  [        5        UR                  U R                  5        UR                  U R                  5        UR                  U R                  5        U R                   R                  U5        U R                   R                  [        5        g )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_kexKexGex.start_kexE   s    >>%%NN))&(B  IJJ23IId))*!DNJJ./IIdmm$IId))*IIdmm$$$Q'%%&:;r    c                 ^   U[         :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ U[        :X  a  U R                  U5      $ Sn[        UR                  U R                  U5      5      e)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   ptyper0   msgs       r   
parse_nextKexGex.parse_next\   s    **0033**..q11))--a00**..q110044Q77:3::dii788r    c                 z   U R                   S-
  S-  n[        R                  " US5      n[        US   5      n[	        U5      nSnUS-  (       d  US-  nUS-  nUS-  (       d  M   [
        R                  " U5      n[        US   U5      USS  -   n[        R                  " US5      nUS:  a  Xq:  a  OMP  Xpl	        g )N      r         )
r   r   deflate_longr   lenosurandomr	   inflate_longr   )r   r   qnormqhbyte
byte_countqmaskx_bytesr   s           r   _generate_xKexGex._generate_xl   s    VVaZA!!!Q'%(#Z
D=qLFaKE D== jj,G
E2WQR[@G!!'1-AAAE  r    c                    UR                  5       nUR                  5       nUR                  5       nX0R                  :  a  U R                  nX0R                  :  a  U R                  nX#:  a  UnXC:  a  UnX l        X0l        X@l        U R                  R                  5       nUc  [        S5      eU R                  R                  [        SR                  X#U5      5        UR                  X#U5      u  U l        U l        [        5       nUR                  [        5        UR!                  U R                  5        UR!                  U R                  5        U R                  R#                  U5        U R                  R%                  [&        5        g )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   r0   minbitspreferredbitsmaxbitspacks         r   r4   KexGex._parse_kexdh_gex_request~   s1   ))+		))+==( MMM==( MMM "#G"#G+~~//1<NOO-44	
 ))''JI	

()	DFF	DFF$$Q'%%&9:r    c                 D   UR                  5       U l        U R                  U R                  :  a  U R                  U l        U R                  U R                  :  a  U R                  U l        U R                  R                  5       nUc  [        S5      eU R                  R                  [        SR                  U R                  5      5        UR                  U R                  U R                  U R                  5      u  U l        U l        [        5       nUR                  [        5        UR!                  U R                  5        UR!                  U R                  5        U R                  R#                  U5        U R                  R%                  [&        5        SU l        g )NrS   zPicking p (~ {} bits)T)rT   r)   r,   r+   r   rU   r   rV   r   r;   rW   r   r   r
   r&   rX   rY   r-   r#   r6   r   )r   r0   r]   s      r   r:   #KexGex._parse_kexdh_gex_request_old   s+     iik."&--D."&--D~~//1<NOO*11$2E2EF	
 ))MM4..
 I	

()	DFF	DFF$$Q'%%&9:r    c                    UR                  5       U l        UR                  5       U l        [        R                  " U R                  5      nUS:  d  US:  a  [        SR                  U5      5      eU R                  R                  [        SR                  U5      5        U R                  5         [        U R                  U R                  U R                  5      U l        [        5       nUR                  [         5        UR#                  U R                  5        U R                  R%                  U5        U R                  R'                  [(        5        g )Nr   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   rV   r   rP   powr   r   r
   r&   c_MSG_KEXDH_GEX_INITrY   r-   r#   r8   )r   r0   bitlens      r   r5   KexGex._parse_kexdh_gex_group   s    (TMv}"F6N  	E#;#B#B6#JKTVVTVVTVV,I	

'(	DFF$$Q'%%&:;r    c                    UR                  5       U l        U R                  S:  d  U R                  U R                  S-
  :  a  [        S5      eU R	                  5         [        U R                  U R                  U R                  5      U l        [        U R                  U R                  U R                  5      nU R                  R                  5       R                  5       n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                   U R                  R"                  U5        U R$                  (       d  UR'                  U R(                  5        UR'                  U R*                  5        U R$                  (       d  UR'                  U R,                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U R                  5        UR/                  U5        U R1                  UR                  5       5      R3                  5       nU R                  R5                  X%5        U R                  R                  5       R7                  XPR                  R8                  5      n[        5       nUR;                  [<        5        UR?                  U5        UR/                  U R                  5        UR?                  U5        U R                  RA                  U5        U R                  RC                  5         g )NrB   zClient kex "e" is out of range)"rb   r   r   r   rP   rd   r   r   r   r   get_server_keyasbytesr
   addremote_versionlocal_versionremote_kex_initlocal_kex_initr   r(   r+   r)   r,   rY   	hash_algodigest_set_K_Hsign_ssh_datahost_key_typer&   c_MSG_KEXDH_GEX_REPLY
add_stringr-   _activate_outbound)r   r0   KkeyhmHsigs          r   r7   KexGex._parse_kexdh_gex_init   s(   FFQJDFFTVVaZ/?@@TVVTVVTVV,'nn++-557 Y
NN))NN((NN**NN))	
 ~~JJt}}%


4&&'~~JJt}}%
TVV
TVV
TVV
TVV
QNN2::<(//1%nn++-;;~~++
 I	

()	S	DFF	S$$Q'))+r    c                    UR                  5       nUR                  5       U l        UR                  5       nU R                  S:  d  U R                  U R                  S-
  :  a  [	        S5      e[        U R                  U R                  U R                  5      n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  U5        U R                  (       d  UR                  U R                   5        UR                  U R"                  5        U R                  (       d  UR                  U R$                  5        UR'                  U R                  5        UR'                  U R(                  5        UR'                  U R*                  5        UR'                  U R                  5        UR'                  U5        U R                  R-                  X@R/                  UR1                  5       5      R3                  5       5        U R                  R5                  X#5        U R                  R7                  5         g )NrB   zServer kex "f" is out of range)
get_stringrb   r   r   r   rd   r   r
   rk   r   rm   rl   ro   rn   r   r(   r+   r)   r,   rY   r   r   rr   rp   rj   rq   _verify_keyrw   )r   r0   host_keyr|   rx   rz   s         r   r9   KexGex._parse_kexdh_gex_reply   s   <<>llnFFQJDFFTVVaZ/?@@' Y
NN((NN))NN))NN**	
 ~~JJt}}%


4&&'~~JJt}}%
TVV
TVV
TVV
TVV
Q>>"**,#?#F#F#HI""81))+r    )r   r   r   r,   r+   r   r   r)   r   r   r   N)F)__name__
__module____qualname____firstlineno__r<   r+   r,   r)   r   rp   r   r1   r?   rP   r4   r:   r5   r7   r9   __static_attributes__ r    r   r   r   3   sJ    /DHHNI<.9 $$;L6<(),V,r    r   c                       \ rS rSrSr\rSrg)KexGexSHA256i  z$diffie-hellman-group-exchange-sha256r   N)r   r   r   r   r<   r   rp   r   r   r    r   r   r     s    1DIr    r   )__doc__rH   hashlibr   r   paramikor   paramiko.commonr   r   r   r	   paramiko.messager
   paramiko.ssh_exceptionr   ranger%   r.   r6   r8   r$   r'   rX   re   ru   r*   r   r   )cs   0r   <module>r      s   & 
    @ @ $ / 
"bM  B-(-QXa[-(h, h,V6 ] )s   A8