use crate::constants::msg::SSH_MSG_NEWKEYS;
use crate::types::Error;
use crate::types::Result;
use crate::wire::SshDecode;
use crate::wire::SshEncode;
pub struct Newkeys<'b> {
buffer: &'b [u8],
}
impl<'b> Newkeys<'b> {
pub fn new(mut buffer: &'b mut [u8]) -> Result<Self> {
buffer.write_byte(SSH_MSG_NEWKEYS, &mut 0)?;
Ok(Self { buffer })
}
pub fn from_bytes(buffer: &'b [u8]) -> Result<Self> {
let message = Self { buffer };
match message.message_code()? {
SSH_MSG_NEWKEYS => Ok(message),
code => Err(Error::UnexpectedMessage(code)),
}
}
pub fn message_code(&self) -> Result<u8> {
self.buffer.read_byte(&mut 0)
}
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use crate::msg::Newkeys;
use crate::wire::Packet;
#[rstest]
#[case("testdata/none-exec/06-server-newkeys.bin")]
fn read_works(#[case] packet_file: &str) {
let bytes = std::fs::read(packet_file).unwrap();
let packet = Packet::new(&bytes, 0);
let payload = packet.payload().unwrap();
let _message = Newkeys::from_bytes(payload).unwrap();
}
}