summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/knownhosts.rs6
-rw-r--r--src/lib.rs36
-rw-r--r--src/session.rs6
3 files changed, 37 insertions, 11 deletions
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);