U ¨Ãq`3ã@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-nv4zd3e_/lib/python/paramiko/kex_curve25519.pyÚ src@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 ¡Wntk r"YdSXdSdS)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  ¡ |¡} 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_datar Ú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  ¡dSr1)r3Z get_binaryrr4rr r5r6rr7rr9r8r;r:r"rr#r$rr%r&r'r=r@r>r<r?Z _verify_keyrB)rr*Zpeer_host_key_bytesrCrGrrDrEr r rr-fs2  ü  ÿÿ  z"KexCurve25519._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__ÚhashlibÚsha256r>rÚ classmethodrrr+r0r,r-r r r rrs  !r)r5rKZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ0cryptography.hazmat.primitives.asymmetric.x25519rrZparamiko.messagerZparamiko.py3compatrr Zparamiko.ssh_exceptionr Úrangerr)r!rAÚobjectrr r r rÚs