This commit is contained in:
nora 2024-08-09 14:44:42 +02:00
parent 660fa8e10e
commit bec3621c73

View file

@ -57,6 +57,9 @@ enum ServerState {
client_kexinit: Vec<u8>, client_kexinit: Vec<u8>,
server_kexinit: Vec<u8>, server_kexinit: Vec<u8>,
}, },
NewKeys {
client_packet: PacketParser,
},
ServiceRequest {}, ServiceRequest {},
} }
@ -274,13 +277,30 @@ impl ServerConnection {
self.queue_msg(MsgKind::Packet(Packet { self.queue_msg(MsgKind::Packet(Packet {
payload: packet.to_bytes(), 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 {}; self.state = ServerState::ServiceRequest {};
Some(consumed) Some(consumed)
} }
None => None, None => None,
}, },
ServerState::ServiceRequest {} => todo!(), ServerState::ServiceRequest {} => None,
}; };
Ok(result) Ok(result)
} }
@ -319,6 +339,7 @@ struct Packet {
} }
impl Packet { impl Packet {
const SSH_MSG_KEXINIT: u8 = 20; const SSH_MSG_KEXINIT: u8 = 20;
const SSH_MSG_NEWKEYS: u8 = 21;
const SSH_MSG_KEXDH_INIT: u8 = 30; const SSH_MSG_KEXDH_INIT: u8 = 30;
const SSH_MSG_KEXDH_REPLY: u8 = 31; const SSH_MSG_KEXDH_REPLY: u8 = 31;