3 ›äL]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-install-wfra5znf/paramiko/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__c Cs*y tjƒWntk r dSXdSdS)NFT)rÚgenerater)Úclsr r rÚ is_availables  zKexCurve25519.is_availablecCs(|jj|ƒ}tj|ddƒr$tdƒ‚|S)Nór z.peer's curve25519 public value has wrong order)rZexchangerZbytes_eqr )rÚpeer_keyZsecretr r rÚ_perform_exchange$s  zKexCurve25519._perform_exchangecCsntjƒ|_|jjr"|jjtƒdStƒ}|jt ƒ|j |jj ƒj t jjt jjƒƒ|jj|ƒ|jjtƒdS)N)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_kexcCsH|jjr|tkr|j|ƒS|jj r6|tkr6|j|ƒStdj|ƒƒ‚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|jƒ}tj|ƒ}|j|ƒ}ttj|ƒdƒ}tƒ}|j|j j |j j |j j |j j ƒ|j jƒjƒ}|jjƒjtjjtjjƒ}|j|ƒ|j|ƒ|j|ƒ|j|ƒ|j|jƒƒjƒ}|j j||ƒ|j jƒj|ƒ} tƒ}|jtƒ|j|ƒ|j|ƒ|j| ƒ|j j|ƒ|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+Es6             z!KexCurve25519._parse_kexecdh_initcCsØ|jƒ}|jƒ}|jƒ}tj|ƒ}|j|ƒ}ttj|ƒdƒ}tƒ}|j |j j |j j |j j |j jƒ|j|ƒ|j|jjƒjtjjtjjƒƒ|j|ƒ|j|ƒ|j j||j|jƒƒjƒƒ|j j||ƒ|j jƒdS)Nr0)r1Z get_binaryrr2rr r3r4rr5rr7r6r9r8r!rr"r#rr$r%r&r;r>r<r:r=Z _verify_keyr@)rr)Zpeer_host_key_bytesrArErrBrCr r rr,fs*       z"KexCurve25519._parse_kexecdh_replyN)Ú__name__Ú __module__Ú __qualname__ÚhashlibÚsha256r<rÚ classmethodrrr*r/r+r,r r r rrs  !r)r3rIZcryptography.exceptionsrZcryptography.hazmat.primitivesrrZ0cryptography.hazmat.primitives.asymmetric.x25519rrZparamiko.messagerZparamiko.py3compatrr Zparamiko.ssh_exceptionr Úrangerr(r r?Úobjectrr r r rÚs