
    7gP(                         d Z ddlZddlmZ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 G d de          ZdS )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                 ,    g | ]}t          |          S  )r   ).0cs     J/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/kex_gex.py
<listcomp>r   0   s    (((QXa[[(((    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 )KexGexz"diffie-hellman-group-exchange-sha1       i   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KexGex.__init__;   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KexGex.start_kexE   s    >% 	N))&(B   F II 		%JJ2333IId)***!DNNJJ.///IIdm$$$IId)***IIdm$$$$$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_requestr1   _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"   ptyper3   msgs       r   
parse_nextzKexGex.parse_next\   s    ***00333***..q111)))--a000***..q11100044Q777:3::di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KexGex._generate_xl   s    VaZA!!Q''%(##ZZ
D= 	qLFaKE D= 		j,,G
E22WQRR[@G!'1--AAAEE	 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_mpintr0   r&   r8   )r"   r3   minbitspreferredbitsmaxbitspacks         r   r6   zKexGex._parse_kexdh_gex_request~   s   ))++		))++4=(( MM4=(( MM ]""#G]""#G+~//11<NOOO-44 	
 	
 	
 ))'='JJII	

()))	DF	DF$$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 )NrS   zPicking p (~ {} bits)T)rT   r,   r/   r.   r   rU   r   rV   r   r=   rW   r   r   r
   r)   rX   rY   r0   r&   r8   r!   )r"   r3   r]   s      r   r<   z#KexGex._parse_kexdh_gex_request_old   sK     iikk.."&-D.."&-D~//11<NOOO*11$2EFF	
 	
 	
 ))M4.
 
 II	

()))	DF	DF$$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 )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   rQ   powr   r   r
   r)   c_MSG_KEXDH_GEX_INITrY   r0   r&   r:   )r"   r3   bitlens      r   r7   zKexGex._parse_kexdh_gex_group   s   ((TMMv}}"F6NN   	E#;#B#B6#J#JKKKTVTVTV,,II	

'(((	DF$$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 )NrC   zClient kex "e" is out of range)"r`   r   r   r   rQ   rb   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_stringr0   _activate_outbound)r"   r3   KkeyhmHsigs          r   r9   zKexGex._parse_kexdh_gex_init   s   FQJJDFTVaZ//?@@@TVTVTV,,''n++--5577 YY
N)N(N*N)	
 	
 	
 ~ 	&JJt}%%%


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

()))	S	DF	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 )NrC   zServer kex "f" is out of range)
get_stringr`   r    r   r   rb   r   r
   rh   r   rj   ri   rl   rk   r!   r+   r.   r,   r/   rY   r   r   ro   rm   rg   rn   _verify_keyrt   )r"   r3   host_keyry   ru   rw   s         r   r;   zKexGex._parse_kexdh_gex_reply   s   <<>>llnnFQJJDFTVaZ//?@@@'' YY
N(N)N)N*	
 	
 	
 ~ 	&JJt}%%%


4&'''~ 	&JJt}%%%
TV
TV
TV
TV
Q4>>"**,,#?#?#F#F#H#HIII""8S111))+++++r   N)F)__name__
__module____qualname__r>   r.   r/   r,   r   rm   r#   r4   rA   rQ   r6   r<   r7   r9   r;   r   r   r   r   r   3   s        /DHHNI  < < < <.9 9 9   $$; $; $;L  6< < <(), ), ),V, , , , ,r   r   c                       e Zd ZdZeZdS )KexGexSHA256z$diffie-hellman-group-exchange-sha256N)r~   r   r   r>   r   rm   r   r   r   r   r     s        1DIIIr   r   )__doc__rI   hashlibr   r   paramikor   paramiko.commonr   r   r   r	   paramiko.messager
   paramiko.ssh_exceptionr   ranger(   r1   r8   r:   r'   r*   rX   rc   rr   r-   r   r   r   r   r   <module>r      sE  &  
			                       @ @ @ @ @ @ @ @ @ @ @ @ $ $ $ $ $ $ / / / / / / 
E"bMM )(%%B--(((h, h, h, h, h, h, h, h,V    6     r   