diff --git a/Cargo.lock b/Cargo.lock index 5308d44..44e4d94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -123,9 +123,12 @@ checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cc" -version = "1.1.8" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" +checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -321,7 +324,7 @@ dependencies = [ ] [[package]] -name = "fakessh" +name = "fakesshd" version = "0.1.0" dependencies = [ "eyre", @@ -503,9 +506,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", @@ -831,9 +834,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed" dependencies = [ "itoa", "memchr", @@ -861,6 +864,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" diff --git a/Cargo.toml b/Cargo.toml index 19a02f1..00f96e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,17 +1,3 @@ [workspace] -members = ["ssh-connection", "ssh-protocol", "ssh-transport"] - -[package] -name = "fakessh" -version = "0.1.0" -edition = "2021" - -[dependencies] -eyre = "0.6.12" -hex-literal = "0.4.1" -rand = "0.8.5" -ssh-protocol = { path = "./ssh-protocol" } - -tokio = { version = "1.39.2", features = ["full"] } -tracing = "0.1.40" -tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } +members = ["fakesshd", "ssh-connection", "ssh-protocol", "ssh-transport"] +resolver = "2" diff --git a/fakesshd/Cargo.toml b/fakesshd/Cargo.toml new file mode 100644 index 0000000..9b11240 --- /dev/null +++ b/fakesshd/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "fakesshd" +version = "0.1.0" +edition = "2021" + +[dependencies] +eyre = "0.6.12" +hex-literal = "0.4.1" +rand = "0.8.5" +ssh-protocol = { path = "../ssh-protocol" } + +tokio = { version = "1.39.2", features = ["full"] } +tracing = "0.1.40" +tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } diff --git a/src/main.rs b/fakesshd/src/main.rs similarity index 100% rename from src/main.rs rename to fakesshd/src/main.rs diff --git a/ssh-transport/src/crypto/encrypt.rs b/ssh-transport/src/crypto/encrypt.rs index 2196b87..9d2392c 100644 --- a/ssh-transport/src/crypto/encrypt.rs +++ b/ssh-transport/src/crypto/encrypt.rs @@ -51,8 +51,14 @@ pub const ENC_AES128_CTR: EncryptionAlgorithm = EncryptionAlgorithm { let mut alg = Aes128Ctr::from_state(state); alg.decrypt_len(bytes, packet_number) }, - decrypt_packet: |state, bytes, packet_number| todo!(), - encrypt_packet: |state, packet, packet_number| todo!(), + decrypt_packet: |state, bytes, packet_number| { + let mut state = Aes128Ctr::from_state(state); + state.decrypt_packet(bytes, packet_number) + }, + encrypt_packet: |state, packet, packet_number| { + let mut state = Aes128Ctr::from_state(state); + state.encrypt_packet(packet, packet_number) + }, }; /// `chacha20-poly1305@openssh.com` uses a 64-bit nonce, not the 96-bit one in the IETF version. @@ -229,21 +235,19 @@ impl<'a> Aes256GcmOpenSsh<'a> { } struct Aes128Ctr { - key: ctr::Ctr128BE, + _key: ctr::Ctr128BE, } impl Aes128Ctr { - fn from_state(keys: &mut [u8]) -> Self { + fn from_state(_keys: &mut [u8]) -> Self { todo!() } - fn decrypt_len(&mut self, _: &mut [u8], _: u64) { - - } + fn decrypt_len(&mut self, _: &mut [u8], _: u64) {} - fn decrypt_packet(&mut self, mut bytes: RawPacket, _packet_number: u64) -> Result { + fn decrypt_packet(&mut self, _bytes: RawPacket, _packet_number: u64) -> Result { todo!() } - fn encrypt_packet(&mut self, packet: Packet, _packet_number: u64) -> EncryptedPacket { + fn encrypt_packet(&mut self, _packet: Packet, _packet_number: u64) -> EncryptedPacket { todo!() } } diff --git a/ssh-transport/src/lib.rs b/ssh-transport/src/lib.rs index 9d1a4c3..48f6e44 100644 --- a/ssh-transport/src/lib.rs +++ b/ssh-transport/src/lib.rs @@ -196,18 +196,19 @@ impl ServerConnection { hostkey_algorithms.find(kex.server_host_key_algorithms.0)?; debug!(name = %server_host_key_algorithm.name(), "Using host key algorithm"); + // TODO: Implement aes128-ctr + let _ = crypto::encrypt::ENC_AES128_CTR; + let encryption_algorithms_client_to_server = AlgorithmNegotiation { supported: vec![ crypto::encrypt::CHACHA20POLY1305, crypto::encrypt::AES256_GCM, - // crypto::encrypt::ENC_AES128_CTR, ], }; let encryption_algorithms_server_to_client = AlgorithmNegotiation { supported: vec![ crypto::encrypt::CHACHA20POLY1305, crypto::encrypt::AES256_GCM, - // crypto::encrypt::ENC_AES128_CTR, ], };