U q`@sxddlZddlmZddlmZddlZddlmZddl m Z m Z m Z ddl mZddlmZmZGdd d e ZdS) N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b) SSHExceptionPasswordRequiredExceptionc@sZeZdZdZdddZddZddZd d Zd d Zd dZ ddZ ddZ 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}}|dkr&|dk r&t|}|dk rP|j|dddtj|}nH|dk rt|d}|d|\} }W5QRXn|dk r|d|\} }|s|r| ||}|dkr|dkrt 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-nv4zd3e_/lib/python/paramiko/ed25519key.py__init__*s,  zEd25519Key.__init__cCspddlm}t|}|tttkr.td|}|}|}| }|dkrl|sb|dkrtdn6|dkr|st dt|} | } | } ntd|dkr||j krtdg} 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_signrr2rr add_stringr3asbytes)rvmrrrr>s  zEd25519Key.asbytescCs(|r|jj}n|j}t||fSN)r<rr2rhashget_name)rr?rrr__hash__s zEd25519Key.__hash__cCsdSr;rrrrrrCszEd25519Key.get_namecCsdS)NrrErrrget_bitsszEd25519Key.get_bitscCs |jdk SrA)rrErrrr<szEd25519Key.can_signcCs(t}|d||j|j|Sr;)rr=rsign signature)rrr@rrr sign_ssh_datas zEd25519Key.sign_ssh_datacCsJ|dkrdSz|j||Wntjjk r@YdSXdSdS)Nr FT)r+rverifyrr exceptionsZBadSignatureError)rrr rrrverify_ssh_sigs zEd25519Key.verify_ssh_sig)NNNNN) __name__ __module__ __qualname____doc__rrr>rDrCrGr<rJrMrrrrr s ` r )r"Zcryptography.hazmat.backendsrZ&cryptography.hazmat.primitives.ciphersrZ nacl.signingrZparamiko.messagerZ paramiko.pkeyrrrZparamiko.py3compatrZparamiko.ssh_exceptionr r r rrrrs