a °…b¦ã@sÈdZddlmZmZmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZddlmZdd lmZed d ƒ\ZZd d „ed d ƒDƒ\ZZGdd„dƒZGdd„deƒZGdd„deƒZdS)zQ Ephemeral Elliptic Curve Diffie-Hellman (ECDH) key exchange RFC 5656, Section 4 é)Úsha256Úsha384Úsha512)ÚMessage)Úbyte_chrÚlong)Ú SSHException)Údefault_backend)Úec)Ú serialization)Úhexlifyéé cCsg|] }t|ƒ‘qS©)r)Ú.0Úcrrú=/tmp/pip-target-98j97qn4/lib/python/paramiko/kex_ecdh_nist.pyÚ órc@sLeZdZdZeZe ¡Zdd„Z dd„Z dd„Z dd „Z d d „Z d d „ZdS)Ú KexNistp256zecdh-sha2-nistp256cCs ||_tdƒ|_d|_d|_dS)Nr)Ú transportrÚPÚQ_CÚQ_S)ÚselfrrrrÚ__init__s zKexNistp256.__init__cCsh| ¡|jjr |j t¡dStƒ}| t¡| |j   t j j t jj¡¡|j |¡|j t¡dS©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ÚmrrrÚ start_kex s  þÿ zKexNistp256.start_kexcCsF|jjr|tkr| |¡S|jjs4|tkr4| |¡Std |¡ƒ‚dS)Nz(KexECDH asked to handle packet type {:d})rrrÚ_parse_kexecdh_initr)Ú_parse_kexecdh_replyrÚformat)rÚptyper*rrrÚ parse_next1s  ÿzKexNistp256.parse_nextcCs:t |jtƒ¡|_|jjr*|j ¡|_dS|j ¡|_ dSr) r Zgenerate_private_keyÚcurver rrrZ public_keyrr)rrrrr:s  zKexNistp256._generate_key_paircCs>| ¡}tj |j|¡|_|j ¡ ¡}|j   t  ¡|j¡}t t |ƒdƒ}tƒ}| |jj|jj|jj|jj¡| |¡| |¡| |j tjjtjj¡¡| t |ƒ¡| | ¡¡ ¡}|j ||¡|j ¡  ||jj!¡}tƒ}| "t#¡| |¡| |j tjjtjj¡¡| |¡|j $|¡|j %¡dS©Né)&Ú get_stringr ÚEllipticCurvePublicKeyÚfrom_encoded_pointr1rrZget_server_keyÚasbytesrÚexchangeÚECDHrr rÚaddÚremote_versionÚ local_versionÚremote_kex_initÚlocal_kex_initr"rr#r r$r%r&r'Ú add_mpintÚ hash_algoÚdigestÚ_set_K_HZ sign_ssh_dataZ host_key_typer Úc_MSG_KEXECDH_REPLYr(Ú_activate_outbound)rr*Z Q_C_bytesÚK_SÚKÚhmÚHÚsigrrrr,AsPÿü  þÿ ÿ  þÿ  zKexNistp256._parse_kexecdh_initcCsä| ¡}| ¡}tj |j|¡|_| ¡}|j t  ¡|j¡}t t |ƒdƒ}t ƒ}|  |jj|jj|jj|jj¡| |¡| |j tjjtjj¡¡| |¡| |¡|j || | ¡¡ ¡¡|j  ||¡|j !¡dSr2)"r4r r5r6r1rZ get_binaryrr8r9rr rr:rr<r;r>r=r"rr#r r$r%r&r'r?rBr@r7rAZ _verify_keyrD)rr*rEZ Q_S_bytesrIrFrGrrrr-ns6ÿü þÿ  z KexNistp256._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__Únamerr@r Z SECP256R1r1rr+r0rr,r-rrrrrs -rc@seZdZdZeZe ¡ZdS)Ú KexNistp384zecdh-sha2-nistp384N) rJrKrLrMrr@r Z SECP384R1r1rrrrrNŽsrNc@seZdZdZeZe ¡ZdS)Ú KexNistp521zecdh-sha2-nistp521N) rJrKrLrMrr@r Z SECP521R1r1rrrrrO”srON)Ú__doc__ÚhashlibrrrZparamiko.messagerZparamiko.py3compatrrZparamiko.ssh_exceptionrZcryptography.hazmat.backendsr Z)cryptography.hazmat.primitives.asymmetricr Zcryptography.hazmat.primitivesr Úbinasciir Úrangerr)r!rCrrNrOrrrrÚs      {