U vù¾fTã@s˜ddlZddlZddlmZddlmZmZddlmZm Z ddl m Z ddl m Z ddlmZedd ƒ\ZZd d „edd ƒDƒ\ZZGd d „d ƒZdS)éN)ÚUnsupportedAlgorithm)Ú constant_timeÚ serialization)ÚX25519PrivateKeyÚX25519PublicKey)ÚMessage©Úbyte_chr)Ú SSHExceptionéé cCsg|] }t|ƒ‘qS©r)Ú.0Úcr r úH/opt/alt/python38/lib/python3.8/site-packages/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  ¡ ||j j¡} tƒ}| t¡| |¡| |¡| | ¡|j   |¡|j  !¡dS©Né)"Ú get_stringrÚfrom_public_bytesrÚintÚ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,EsB  ü ÿ     ÿ     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_binaryrr4rr5r6r7rr8rr:r9r<r;r"rr#r$rr%r&r'r>rAr?r=r@Z _verify_keyrC)rr*Zpeer_host_key_bytesrDrHrrErFr r rr-hs2  ü  ÿÿ  z"KexCurve25519._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__ÚhashlibÚsha256r?rÚ classmethodrrr+r0r,r-r r r rrs  #r)r6rLZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ0cryptography.hazmat.primitives.asymmetric.x25519rrZparamiko.messagerZparamiko.commonr Zparamiko.ssh_exceptionr Úrangerr)r!rBrr r r rÚs