mirror of
https://github.com/redstrate/Kawari.git
synced 2025-05-01 02:47:45 +00:00
Fix size of initalization encryption packet, start testing for that
This commit is contained in:
parent
632342c1f0
commit
7116389afe
2 changed files with 33 additions and 1 deletions
|
@ -38,6 +38,8 @@ async fn main() {
|
||||||
let n = read.read(&mut buf).await.expect("Failed to read data!");
|
let n = read.read(&mut buf).await.expect("Failed to read data!");
|
||||||
|
|
||||||
if n != 0 {
|
if n != 0 {
|
||||||
|
tracing::info!("read {} bytes", n);
|
||||||
|
|
||||||
let (segments, _) = parse_packet(&buf[..n], &mut state).await;
|
let (segments, _) = parse_packet(&buf[..n], &mut state).await;
|
||||||
for segment in &segments {
|
for segment in &segments {
|
||||||
match &segment.segment_type {
|
match &segment.segment_type {
|
||||||
|
|
|
@ -42,11 +42,13 @@ pub enum SegmentType {
|
||||||
#[brw(magic = 0x9u32)]
|
#[brw(magic = 0x9u32)]
|
||||||
InitializeEncryption {
|
InitializeEncryption {
|
||||||
#[brw(pad_before = 36)] // empty
|
#[brw(pad_before = 36)] // empty
|
||||||
#[br(count = 64)]
|
#[brw(pad_size_to = 32)]
|
||||||
|
#[br(count = 32)]
|
||||||
#[br(map = read_string)]
|
#[br(map = read_string)]
|
||||||
#[bw(ignore)]
|
#[bw(ignore)]
|
||||||
phrase: String,
|
phrase: String,
|
||||||
|
|
||||||
|
#[brw(pad_before = 32)]
|
||||||
#[brw(pad_after = 512)] // empty
|
#[brw(pad_after = 512)] // empty
|
||||||
key: [u8; 4],
|
key: [u8; 4],
|
||||||
},
|
},
|
||||||
|
@ -255,3 +257,31 @@ pub async fn send_keep_alive(
|
||||||
};
|
};
|
||||||
send_packet(socket, &[response_packet], state).await;
|
send_packet(socket, &[response_packet], state).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_packet_sizes() {
|
||||||
|
let packet_types = [SegmentType::InitializeEncryption {
|
||||||
|
phrase: String::new(),
|
||||||
|
key: [0; 4],
|
||||||
|
}];
|
||||||
|
|
||||||
|
for packet in &packet_types {
|
||||||
|
let mut cursor = Cursor::new(Vec::new());
|
||||||
|
|
||||||
|
let packet_segment = PacketSegment {
|
||||||
|
source_actor: 0,
|
||||||
|
target_actor: 0,
|
||||||
|
segment_type: packet.clone(),
|
||||||
|
};
|
||||||
|
packet_segment.write_le(&mut cursor).unwrap();
|
||||||
|
|
||||||
|
let buffer = cursor.into_inner();
|
||||||
|
|
||||||
|
assert_eq!(buffer.len(), packet_segment.calc_size() as usize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue