a °…bgã@sžddlZddlZddlmZddlmZmZddlmZm Z ddl m Z ddl m Z mZddlmZedd ƒ\ZZd d „edd ƒDƒ\ZZGd d „d eƒZdS)éN)ÚUnsupportedAlgorithm)Ú constant_timeÚ serialization)ÚX25519PrivateKeyÚX25519PublicKey)ÚMessage)Úbyte_chrÚlong)Ú SSHExceptionéé cCsg|] }t|ƒ‘qS©)r)Ú.0Úcr r ú>/tmp/pip-target-98j97qn4/lib/python/paramiko/kex_curve25519.pyÚ órc@sNeZdZejZdd„Zedd„ƒZdd„Z dd„Z d d „Z d d „Z d d„Z dS)Ú KexCurve25519cCs||_d|_dS©N)Ú transportÚkey)Úselfrr r rÚ__init__szKexCurve25519.__init__cCs*z t ¡Wnty YdS0dSdS)NFT)rÚgenerater)Úclsr r rÚ is_availables   zKexCurve25519.is_availablecCs$|j |¡}t |d¡r tdƒ‚|S)Ns z.peer's curve25519 public value has wrong order)rZexchangerZbytes_eqr )rÚpeer_keyÚsecretr r rÚ_perform_exchange$s   ÿzKexCurve25519._perform_exchangecCsnt ¡|_|jjr"|j t¡dStƒ}| t ¡|  |j  ¡  t jjt jj¡¡|j |¡|j t¡dSr)rrrrÚ server_modeZ_expect_packetÚ_MSG_KEXECDH_INITrÚadd_byteÚc_MSG_KEXECDH_INITÚ add_stringÚ public_keyÚ public_bytesrÚEncodingÚRawÚ PublicFormatÚ _send_messageÚ_MSG_KEXECDH_REPLY)rÚmr r rÚ start_kex,s     ÿÿ zKexCurve25519.start_kexcCsF|jjr|tkr| |¡S|jjs4|tkr4| |¡Std |¡ƒ‚dS)Nz.KexCurve25519 asked to handle packet type {:d})rrr Ú_parse_kexecdh_initr*Ú_parse_kexecdh_replyr Úformat)rÚptyper+r r rÚ parse_next<s  ÿzKexCurve25519.parse_nextc Cs | ¡}t |¡}| |¡}tt |¡dƒ}tƒ}| |j j |j j |j j |j j ¡|j  ¡ ¡}|j ¡ tjjtjj¡}| |¡| |¡| |¡| |¡| | ¡¡ ¡}|j  ||¡|j  ¡ ||j j¡} tƒ}| t¡| |¡| |¡| | ¡|j   |¡|j  !¡dS©Né)"Ú get_stringrÚfrom_public_bytesrr ÚbinasciiÚhexlifyrÚaddrÚremote_versionÚ local_versionÚremote_kex_initÚlocal_kex_initZget_server_keyÚasbytesrr$r%rr&r'r(r#Ú add_mpintÚ hash_algoÚdigestÚ_set_K_HZ sign_ssh_dataZ host_key_typer!Úc_MSG_KEXECDH_REPLYr)Ú_activate_outbound) rr+Úpeer_key_bytesrÚKÚhmZserver_key_bytesZexchange_key_bytesÚHÚsigr r rr-Es>  ü  ÿ     ÿ     z!KexCurve25519._parse_kexecdh_initcCsØ| ¡}| ¡}| ¡}t |¡}| |¡}tt |¡dƒ}tƒ}|  |j j |j j |j j |j j¡| |¡| |j ¡ tjjtjj¡¡| |¡| |¡|j  || | ¡¡ ¡¡|j  ||¡|j  ¡dSr2)r4Z get_binaryrr5rr r6r7rr8rr:r9r<r;r#rr$r%rr&r'r(r>rAr?r=r@Z _verify_keyrC)rr+Zpeer_host_key_bytesrDrHrrErFr r rr.hs0  ü   ÿÿ  z"KexCurve25519._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__ÚhashlibÚsha256r?rÚ classmethodrrr,r1r-r.r r r rrs  #r)r6rLZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ0cryptography.hazmat.primitives.asymmetric.x25519rrZparamiko.messagerZparamiko.py3compatrr Zparamiko.ssh_exceptionr Úranger r*r"rBÚobjectrr r r rÚs