U
vf! @ sx d dl Z d dlmZ d dlmZ d dlZd dlmZ d dl m
Z
mZmZ d dl
mZ d dlmZmZ G dd d e
ZdS )
N)default_backend)Cipher)Message)PKeyOPENSSH_AUTH_MAGIC_unpad_openssh)b)SSHExceptionPasswordRequiredExceptionc @ sd e Zd ZdZdZdddZdd Zdd Zed
d Z dd
Z
dd Zdd ZdddZ
dd ZdS )
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.
zssh-ed25519Nc
C s d | _ d }}|d kr&|d k r&t|}|d k rR| j|| jdd tj| }nH|d k rt|d}| d|\} }W 5 Q R X n|d k r| d|\} }|s|r|
||}|d kr|d krtd|| _|| _
d S )Nz ssh-ed25519-cert-v01@openssh.com)msgZkey_typeZ cert_typerZOPENSSHz
need a key)Zpublic_blobr Z_check_type_and_load_certnamenaclsigningZ VerifyKey
get_binaryopenZ_read_private_key_parse_signing_key_data
ValueError_signing_key_verifying_key)
selfr datafilenamepasswordZfile_objZ
verifying_keysigning_keyfZpkformat r D/opt/alt/python38/lib/python3.8/site-packages/paramiko/ed25519key.py__init__, s, zEd25519Key.__init__c C st ddl m} t|}|tttkr.td| }| }| }| }|dkrl|sb|dkrtdn6|dkr|st
dt|} | }
| }ntd|dkr||jkrtdg }t|D ]4}
t| }| | j
krtd|| q| }|dkr|}n||j| }tjt||
|d |d |d d
}t|d |d |d |d ||d d t d
}||| }tt|}| | krtdg }t|D ]}| | j
krtd| }| }tj|d d }|j | kr:|| kr:|dd ks@n t|| | qt|dkrltd|d S )Nr ) TransportzInvalid keynonebcryptzPrivate key file is encryptedzkey-sizez
block-sizeT)r saltZdesired_key_bytesroundsZignore_few_roundsclassmode)backend )Zparamiko.transportr r get_byteslenr r get_textr Zget_intr
Z_cipher_inforanger appendr" kdfr r r decryptorupdatefinalizer r r Z
SigningKey
verify_keyencodeAssertionError)r r r r messageZ
ciphernameZkdfnameZ
kdfoptionsZnum_keysr/ Zbcrypt_saltZ
bcrypt_roundsZpublic_keys_ZpubkeyZprivate_ciphertextZprivate_datacipherkeyr0 Zsigning_keysipublicZkey_datar r r r r I s
z"Ed25519Key._parse_signing_key_datac C s@ | r| jj}n| j}t }|| j || | S N) can_signr r3 r r
add_stringr r4 asbytes)r vmr r r r? s
zEd25519Key.asbytesc C s$ | r| jj}n| j}| |fS r<