
    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ZZZ edd	      D  cg c]
  }  e|        c} \  ZZZZZ G d
 d      Zyc c} w )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                   X    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y)KexGexSHA256z$diffie-hellman-group-exchange-sha256i       c                 t    || _         d | _        d | _        d | _        d | _        d | _        d | _        d| _        y )NF)	transportpqgxef	old_style)selfr   s     H/root/tools/cai/cai_env/lib/python3.12/site-packages/paramiko/kex_gex.py__init__zKexGexSHA256.__init__9   s:    "    c                 B   | j                   j                  r%| j                   j                  t        t               y t               }|r8|j                  t               |j                  | j                         d| _
        nf|j                  t               |j                  | j                         |j                  | j                         |j                  | j                         | j                   j                  |       | j                   j                  t               y )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    >>%%NN))&(B  IJJ23IId))*!DNJJ./IIdmm$IId))*IIdmm$$$Q'%%&:;r   c                 T   |t         k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S |t        k(  r| j                  |      S d}t        |j                  | 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   ptyper,   msgs       r   
parse_nextzKexGexSHA256.parse_nextY   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                 \   | j                   dz
  dz  }t        j                  |d      }t        |d         }t	        |      }d}|dz  s|dz  }|dz  }|dz  s	 t        j                  |      }t        |d   |      |dd  z   }t        j                  |d      }|dkD  r||k  r		 || _	        y T)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    VVaZA!!!Q'%(#Z
D=qLFaKE D= jj,G
E2WQR[@G!!'1-AAAE r   c                 $   |j                         }|j                         }|j                         }|| j                  kD  r| j                  }|| j                  k  r| j                  }||kD  r|}||k  r|}|| _        || _        || _        | j                  j                         }|t        d      | j                  j                  t        dj                  |||             |j                  |||      \  | _        | _        t               }|j                  t               |j!                  | j                         |j!                  | j                         | j                  j#                  |       | j                  j%                  t&               y )N-Can't do server-side gex with no modulus packzPicking p ({} <= {} <= {} bits))get_intr(   r'   r%   r   _get_modulus_packr
   _logr   r6   get_modulusr   r   r	   r"   c_MSG_KEXDH_GEX_GROUP	add_mpintr)   r   r1   )r   r,   minbitspreferredbitsmaxbitspacks         r   r/   z%KexGexSHA256._parse_kexdh_gex_request{   sC   ))+		))+4==( MMM4==( MMM ]"#G]"#G+~~//1<NOO-44	
 ))'='JI	

()	DFF	DFF$$Q'%%&9:r   c                 >   |j                         | _        | j                  | j                  kD  r| j                  | _        | j                  | j                  k  r| j                  | _        | j                  j                         }|t        d      | j                  j                  t        dj                  | j                               |j                  | j                  | j                  | j                        \  | _        | _        t               }|j                  t               |j!                  | j                         |j!                  | j                         | j                  j#                  |       | j                  j%                  t&               d| _        y )NrL   zPicking p (~ {} bits)T)rM   r%   r(   r'   r   rN   r
   rO   r   r6   rP   r   r   r	   r"   rQ   rR   r)   r   r1   r   )r   r,   rV   s      r   r5   z)KexGexSHA256._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                    |j                         | _        |j                         | _        t        j                  | j                        }|dk  s|dkD  rt        dj                  |            | j                  j                  t        dj                  |             | j                          t        | j                  | j                  | j                        | _        t               }|j                  t                |j#                  | j                         | j                  j%                  |       | j                  j'                  t(               y )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
   r6   r   rO   r   rJ   powr   r   r	   r"   c_MSG_KEXDH_GEX_INITrR   r)   r   r3   )r   r,   bitlens      r   r0   z#KexGexSHA256._parse_kexdh_gex_group   s    (TMv}"F6N  	E#;#B#B6#JKTVVTVVTVV,I	

'(	DFF$$Q'%%&:;r   c                    |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                         }t               }|j                  | j                  j                  | j                  j                  | j                  j                   | j                  j"                  |       | j$                  s|j'                  | j(                         |j'                  | j*                         | j$                  s|j'                  | j,                         |j/                  | j                         |j/                  | j                         |j/                  | j                         |j/                  | j                         |j/                  |       | j1                  |j                               j3                         }| j                  j5                  ||       | j                  j                         j7                  || j                  j8                        }t               }|j;                  t<               |j?                  |       |j/                  | j                         |j?                  |       | j                  jA                  |       | j                  jC                          y )Nr<   zClient kex "e" is out of range)"rY   r   r   r
   rJ   r[   r   r   r   r   get_server_keyasbytesr	   addremote_versionlocal_versionremote_kex_initlocal_kex_initr   r$   r'   r%   r(   rR   	hash_algodigest_set_K_Hsign_ssh_datahost_key_typer"   c_MSG_KEXDH_GEX_REPLY
add_stringr)   _activate_outbound)r   r,   KkeyhmHsigs          r   r2   z"KexGexSHA256._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1%nn++-;;t~~++
 I	

()	S	DFF	S$$Q'))+r   c                    |j                         }|j                         | _        |j                         }| j                  dk  s| j                  | j                  dz
  kD  rt	        d      t        | j                  | j                  | j                        }t               }|j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  |       | j                  s|j                  | j                          |j                  | j"                         | j                  s|j                  | j$                         |j'                  | j                         |j'                  | j(                         |j'                  | j*                         |j'                  | j                         |j'                  |       | j                  j-                  || j/                  |j1                               j3                                | j                  j5                  ||       | j                  j7                          y )Nr<   zServer kex "f" is out of range)
get_stringrY   r   r   r
   r[   r   r	   ra   r   rc   rb   re   rd   r   r$   r'   r%   r(   rR   r   r   rh   rf   r`   rg   _verify_keyrm   )r   r,   host_keyrr   rn   rp   s         r   r4   z#KexGexSHA256._parse_kexdh_gex_reply   s   <<>llnFFQJDFFTVVaZ/?@@' Y
NN((NN))NN))NN**	
 ~~JJt}}%


4&&'~~JJt}}%
TVV
TVV
TVV
TVV
Q4>>"**,#?#F#F#HI""8S1))+r   N)F)__name__
__module____qualname__r7   r'   r(   r%   r   rf   r   r-   r:   rJ   r/   r5   r0   r2   r4    r   r   r   r   2   sJ    1DHHNI<,9 $$;L6<(),V,r   r   )__doc__rB   hashlibr   paramikor   paramiko.commonr   r   r   r   paramiko.messager	   paramiko.ssh_exceptionr
   ranger!   r*   r1   r3   r    r#   rQ   r\   rk   r&   r   )cs   0r   <module>r      s   & 
   @ @ $ / 
"bM  B-(QXa[(f, f, )s   A(