File: //usr/local/CyberCP/lib/python3.10/site-packages/paramiko/__pycache__/kex_ecdh_nist.cpython-310.pyc
o
�h� � @ s� d Z ddlmZmZmZ ddlmZ ddlmZ ddl m
Z
ddlmZ ddl
mZ ddlmZ dd lmZ ed
d�\ZZdd
� ed
d�D �\ZZG dd� d�ZG dd� de�ZG dd� de�ZdS )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 C s g | ]}t |��qS � r )�.0�cr r �I/usr/local/CyberCP/lib/python3.10/site-packages/paramiko/kex_ecdh_nist.py�
<listcomp> s r c @ sL e Zd ZdZeZe�� Zdd� Z dd� Z
dd� Zdd � Zd
d� Z
dd
� ZdS )�KexNistp256zecdh-sha2-nistp256c C s || _ d| _d | _d | _d S )Nr )� transport�P�Q_C�Q_S)�selfr r r r �__init__ s
zKexNistp256.__init__c C sh | � � | jjr| j�t� d S t� }|�t� |�| j �
tjj
tjj�� | 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 �mr r r � start_kex s
��zKexNistp256.start_kexc C sB | j jr
|tkr
| �|�S | j js|tkr| �|�S td�|���)Nz(KexECDH asked to handle packet type {:d})r r r �_parse_kexecdh_initr) �_parse_kexecdh_replyr �format)r �ptyper* r r r �
parse_next1 s
�zKexNistp256.parse_nextc C s: t �| jt� �| _| jjr| j�� | _d S | j�� | _ d S r )
r
�generate_private_key�curver r r r �
public_keyr r )r r r r r : s
zKexNistp256._generate_key_pairc C s> |� � }tj�| j|�| _| j�� �� }| j �
t�� | j�}tt
|�d�}t� }|�| jj| jj| jj| jj� |�|� |�|� |�| j�tjjtjj�� |�t|�� | �|�� ��� }| j�||� | j�� � || jj!�}t� }|�"t#� |�|� |�| j�tjjtjj�� |�|� | j�$|� | j�%� d S �N� )&�
get_stringr
�EllipticCurvePublicKey�from_encoded_pointr2 r r �get_server_key�asbytesr �exchange�ECDH�intr r �add�remote_version�
local_version�remote_kex_init�local_kex_initr"