ó Ú_e[c@s³ddlZddlmZddlmZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZdZd „Zd e fd „ƒYZdS( iÿÿÿÿN(tdefault_backend(tCipher(tMessage(tPKey(tb(t SSHExceptiontPasswordRequiredExceptionsopenssh-key-v1cCs„tj|dƒ}|dkr-tdƒ‚nxKtd|dƒD]6}tj|| ƒ||dkrAtdƒ‚qAqAW|| S(Niÿÿÿÿis Invalid keyi(tsixt indexbytesRtrange(tdatatpadding_lengthti((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pytunpad#s !t Ed25519KeycBsneZdZd d d d d d„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z RS( s Representation of an `Ed25519 `_ key. .. note:: Ed25519 key support was added to OpenSSH in version 6.5. .. versionadded:: 2.2 .. versionchanged:: 2.3 Added a ``file_obj`` parameter to match other key classes. c Cs5d|_d}}|dkr:|dk r:t|ƒ}n|dk r}|jd|ddddƒtjj|jƒƒ}nZ|dk r¶t|dƒ}|j d|ƒ}WdQXn!|dk r×|j d|ƒ}n|sã|rø|j ||ƒ}n|dkr|dkrt dƒ‚n||_ ||_ dS( Ntmsgtkey_types ssh-ed25519t cert_types ssh-ed25519-cert-v01@openssh.comtrtOPENSSHs need a key(tNonet public_blobRt_check_type_and_load_certtnacltsigningt VerifyKeyt get_binarytopent_read_private_keyt_parse_signing_key_datat ValueErrort _signing_keyt_verifying_key( tselfRR tfilenametpasswordtfile_objt verifying_keyt signing_keytf((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyt__init__;s*        c Csoddlm}t|ƒ}|jttƒƒtkrFtdƒ‚n|jƒ}|jƒ}|jƒ}|j ƒ}|dkr¦|s”|dkrútdƒ‚qúnT|dkrî|sÇt dƒ‚nt|ƒ} | jƒ} | j ƒ} n tdƒ‚|dkr$||j kr$tdƒ‚ng} xZt |ƒD]L} t|jƒƒ}|jƒdkrptdƒ‚n| j |jƒƒq7W|jƒ}|dkr¨|}n¤|j |}tjdt|ƒd | d |d |d d | dtƒ}t|d||d  ƒ|d||d ƒdtƒƒjƒ}|j|ƒ|jƒ}tt|ƒƒ}|j ƒ|j ƒkr…tdƒ‚ng}x¸t |ƒD]ª}|jƒdkr¿tdƒ‚n|jƒ}|jƒ}tjj|d ƒ}|jjƒ|ko | |ko |dkns+t‚|j |ƒ|jƒq˜Wt|ƒdkrgtdƒ‚n|dS(Niÿÿÿÿ(t Transports Invalid keytnonetbcryptsPrivate key file is encrypteds ssh-ed25519R#tsalttdesired_key_bytesskey-sizes block-sizetroundstignore_few_roundstclasstmodetbackendi ii(tparamiko.transportR)Rt get_bytestlentOPENSSH_AUTH_MAGICRtget_textRtget_intRt _cipher_infoR tappendR+tkdfRtTrueRRt decryptortupdatetfinalizeR RRt SigningKeyt verify_keytencodetAssertionError(R!R R#R)tmessaget ciphernametkdfnamet kdfoptionstnum_keysR;t bcrypt_saltt bcrypt_roundst public_keyst_tpubkeytprivate_ciphertextt private_datatciphertkeyR=t signing_keysR tpublictkey_dataR&((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyRWsv                    & cCsW|jƒr|jj}n |j}tƒ}|jdƒ|j|jƒƒ|jƒS(Ns ssh-ed25519(tcan_signRRAR Rt add_stringRBtasbytes(R!tvtm((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyRW´s    cCs:|jƒr|jj}n |j}t|jƒ|fƒS(N(RURRAR thashtget_name(R!RX((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyt__hash__¾s  cCsdS(Ns ssh-ed25519((R!((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyR[ÅscCsdS(Ni((R!((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pytget_bitsÈscCs |jdk S(N(RR(R!((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyRUËscCs6tƒ}|jdƒ|j|jj|ƒjƒ|S(Ns ssh-ed25519(RRVRtsignt signature(R!R RY((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyt sign_ssh_dataÎs  cCsV|jƒdkrtSy|jj||jƒƒWntjjk rMtSXtSdS(Ns ssh-ed25519( R7tFalseR tverifyRRt exceptionstBadSignatureErrorR<(R!R R((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pytverify_ssh_sigÔsN( t__name__t __module__t__doc__RR(RRWR\R[R]RUR`Re(((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyR0s    ]     (R+tcryptography.hazmat.backendsRt&cryptography.hazmat.primitives.ciphersRt nacl.signingRRtparamiko.messageRt paramiko.pkeyRtparamiko.py3compatRtparamiko.ssh_exceptionRRR6R R(((s7/tmp/pip-install-KP2Jbq/paramiko/paramiko/ed25519key.pyts