U
vù¾f” ã @ 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 úG/opt/alt/python38/lib/python3.8/site-packages/paramiko/kex_ecdh_nist.pyÚ
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_modeZ_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 sF | j jr|tkr| |¡S | j js4|tkr4| |¡S td |¡ƒ‚d S )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
Zgenerate_private_keyÚcurver r r r Z
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_pointr0 r r Zget_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&