summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--paramiko/client.py2
-rw-r--r--paramiko/ed25519key.py6
-rw-r--r--tests/test_client.py4
3 files changed, 10 insertions, 2 deletions
diff --git a/paramiko/client.py b/paramiko/client.py
index 25bbffd9..d76ca383 100644
--- a/paramiko/client.py
+++ b/paramiko/client.py
@@ -547,7 +547,7 @@ class SSHClient (ClosingContextManager):
if not two_factor:
for key_filename in key_filenames:
- for pkey_class in (RSAKey, DSSKey, ECDSAKey):
+ for pkey_class in (RSAKey, DSSKey, ECDSAKey, Ed25519Key):
try:
key = pkey_class.from_private_key_file(
key_filename, password)
diff --git a/paramiko/ed25519key.py b/paramiko/ed25519key.py
index 01abea97..2908ff5b 100644
--- a/paramiko/ed25519key.py
+++ b/paramiko/ed25519key.py
@@ -154,9 +154,13 @@ class Ed25519Key(PKey):
return signing_keys[0]
def asbytes(self):
+ if self.can_sign():
+ v = self._signing_key.verify_key
+ else:
+ v = self._verifying_key
m = Message()
m.add_string('ssh-ed25519')
- m.add_bytes(self._signing_key.verify_key.encode())
+ m.add_bytes(v.encode())
return m.asbytes()
def get_name(self):
diff --git a/tests/test_client.py b/tests/test_client.py
index 5f4f0dd5..eb6aa7b3 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -43,6 +43,7 @@ FINGERPRINTS = {
'ssh-dss': b'\x44\x78\xf0\xb9\xa2\x3c\xc5\x18\x20\x09\xff\x75\x5b\xc1\xd2\x6c',
'ssh-rsa': b'\x60\x73\x38\x44\xcb\x51\x86\x65\x7f\xde\xda\xa2\x2b\x5a\x57\xd5',
'ecdsa-sha2-nistp256': b'\x25\x19\xeb\x55\xe6\xa1\x47\xff\x4f\x38\xd2\x75\x6f\xa5\xd5\x60',
+ 'ssh-ed25519': b'\x1d\xf3\xefoj\x95\x99\xb7\xedq\x7f&\xba\xb0CD',
}
@@ -194,6 +195,9 @@ class SSHClientTest (unittest.TestCase):
"""
self._test_connection(key_filename=test_path('test_ecdsa_256.key'))
+ def test_client_ed25519(self):
+ self._test_connection(key_filename=test_path('test_ed25519.key'))
+
def test_3_multiple_key_files(self):
"""
verify that SSHClient accepts and tries multiple key files.