
    IiT                         S SK r S SKrS SKJr  S SKJrJr  S SKJrJ	r	  S SK
Jr  S SKJr  S SKJr  \" SS	5      u  rr\" SS	5       V s/ s H  n \" U 5      PM     sn u  rr " S
 S5      rgs  sn f )    N)UnsupportedAlgorithm)constant_timeserialization)X25519PrivateKeyX25519PublicKey)Message)byte_chr)SSHException       c                   `    \ rS rSr\R
                  rS r\S 5       r	S r
S rS rS rS rS	rg
)KexCurve25519   c                     Xl         S U l        g N)	transportkey)selfr   s     =/venv/lib/python3.13/site-packages/paramiko/kex_curve25519.py__init__KexCurve25519.__init__   s    "    c                 P     [         R                  " 5         g! [         a     gf = f)NTF)r   generater   )clss    r   is_availableKexCurve25519.is_available   s,    	%%'  $ 		s    
%%c                     U R                   R                  U5      n[        R                  " US5      (       a  [	        S5      eU$ )Ns                                    z.peer's curve25519 public value has wrong order)r   exchanger   bytes_eqr
   )r   peer_keysecrets      r   _perform_exchangeKexCurve25519._perform_exchange$   s@    ""8,!!&,77@  r   c                 2   [         R                  " 5       U l        U R                  R                  (       a   U R                  R                  [        5        g [        5       nUR                  [        5        UR                  U R                  R                  5       R                  [        R                  R                  [        R                   R                  5      5        U R                  R#                  U5        U R                  R                  [$        5        g r   )r   r   r   r   server_mode_expect_packet_MSG_KEXECDH_INITr   add_bytec_MSG_KEXECDH_INIT
add_string
public_keypublic_bytesr   EncodingRawPublicFormat_send_message_MSG_KEXECDH_REPLY)r   ms     r   	start_kexKexCurve25519.start_kex,   s    #,,.>>%%NN))*;<I	

%&	HH!..&&**M,F,F,J,J	

 	$$Q'%%&89r   c                    U R                   R                  (       a  U[        :X  a  U R                  U5      $ U R                   R                  (       d  U[        :X  a  U R                  U5      $ [        SR                  U5      5      e)Nz.KexCurve25519 asked to handle packet type {:d})r   r&   r(   _parse_kexecdh_initr2   _parse_kexecdh_replyr
   format)r   ptyper3   s      r   
parse_nextKexCurve25519.parse_next<   si    >>%%54E+E++A..++:L1L,,Q//<CCEJ
 	
r   c                 2   UR                  5       n[        R                  " U5      nU R                  U5      n[	        [
        R                  " U5      S5      n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  5        U R                  R                  5       R                  5       nU R                   R#                  5       R%                  [&        R(                  R*                  [&        R,                  R*                  5      nUR/                  U5        UR/                  U5        UR/                  U5        UR1                  U5        U R3                  UR                  5       5      R5                  5       nU R                  R7                  XH5        U R                  R                  5       R9                  XR                  R:                  5      n	[        5       nUR=                  [>        5        UR/                  U5        UR/                  U5        UR/                  U	5        U R                  RA                  U5        U R                  RC                  5         g N   )"
get_stringr   from_public_bytesr#   intbinasciihexlifyr   addr   remote_versionlocal_versionremote_kex_initlocal_kex_initget_server_keyasbytesr   r,   r-   r   r.   r/   r0   r+   	add_mpint	hash_algodigest_set_K_Hsign_ssh_datahost_key_typer)   c_MSG_KEXECDH_REPLYr1   _activate_outbound)
r   r3   peer_key_bytesr!   Khmserver_key_bytesexchange_key_bytesHsigs
             r   r7   !KexCurve25519._parse_kexecdh_initE   s   "44^D""8,  #R(Y
NN))NN((NN**NN))		
  >>88:BBD!XX002??""&&(B(B(F(F
 	&'
n%
()
QNN2::<(//1%nn++-;;~~++
 I	

&'	%&	'(	S$$Q'))+r   c                    UR                  5       nUR                  5       nUR                  5       n[        R                  " U5      nU R	                  U5      n[        [        R                  " U5      S5      n[        5       nUR                  U R                  R                  U R                  R                  U R                  R                  U R                  R                  5        UR                  U5        UR                  U R                   R#                  5       R%                  [&        R(                  R*                  [&        R,                  R*                  5      5        UR                  U5        UR/                  U5        U R                  R1                  X`R3                  UR5                  5       5      R7                  5       5        U R                  R9                  X$5        U R                  R;                  5         g r>   )r@   
get_binaryr   rA   r#   rB   rC   rD   r   rE   r   rG   rF   rI   rH   r+   r   r,   r-   r   r.   r/   r0   rL   rO   rM   rK   rN   _verify_keyrS   )r   r3   peer_host_key_bytesrT   rZ   r!   rU   rV   s           r   r8   "KexCurve25519._parse_kexecdh_replyh   s[   llnlln"44^D""8,  #R(Y
NN((NN))NN))NN**		
 	)*
HH!..&&**M,F,F,J,J	

 	n%
Q>>"**,#?#F#F#HI""#6<))+r   )r   r   N)__name__
__module____qualname____firstlineno__hashlibsha256rM   r   classmethodr   r#   r4   r;   r7   r8   __static_attributes__ r   r   r   r      s>    I  : 
!,F,r   r   )rC   re   cryptography.exceptionsr   cryptography.hazmat.primitivesr   r   0cryptography.hazmat.primitives.asymmetric.x25519r   r   paramiko.messager   paramiko.commonr	   paramiko.ssh_exceptionr
   ranger(   r2   r*   rR   r   )cs   0r   <module>rr      sl      8 G
 % $ / ).b" % %@Eb"*N18A;*N ' 'o, o, +Os   A+