summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libssh2-sys/lib.rs6
-rw-r--r--src/knownhosts.rs6
-rw-r--r--src/lib.rs36
-rw-r--r--src/session.rs6
4 files changed, 43 insertions, 11 deletions
diff --git a/libssh2-sys/lib.rs b/libssh2-sys/lib.rs
index 5c2dea4..be9e8bf 100644
--- a/libssh2-sys/lib.rs
+++ b/libssh2-sys/lib.rs
@@ -33,6 +33,10 @@ pub const LIBSSH2_FLAG_COMPRESS: c_int = 2;
pub const LIBSSH2_HOSTKEY_TYPE_UNKNOWN: c_int = 0;
pub const LIBSSH2_HOSTKEY_TYPE_RSA: c_int = 1;
pub const LIBSSH2_HOSTKEY_TYPE_DSS: c_int = 2;
+pub const LIBSSH2_HOSTKEY_TYPE_ECDSA_256: c_int = 3;
+pub const LIBSSH2_HOSTKEY_TYPE_ECDSA_384: c_int = 4;
+pub const LIBSSH2_HOSTKEY_TYPE_ECDSA_521: c_int = 5;
+pub const LIBSSH2_HOSTKEY_TYPE_ED25519: c_int = 6;
pub const LIBSSH2_METHOD_KEX: c_int = 0;
pub const LIBSSH2_METHOD_HOSTKEY: c_int = 1;
@@ -120,6 +124,7 @@ pub const LIBSSH2_FX_LINK_LOOP: c_int = 21;
pub const LIBSSH2_HOSTKEY_HASH_MD5: c_int = 1;
pub const LIBSSH2_HOSTKEY_HASH_SHA1: c_int = 2;
+pub const LIBSSH2_HOSTKEY_HASH_SHA256: c_int = 3;
pub const LIBSSH2_KNOWNHOST_FILE_OPENSSH: c_int = 1;
@@ -139,6 +144,7 @@ pub const LIBSSH2_KNOWNHOST_KEY_SSHDSS: c_int = 3 << 18;
pub const LIBSSH2_KNOWNHOST_KEY_ECDSA_256: c_int = 4 << 18;
pub const LIBSSH2_KNOWNHOST_KEY_ECDSA_384: c_int = 5 << 18;
pub const LIBSSH2_KNOWNHOST_KEY_ECDSA_521: c_int = 6 << 18;
+pub const LIBSSH2_KNOWNHOST_KEY_ED25519: c_int = 7 << 18;
pub const LIBSSH2_KNOWNHOST_KEY_UNKNOWN: c_int = 15 << 18;
pub const LIBSSH2_FXF_READ: c_ulong = 0x00000001;
diff --git a/src/knownhosts.rs b/src/knownhosts.rs
index 4a6c78d..d5d93c5 100644
--- a/src/knownhosts.rs
+++ b/src/knownhosts.rs
@@ -39,11 +39,7 @@ use util::{self, Binding, SessionBinding};
///
/// println!("adding {} to the known hosts", host);
///
-/// known_hosts.add(host, key, host, match key_type {
-/// HostKeyType::Rsa => KnownHostKeyFormat::SshRsa,
-/// HostKeyType::Dss => KnownHostKeyFormat::SshDss,
-/// HostKeyType::Unknown => panic!("unknown type of key!"),
-/// }).unwrap();
+/// known_hosts.add(host, key, host, key_type.into()).unwrap();
/// known_hosts.write_file(&file, KnownHostFileKind::OpenSSH).unwrap();
/// }
/// ```
diff --git a/src/lib.rs b/src/lib.rs
index 1401a7b..cd98d1a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -199,11 +199,15 @@ pub enum DisconnectCode {
}
#[allow(missing_docs)]
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, Debug)]
pub enum HostKeyType {
Unknown = raw::LIBSSH2_HOSTKEY_TYPE_UNKNOWN as isize,
Rsa = raw::LIBSSH2_HOSTKEY_TYPE_RSA as isize,
Dss = raw::LIBSSH2_HOSTKEY_TYPE_DSS as isize,
+ Ecdsa256 = raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_256 as isize,
+ Ecdsa384 = raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_384 as isize,
+ Ecdsa521 = raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_521 as isize,
+ Ed255219 = raw::LIBSSH2_HOSTKEY_TYPE_ED25519 as isize,
}
#[allow(missing_docs)]
@@ -230,20 +234,21 @@ pub static FLUSH_ALL: i32 = -2;
pub static EXTENDED_DATA_STDERR: i32 = 1;
#[allow(missing_docs)]
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, Debug)]
pub enum HashType {
Md5 = raw::LIBSSH2_HOSTKEY_HASH_MD5 as isize,
- Sha1 = raw:: LIBSSH2_HOSTKEY_HASH_SHA1 as isize,
+ Sha1 = raw::LIBSSH2_HOSTKEY_HASH_SHA1 as isize,
+ Sha256 = raw::LIBSSH2_HOSTKEY_HASH_SHA256 as isize,
}
#[allow(missing_docs)]
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, Debug)]
pub enum KnownHostFileKind {
OpenSSH = raw::LIBSSH2_KNOWNHOST_FILE_OPENSSH as isize,
}
/// Possible results of a call to `KnownHosts::check`
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, Debug)]
pub enum CheckResult {
/// Hosts and keys match
Match = raw::LIBSSH2_KNOWNHOST_CHECK_MATCH as isize,
@@ -256,9 +261,28 @@ pub enum CheckResult {
}
#[allow(missing_docs)]
-#[derive(Copy, Clone)]
+#[derive(Copy, Clone, Debug)]
pub enum KnownHostKeyFormat {
+ Unknown = raw::LIBSSH2_KNOWNHOST_KEY_UNKNOWN as isize,
Rsa1 = raw::LIBSSH2_KNOWNHOST_KEY_RSA1 as isize,
SshRsa = raw::LIBSSH2_KNOWNHOST_KEY_SSHRSA as isize,
SshDss = raw::LIBSSH2_KNOWNHOST_KEY_SSHDSS as isize,
+ Ecdsa256 = raw::LIBSSH2_KNOWNHOST_KEY_ECDSA_256 as isize,
+ Ecdsa384 = raw::LIBSSH2_KNOWNHOST_KEY_ECDSA_384 as isize,
+ Ecdsa521 = raw::LIBSSH2_KNOWNHOST_KEY_ECDSA_521 as isize,
+ Ed255219 = raw::LIBSSH2_KNOWNHOST_KEY_ED25519 as isize,
+}
+
+impl From<HostKeyType> for KnownHostKeyFormat {
+ fn from(host_type: HostKeyType) -> KnownHostKeyFormat {
+ match host_type {
+ HostKeyType::Unknown => KnownHostKeyFormat::Unknown,
+ HostKeyType::Rsa => KnownHostKeyFormat::SshRsa,
+ HostKeyType::Dss => KnownHostKeyFormat::SshDss,
+ HostKeyType::Ecdsa256 => KnownHostKeyFormat::Ecdsa256,
+ HostKeyType::Ecdsa384 => KnownHostKeyFormat::Ecdsa384,
+ HostKeyType::Ecdsa521 => KnownHostKeyFormat::Ecdsa521,
+ HostKeyType::Ed255219 => KnownHostKeyFormat::Ed255219,
+ }
+ }
}
diff --git a/src/session.rs b/src/session.rs
index c9dd266..4465eb0 100644
--- a/src/session.rs
+++ b/src/session.rs
@@ -565,6 +565,11 @@ impl Session {
let kind = match kind {
raw::LIBSSH2_HOSTKEY_TYPE_RSA => HostKeyType::Rsa,
raw::LIBSSH2_HOSTKEY_TYPE_DSS => HostKeyType::Dss,
+ raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_256 => HostKeyType::Ecdsa256,
+ raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_384 => HostKeyType::Ecdsa384,
+ raw::LIBSSH2_HOSTKEY_TYPE_ECDSA_521 => HostKeyType::Ecdsa521,
+ raw::LIBSSH2_HOSTKEY_TYPE_ED25519 => HostKeyType::Ed255219,
+ raw::LIBSSH2_HOSTKEY_TYPE_UNKNOWN => HostKeyType::Unknown,
_ => HostKeyType::Unknown,
};
Some((data, kind))
@@ -579,6 +584,7 @@ impl Session {
let len = match hash {
HashType::Md5 => 16,
HashType::Sha1 => 20,
+ HashType::Sha256 => 32,
};
unsafe {
let ret = raw::libssh2_hostkey_hash(self.raw, hash as c_int);