use ssh_encoding::{self, CheckedSum, Decode, Encode, Reader, Writer};
use ssh_key::public::KeyData;
use crate::proto::{Error, Result};
#[derive(Clone, PartialEq, Debug)]
pub struct SignRequest {
pub pubkey: KeyData,
pub data: Vec<u8>,
pub flags: u32,
}
impl Decode for SignRequest {
type Error = Error;
fn decode(reader: &mut impl Reader) -> Result<Self> {
let pubkey = reader.read_prefixed(KeyData::decode)?;
let data = Vec::decode(reader)?;
let flags = u32::decode(reader)?;
Ok(Self {
pubkey,
data,
flags,
})
}
}
impl Encode for SignRequest {
fn encoded_len(&self) -> ssh_encoding::Result<usize> {
[
self.pubkey.encoded_len_prefixed()?,
self.data.encoded_len()?,
self.flags.encoded_len()?,
]
.checked_sum()
}
fn encode(&self, writer: &mut impl Writer) -> ssh_encoding::Result<()> {
self.pubkey.encode_prefixed(writer)?;
self.data.encode(writer)?;
self.flags.encode(writer)?;
Ok(())
}
}