U ¨Ãq`rã@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-nv4zd3e_/lib/python/paramiko/kex_ecdh_nist.pyÚ src@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_paircCs8| ¡}tj |j|¡|_|j ¡ ¡}|j   t  ¡|j¡}t t |ƒdƒ}tƒ}| |jj|jj|jj|jj¡| |¡| |¡| |j tjjtjj¡¡| t |ƒ¡| | ¡¡ ¡}|j ||¡|j ¡  |¡}tƒ}| !t"¡| |¡| |j tjjtjj¡¡| |¡|j #|¡|j $¡dS©Né)%Ú get_stringr ÚEllipticCurvePublicKeyÚfrom_encoded_pointr0rrZget_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_datarÚc_MSG_KEXECDH_REPLYr'Ú_activate_outbound)rr)Z Q_C_bytesÚK_SÚKÚhmÚHÚsigrrrr+AsNÿü  þÿ  þÿ  zKexNistp256._parse_kexecdh_initcCsä| ¡}| ¡}tj |j|¡|_| ¡}|j t  ¡|j¡}t t |ƒdƒ}t ƒ}|  |jj|jj|jj|jj¡| |¡| |j tjjtjj¡¡| |¡| |¡|j || | ¡¡ ¡¡|j  ||¡|j !¡dSr1)"r3r r4r5r0rZ get_binaryrr7r8rr rr9rr;r:r=r<r!rr"r r#r$r%r&r>rAr?r6r@Z _verify_keyrC)rr)rDZ Q_S_bytesrHrErFrrrr,ls8ÿü þÿ  z KexNistp256._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__Únamerr?r Z SECP256R1r0rr*r/rr+r,rrrrrs +rc@seZdZdZeZe ¡ZdS)Ú KexNistp384zecdh-sha2-nistp384N) rIrJrKrLrr?r Z SECP384R1r0rrrrrMŒsrMc@seZdZdZeZe ¡ZdS)Ú KexNistp521zecdh-sha2-nistp521N) rIrJrKrLrr?r Z SECP521R1r0rrrrrN’srNN)Ú__doc__ÚhashlibrrrZparamiko.messagerZparamiko.py3compatrrZparamiko.ssh_exceptionrZcryptography.hazmat.backendsr Z)cryptography.hazmat.primitives.asymmetricr Zcryptography.hazmat.primitivesr Úbinasciir Úrangerr(r rBrrMrNrrrrÚs      y