use binrw::binrw;
use crate::arch;
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 1_u8)]
pub struct Disconnect<'b> {
pub reason: DisconnectReason,
pub description: arch::Utf8<'b>,
pub language: arch::Ascii<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big)]
pub enum DisconnectReason {
#[brw(magic = 1_u32)]
HostNotAllowedToConnect,
#[brw(magic = 2_u32)]
ProtocolError,
#[brw(magic = 3_u32)]
KeyExchangeFailed,
#[brw(magic = 4_u32)]
Reserved,
#[brw(magic = 5_u32)]
MacError,
#[brw(magic = 6_u32)]
CompressionError,
#[brw(magic = 7_u32)]
ServiceNotAvailable,
#[brw(magic = 8_u32)]
ProtocolVersionNotSupported,
#[brw(magic = 9_u32)]
HostKeyNotVerifiable,
#[brw(magic = 10_u32)]
ConnectionLost,
#[brw(magic = 11_u32)]
ByApplication,
#[brw(magic = 12_u32)]
TooManyConnections,
#[brw(magic = 13_u32)]
AuthCancelledByUser,
#[brw(magic = 14_u32)]
NoMoreAuthMethodsAvailable,
#[brw(magic = 15_u32)]
IllegalUserName,
Other(u32),
}
#[binrw]
#[derive(Debug, Default, Clone)]
#[brw(big, magic = 2_u8)]
pub struct Ignore<'b> {
pub data: arch::Bytes<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 3_u8)]
pub struct Unimplemented {
pub seq: u32,
}
#[binrw]
#[derive(Debug, Default, Clone)]
#[brw(big, magic = 4_u8)]
pub struct Debug<'b> {
pub always_display: arch::Bool,
pub message: arch::Utf8<'b>,
pub language: arch::Ascii<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 5_u8)]
pub struct ServiceRequest<'b> {
pub service_name: arch::Ascii<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 6_u8)]
pub struct ServiceAccept<'b> {
pub service_name: arch::Ascii<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 20_u8)]
pub struct KexInit<'b> {
pub cookie: [u8; 16],
pub kex_algorithms: arch::NameList<'b>,
pub server_host_key_algorithms: arch::NameList<'b>,
pub encryption_algorithms_client_to_server: arch::NameList<'b>,
pub encryption_algorithms_server_to_client: arch::NameList<'b>,
pub mac_algorithms_client_to_server: arch::NameList<'b>,
pub mac_algorithms_server_to_client: arch::NameList<'b>,
pub compression_algorithms_client_to_server: arch::NameList<'b>,
pub compression_algorithms_server_to_client: arch::NameList<'b>,
pub languages_client_to_server: arch::NameList<'b>,
pub languages_server_to_client: arch::NameList<'b>,
pub first_kex_packet_follows: arch::Bool,
#[bw(calc = 0)]
_reserved: u32,
}
#[binrw]
#[derive(Debug, Default, Clone)]
#[brw(big, magic = 21_u8)]
pub struct NewKeys;
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 30_u8)]
pub struct KexdhInit<'b> {
pub e: arch::MpInt<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 31_u8)]
pub struct KexdhReply<'b> {
pub k_s: arch::Bytes<'b>,
pub f: arch::MpInt<'b>,
pub signature: arch::Bytes<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 30_u8)]
pub struct KexEcdhInit<'b> {
pub q_c: arch::Bytes<'b>,
}
#[binrw]
#[derive(Debug, Clone)]
#[brw(big, magic = 31_u8)]
pub struct KexEcdhReply<'b> {
pub k_s: arch::Bytes<'b>,
pub q_s: arch::Bytes<'b>,
pub signature: arch::Bytes<'b>,
}