Skip to content
Open
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/quic/packet.zig
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,13 @@ pub fn decrypt(header: *Header, fbs: anytype, space: PacketNumSpace) ![]u8 {
// Skip the packet number bytes in the buffer
try fbs.seekBy(@intCast(header.packet_number_len));

if (header.remainder_len < header.packet_number_len) {
return error.InvalidPacket;
}
const payload_len = header.remainder_len - header.packet_number_len;
if (payload_len > (fbs.buffer.len - fbs.pos)) {
return error.InvalidPacket;
}

// RFC 9001 Section 5.2: AD includes the unprotected first byte and everything up to and including packet number
// For coalesced packets, use packet_start to get the correct offset within the buffer
Expand All @@ -387,7 +393,7 @@ pub fn decrypt(header: *Header, fbs: anytype, space: PacketNumSpace) ![]u8 {
// Copy the rest of the header and packet number (from byte after first to current position)
@memcpy(header_bytes_buf[1..][0..(header_len - 1)], fbs.buffer[(pkt_start + 1)..fbs.pos]);
const header_bytes = header_bytes_buf[0..header_len];
const encrypted_payload = fbs.buffer[(fbs.pos)..(fbs.pos + payload_len)];
const encrypted_payload = fbs.buffer[fbs.pos..(fbs.pos + payload_len)];

// Decode packet number
header.packet_number = decodePacketNumber(space.next_packet_number, truncated_packet_number, header.packet_number_len * 8);
Expand Down Expand Up @@ -457,7 +463,13 @@ pub fn decryptWithKeyUpdate(header: *Header, fbs: anytype, space: *PacketNumSpac

try fbs.seekBy(@intCast(header.packet_number_len));

if (header.remainder_len < header.packet_number_len) {
return error.InvalidPacket;
}
const payload_len = header.remainder_len - header.packet_number_len;
if (payload_len > (fbs.buffer.len - fbs.pos)) {
return error.InvalidPacket;
}

// Build associated data
const pkt_start = header.packet_start;
Expand All @@ -466,7 +478,7 @@ pub fn decryptWithKeyUpdate(header: *Header, fbs: anytype, space: *PacketNumSpac
header_bytes_buf[0] = first_byte;
@memcpy(header_bytes_buf[1..][0..(header_len - 1)], fbs.buffer[(pkt_start + 1)..fbs.pos]);
const header_bytes = header_bytes_buf[0..header_len];
const encrypted_payload = fbs.buffer[(fbs.pos)..(fbs.pos + payload_len)];
const encrypted_payload = fbs.buffer[fbs.pos..(fbs.pos + payload_len)];

// Decode packet number
header.packet_number = decodePacketNumber(space.next_packet_number, truncated_packet_number, header.packet_number_len * 8);
Expand Down
Loading