diff --git a/crates/tor-keymgr/src/key_type/ssh.rs b/crates/tor-keymgr/src/key_type/ssh.rs index ac0d1b27c..f80b9b868 100644 --- a/crates/tor-keymgr/src/key_type/ssh.rs +++ b/crates/tor-keymgr/src/key_type/ssh.rs @@ -241,6 +241,9 @@ mod tests { const OPENSSH_ED25519: &[u8] = include_bytes!("../../testdata/ed25519_openssh.private"); const OPENSSH_ED25519_BAD: &[u8] = include_bytes!("../../testdata/ed25519_openssh_bad.private"); const OPENSSH_DSA: &[u8] = include_bytes!("../../testdata/dsa_openssh.private"); + const OPENSSH_X25519: &[u8] = include_bytes!("../../testdata/x25519_openssh.private"); + const OPENSSH_X25519_UNKNOWN_ALGORITHM: &[u8] = + include_bytes!("../../testdata/x25519_openssh_unknown_algorithm.private"); #[test] fn wrong_key_type() { @@ -284,4 +287,31 @@ mod tests { assert!(erased_key.downcast::().is_ok()); } + + #[test] + fn x25519_key() { + let key_type = KeyType::X25519StaticSecret; + let key = UnparsedOpenSshKey::new(OPENSSH_X25519.into(), PathBuf::from("/dummy/path")); + let erased_key = key_type.parse_ssh_format_erased(key).unwrap(); + + assert!(erased_key.downcast::().is_ok()); + } + + #[test] + fn invalid_x25519_key() { + let key_type = KeyType::X25519StaticSecret; + let key = UnparsedOpenSshKey::new( + OPENSSH_X25519_UNKNOWN_ALGORITHM.into(), + PathBuf::from("/dummy/path"), + ); + let err = key_type + .parse_ssh_format_erased(key) + .map(|_| "") + .unwrap_err(); + + assert_eq!( + err.to_string(), + "Unexpected OpenSSH key type: wanted X25519, found pangolin@torproject.org" + ); + } } diff --git a/crates/tor-keymgr/testdata/x25519_openssh.private b/crates/tor-keymgr/testdata/x25519_openssh.private new file mode 100644 index 000000000..33552585f --- /dev/null +++ b/crates/tor-keymgr/testdata/x25519_openssh.private @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAPQAAABV4MjU1MT +lAdG9ycHJvamVjdC5vcmcAAAAgD3MDTeSLGUGD1Re2s6aF6g73KSyiteXjV1SL+pu6ASUA +AAB4wA/uXMAP7lwAAAAVeDI1NTE5QHRvcnByb2plY3Qub3JnAAAAIA9zA03kixlBg9UXtr +OmheoO9yksorXl41dUi/qbugElAAAAIDCADBQ5fbboMIMbmOgHMfHZEaIcdm0TF2Kt8bHc +pz5zAAAACHRlc3Qta2V5AQID +-----END OPENSSH PRIVATE KEY----- diff --git a/crates/tor-keymgr/testdata/x25519_openssh_unknown_algorithm.private b/crates/tor-keymgr/testdata/x25519_openssh_unknown_algorithm.private new file mode 100644 index 000000000..a048a9b70 --- /dev/null +++ b/crates/tor-keymgr/testdata/x25519_openssh_unknown_algorithm.private @@ -0,0 +1,7 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAPwAAABdwYW5nb2 +xpbkB0b3Jwcm9qZWN0Lm9yZwAAACBFTBevfAXZy6Ut6i9PSHeXHUpaJ6+NKabGzeoT6rFV +DgAAAHjiJEYk4iRGJAAAABdwYW5nb2xpbkB0b3Jwcm9qZWN0Lm9yZwAAACBFTBevfAXZy6 +Ut6i9PSHeXHUpaJ6+NKabGzeoT6rFVDgAAACBo1W5vk9S8KAG7icAnKfq0NasfGTLO2+MJ +ifSnMVvXSgAAAAh0ZXN0LWtleQE= +-----END OPENSSH PRIVATE KEY-----