
    AHj                         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 edd	      D  cg c]
  }  e|        c} \  ZZ ed
      e	dz  z   Ze
dz  Z G d d      Zyc c} w )z
Standard SSH key exchange ("kex" if you wanna sound cool).  Diffie-Hellman of
1024 bit key halves, using a known "p" prime and "g" generator.
    N)sha256)util)byte_chr	byte_maskmax_byte	zero_byte)Message)SSHException                c                   @    e Zd ZdZdZdZeZd Zd Z	d Z
d Zd Zd	 Zy
)KexGroup14SHA256l   &UG9
tcb0]Q\-:$90.`U_b;YS7x]Ek`:xds!,w<G8qbdR_hddY6KpRT{UjK#Gt|L4S8 FYpw,(.> =HG2Cdc_.K?&j_c}z[\V_1M.D^/1v5I	jV&|/mVlR<6#{n4(EY91T:g8	H	Apcb4BBj~H    zdiffie-hellman-group14-sha256c                 <    || _         d| _        d| _        d| _        y )Nr   )	transportxef)selfr   s     L/root/tools/cai/cai_env/lib/python3.12/site-packages/paramiko/kex_group14.py__init__zKexGroup14SHA256.__init__0   s    "    c                 8   | j                          | j                  j                  rPt        | j                  | j
                  | j                        | _        | j                  j                  t               y t        | j                  | j
                  | j                        | _
        t               }|j                  t               |j                  | j                         | j                  j                  |       | j                  j                  t                y )N)_generate_xr   server_modepowGr   Pr   _expect_packet_MSG_KEXDH_INITr   r	   add_bytec_MSG_KEXDH_INIT	add_mpint_send_message_MSG_KEXDH_REPLY)r   ms     r   	start_kexzKexGroup14SHA256.start_kex6   s    >>%%0DFNN))/:TVVTVVTVV,I	

#$	DFF$$Q'%%&67r   c                     | j                   j                  r|t        k(  r| j                  |      S | j                   j                  s|t        k(  r| j                  |      S d}t        |j                  |            )Nz1KexGroup14SHA256 asked to handle packet type {:d})r   r   r#   _parse_kexdh_initr(   _parse_kexdh_replyr
   format)r   ptyper)   msgs       r   
parse_nextzKexGroup14SHA256.parse_nextE   sf    >>%%5O+C))!,,++:J1J**1--A3::e,--r   c                     	 t        j                  d      }t        |d   d      |dd  z   }|d d t        k7  r|d d t        k7  rnDt        j                  |      | _        y )N      r   r   r   )osurandomr   b7fffffffffffffffb0000000000000000r   inflate_longr   )r   x_bytess     r   r   zKexGroup14SHA256._generate_xO   si     jjoG
D1GABK?G00BQK#44  ""7+r   c                    |j                         }|j                         | _        | j                  dk  s| j                  | j                  dz
  kD  rt	        d      |j                         }t        | j                  | j                  | j                        }t               }|j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                         |j                  |       |j!                  | j"                         |j!                  | j                         |j!                  |       | j                  j%                  || j'                  |j)                               j+                                | j                  j-                  ||       | j                  j/                          y )Nr3   zServer kex "f" is out of range)
get_string	get_mpintr   r!   r
   
get_binaryr   r   r	   addr   local_versionremote_versionlocal_kex_initremote_kex_init
add_stringr&   r   _set_K_H	hash_algoasbytesdigest_verify_key_activate_outbound)r   r)   host_keysigKhms         r   r-   z#KexGroup14SHA256._parse_kexdh_reply`   s;   <<>FFQJDFFTVVaZ/?@@lln' Y
NN((NN))NN))NN**		
 	h
TVV
TVV
Q4>>"**,#?#F#F#HI""8S1))+r   c                    |j                         | _        | j                  dk  s| j                  | j                  dz
  kD  rt        d      t	        | j                  | j
                  | j                        }| j                  j                         j                         }t               }|j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                         |j                  |       |j!                  | j                         |j!                  | j"                         |j!                  |       | j%                  |j                               j'                         }| j                  j)                  ||       | j                  j                         j+                  || j                  j,                        }t               }|j/                  t0               |j                  |       |j!                  | j"                         |j                  |       | j                  j3                  |       | j                  j5                          y )Nr3   zClient kex "e" is out of range)r=   r   r!   r
   r   r   r   get_server_keyrG   r	   r?   rA   r@   rC   rB   rD   r&   r   rF   rH   rE   sign_ssh_datahost_key_typer$   c_MSG_KEXDH_REPLYr'   rJ   )r   r)   rM   keyrN   HrL   s          r   r,   z"KexGroup14SHA256._parse_kexdh_inity   s   FFQJDFFTVVaZ/?@@'nn++-557 Y
NN))NN((NN**NN))		
 	c
TVV
TVV
QNN2::<(//11%nn++-;;t~~++
 I	

$%	S	DFF	S$$Q'))+r   N)__name__
__module____qualname__r!   r    namer   rF   r   r*   r1   r   r-   r,    r   r   r   r   (   s7     	KA	A*DI8.,",2!,r   r   )__doc__r5   hashlibr   paramikor   paramiko.commonr   r   r   r   paramiko.messager	   paramiko.ssh_exceptionr
   ranger#   r(   r%   rS   r7   r8   r   )cs   0r   <module>rc      s   (
 
   D D $ /$)"bM !!<A"bM&Jqx{&J # #TNX\1 M r, r, 'Ks   A5