
    7g                        d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ  ed
d          \  ZZd  ed
d          D             \  ZZ G d d          Z G d de          Z G d de          ZdS )zQ
Ephemeral Elliptic Curve Diffie-Hellman (ECDH) key exchange
RFC 5656, Section 4
    )sha256sha384sha512byte_chr)Message)SSHException)default_backend)ec)serialization)hexlify       c                 ,    g | ]}t          |          S  r   ).0cs     P/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/kex_ecdh_nist.py
<listcomp>r      s    *N*N*N18A;;*N*N*N    c                   X    e Zd ZdZeZ ej                    Zd Z	d Z
d Zd Zd Zd ZdS )	KexNistp256zecdh-sha2-nistp256c                 >    || _         d| _        d | _        d | _        d S )Nr   )	transportPQ_CQ_S)selfr   s     r   __init__zKexNistp256.__init__   s"    "r   c                    |                                   | j        j        r!| j                            t                     d S t                      }|                    t                     |                    | j	        
                    t          j        j        t          j        j                             | j                            |           | j                            t"                     d S N)_generate_key_pairr   server_mode_expect_packet_MSG_KEXECDH_INITr   add_bytec_MSG_KEXECDH_INIT
add_stringr   public_bytesr   EncodingX962PublicFormatUncompressedPoint_send_message_MSG_KEXECDH_REPLY)r   ms     r   	start_kexzKexNistp256.start_kex    s    !!!>% 	N))*;<<<FII	

%&&&	H!!&+*< 	
 	
 	
 	$$Q'''%%&899999r   c                     | j         j        r |t          k    r|                     |          S | j         j        s |t          k    r|                     |          S t          d                    |                    )Nz(KexECDH asked to handle packet type {:d})r   r#   r%   _parse_kexecdh_initr/   _parse_kexecdh_replyr	   format)r   ptyper0   s      r   
parse_nextzKexNistp256.parse_next1   s}    >% 	054E+E+E++A...+ 	0:L1L1L,,Q///6==eDD
 
 	
r   c                     t          j        | j        t                                | _        | j        j        r | j                                        | _        d S | j                                        | _	        d S r!   )
r   generate_private_keycurver
   r   r   r#   
public_keyr   r   )r   s    r   r"   zKexNistp256._generate_key_pair:   s^    (_5F5FGG>% 	v((**DHF6$$&&r   c                    |                                 }t          j                            | j        |          | _        | j                                                                        }| j	        
                    t          j                    | j                  }t          t          |          d          }t                      }|                    | j        j        | j        j        | j        j        | j        j                   |                    |           |                    |           |                    | j                            t.          j        j        t.          j        j                             |                    t          |                     |                     |                                                                          }| j                            ||           | j                                                             || j        j!                  }t                      }|"                    tF                     |                    |           |                    | j                            t.          j        j        t.          j        j                             |                    |           | j        $                    |           | j        %                                 d S N   )&
get_stringr   EllipticCurvePublicKeyfrom_encoded_pointr:   r   r   get_server_keyasbytesr   exchangeECDHintr   r   addremote_versionlocal_versionremote_kex_initlocal_kex_initr(   r   r)   r   r*   r+   r,   r-   	add_mpint	hash_algodigest_set_K_Hsign_ssh_datahost_key_typer&   c_MSG_KEXECDH_REPLYr.   _activate_outbound)r   r0   	Q_C_bytesK_SKhmHsigs           r   r3   zKexNistp256._parse_kexecdh_initA   sZ   LLNN	,??J	
 
 n++--5577FOOBGIItx00

BYY
N)N(N*N)		
 	
 	
 	c
i   
H!!&+*< 	
 	
 	
 	SVVNN2::<<((//111%%%n++--;;t~+
 
 II	

&'''	S	H!!&+*< 	
 	
 	
 	
S$$Q'''))+++++r   c                 ,   |                                 }|                                 }t          j                            | j        |          | _        |                                }| j                            t          j	                    | j                  }t          t          |          d          }t                      }|                    | j        j        | j        j        | j        j        | j        j                   |                    |           |                    | j                            t,          j        j        t,          j        j                             |                    |           |                    |           | j                            ||                     |                                                                                     | j                             ||           | j        !                                 d S r=   )"r?   r   r@   rA   r:   r   
get_binaryr   rD   rE   rF   r   r   rG   r   rI   rH   rK   rJ   r(   r   r)   r   r*   r+   r,   r-   rL   rO   rM   rC   rN   _verify_keyrS   )r   r0   rU   	Q_S_bytesrY   rV   rW   s          r   r4   z KexNistp256._parse_kexecdh_replyn   s   llnnLLNN	,??J	
 
 llnnFOOBGIItx00

BYY
N(N)N)N*		
 	
 	
 	c
H!!&+*< 	
 	
 	
 	i   
Q4>>"**,,#?#?#F#F#H#HIII""3,,,))+++++r   N)__name__
__module____qualname__namer   rM   r   	SECP256R1r:   r   r1   r7   r"   r3   r4   r   r   r   r   r      s        DIBLNNE  : : :"
 
 
' ' '+, +, +,Z, , , , ,r   r   c                   4    e Zd ZdZeZ ej                    ZdS )KexNistp384zecdh-sha2-nistp384N)	r^   r_   r`   ra   r   rM   r   	SECP384R1r:   r   r   r   rd   rd      %        DIBLNNEEEr   rd   c                   4    e Zd ZdZeZ ej                    ZdS )KexNistp521zecdh-sha2-nistp521N)	r^   r_   r`   ra   r   rM   r   	SECP521R1r:   r   r   r   rh   rh      rf   r   rh   N)__doc__hashlibr   r   r   paramiko.commonr   paramiko.messager   paramiko.ssh_exceptionr	   cryptography.hazmat.backendsr
   )cryptography.hazmat.primitives.asymmetricr   cryptography.hazmat.primitivesr   binasciir   ranger%   r/   r'   rR   r   rd   rh   r   r   r   <module>rt      sv   
 + * * * * * * * * * $ $ $ $ $ $ $ $ $ $ $ $ / / / / / / 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8      (-b" % %*N*Nb"*N*N*N ' 'x, x, x, x, x, x, x, x,v    +       +     r   