U vf!@sxddlZddlmZddlmZddlZddlmZddl m Z m Z m Z ddl mZddlmZmZGdd d e ZdS) N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b) SSHExceptionPasswordRequiredExceptionc@sdeZdZdZdZdddZddZdd Zed d Z d d Z ddZ ddZ dddZ ddZdS) 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. z ssh-ed25519Nc Csd|_d}}|dkr&|dk r&t|}|dk rR|j||jddtj|}nH|dk rt|d}| d|\} }W5QRXn|dk r| d|\} }|s|r| ||}|dkr|dkrt d||_ ||_ dS)Nz ssh-ed25519-cert-v01@openssh.com)msgZkey_typeZ cert_typerZOPENSSHz need a key)Z public_blobrZ_check_type_and_load_certnamenaclsigningZ VerifyKey get_binaryopenZ_read_private_key_parse_signing_key_data ValueError _signing_key_verifying_key) selfr datafilenamepasswordZfile_objZ verifying_key signing_keyfZpkformatrD/opt/alt/python38/lib/python3.8/site-packages/paramiko/ed25519key.py__init__,s,  zEd25519Key.__init__cCstddlm}t|}|tttkr.td|}|}|}| }|dkrl|sb|dkrtdn6|dkr|st dt|} | } | } ntd|dkr||j krtdg} t |D]4} t|}||j krtd| |q|}|dkr|}n||j |}tjt|| |d|d| d d }t|d |d|d|d ||ddtd }|||}tt|}| | krtdg}t |D]}||j krtd|}|}tj|dd}|j|kr:| |kr:|ddks@nt|||qt|dkrltd|dS)Nr) Transportz Invalid keynonebcryptzPrivate key file is encryptedzkey-sizez block-sizeT)rsaltZdesired_key_bytesroundsZignore_few_roundsclassmode)backend )Zparamiko.transportr r get_byteslenrr get_textrZget_intr Z _cipher_inforangerappendr"kdfrrr decryptorupdatefinalizerrrZ SigningKey verify_keyencodeAssertionError)rrrr messageZ ciphernameZkdfnameZ kdfoptionsZnum_keysr/Z bcrypt_saltZ bcrypt_roundsZ public_keys_ZpubkeyZprivate_ciphertextZ private_datacipherkeyr0Z signing_keysipublicZkey_datarrrrrIs                 z"Ed25519Key._parse_signing_key_datacCs@|r|jj}n|j}t}||j|||SN) can_signrr3rr add_stringrr4asbytes)rvmrrrr?s  zEd25519Key.asbytescCs$|r|jj}n|j}||fSr<)r=rr3rget_name)rr@rrr_fieldss zEd25519Key._fieldscCs|jSr<)rrrrrrBszEd25519Key.get_namecCsdS)NrrDrrrget_bitsszEd25519Key.get_bitscCs |jdk Sr<)rrDrrrr=szEd25519Key.can_signcCs*t}||j||j|j|Sr<)rr>rrsign signature)rr algorithmrArrr sign_ssh_datas zEd25519Key.sign_ssh_datacCsL||jkrdSz|j||Wntjjk rBYdSXdSdS)NFT)r,rrverifyrr exceptionsZBadSignatureError)rrr rrrverify_ssh_sigszEd25519Key.verify_ssh_sig)NNNNN)N)__name__ __module__ __qualname____doc__rrrr?propertyrCrBrFr=rJrMrrrrr s"  `   r )r"Zcryptography.hazmat.backendsrZ&cryptography.hazmat.primitives.ciphersrZ nacl.signingrZparamiko.messagerZ paramiko.pkeyrrrZ paramiko.utilrZparamiko.ssh_exceptionr r r rrrrs