From bec3621c73467d7b5bbd1246c10b23509e7f6364 Mon Sep 17 00:00:00 2001 From: Noratrieb <48135649+Noratrieb@users.noreply.github.com> Date: Fri, 9 Aug 2024 14:44:42 +0200 Subject: [PATCH] newkeys --- src/lib.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 3af5eeb..4a42238 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -57,6 +57,9 @@ enum ServerState { client_kexinit: Vec, server_kexinit: Vec, }, + NewKeys { + client_packet: PacketParser, + }, ServiceRequest {}, } @@ -274,13 +277,30 @@ impl ServerConnection { self.queue_msg(MsgKind::Packet(Packet { payload: packet.to_bytes(), })); + self.state = ServerState::NewKeys { + client_packet: PacketParser::new(), + }; + + Some(consumed) + } + None => None, + }, + ServerState::NewKeys { client_packet } => match client_packet.recv_bytes(bytes, ())? { + Some((consumed, data)) => { + if data.payload != &[Packet::SSH_MSG_NEWKEYS] { + return Err(client_error!("did not send SSH_MSG_NEWKEYS")); + } + + self.queue_msg(MsgKind::Packet(Packet { + payload: vec![Packet::SSH_MSG_NEWKEYS], + })); self.state = ServerState::ServiceRequest {}; Some(consumed) } None => None, }, - ServerState::ServiceRequest {} => todo!(), + ServerState::ServiceRequest {} => None, }; Ok(result) } @@ -319,6 +339,7 @@ struct Packet { } impl Packet { const SSH_MSG_KEXINIT: u8 = 20; + const SSH_MSG_NEWKEYS: u8 = 21; const SSH_MSG_KEXDH_INIT: u8 = 30; const SSH_MSG_KEXDH_REPLY: u8 = 31;