a b@sxddlZddlmZddlmZddlZddlmZddl m Z m Z m Z ddl mZddlmZmZGdd d e ZdS) N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b) SSHExceptionPasswordRequiredExceptionc@s`eZdZdZdddZddZddZed d Zd d Z d dZ ddZ dddZ ddZ dS) Ed25519Keya 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. Nc Csd|_d}}|dur&|dur&t|}|durP|j|dddtj|}n\|durt|d }|d|\} }Wdq1s0Yn|dur|d|\} }|s|r| ||}|dur|durt d||_ ||_ dS)N ssh-ed25519z ssh-ed25519-cert-v01@openssh.com)msgZkey_typeZ cert_typerZOPENSSHz need a key) Z public_blobrZ_check_type_and_load_certnaclsigningZ VerifyKey get_binaryopenZ_read_private_key_parse_signing_key_data ValueError _signing_key_verifying_key) selfr datafilenamepasswordZfile_objZ verifying_key signing_keyfZpkformatr:/tmp/pip-target-98j97qn4/lib/python/paramiko/ed25519key.py__init__*s, 0 zEd25519Key.__init__cCspddlm}t|}|tttkr.td|}|}|}| }|dkrl|sb|dkrtdn6|dkr|st dt|} | } | } ntd|dkr||j vrtdg} t |D]2} t|}|dkrtd| |q|}|dkr|}n||j |}tjt|| |d|d | d d }t|d |d|d|d ||ddtd}|||}tt|}| | krtdg}t |D]}|dkrtd|}|}tj|dd}|j|kr6| |kr6|ddks|r|jj}n|j}t}|d|||SNr )can_signrr3rr add_stringr4asbytes)rvmrrrr>s  zEd25519Key.asbytescCs$|r|jj}n|j}||fSN)r<rr3rget_name)rr?rrr_fieldss zEd25519Key._fieldscCsdSr;rrrrrrBszEd25519Key.get_namecCsdS)NrrDrrrget_bitsszEd25519Key.get_bitscCs |jduSrA)rrDrrrr<szEd25519Key.can_signcCs(t}|d||j|j|Sr;)rr=rsign signature)rr algorithmr@rrr sign_ssh_datas zEd25519Key.sign_ssh_datacCsH|dkrdSz|j||Wntjjy>YdS0dSdS)Nr FT)r,rverifyrr exceptionsZBadSignatureError)rrr rrrverify_ssh_sigs zEd25519Key.verify_ssh_sig)NNNNN)N)__name__ __module__ __qualname____doc__rrr>propertyrCrBrFr<rJrMrrrrr s `   r )r"Zcryptography.hazmat.backendsrZ&cryptography.hazmat.primitives.ciphersrZ nacl.signingrZparamiko.messagerZ paramiko.pkeyrrrZparamiko.py3compatrZparamiko.ssh_exceptionr r r rrrrs