Skip to content

Commit

Permalink
Tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
larseggert committed Apr 11, 2024
1 parent a826a07 commit b5f35b2
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 7 deletions.
4 changes: 3 additions & 1 deletion fuzz/fuzz_targets/client_initial.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ fuzz_target!(|data: &[u8]| {

let mut client = default_client();
let ci = client.process(None, now()).dgram().expect("a datagram");
let (header, d_cid, s_cid, payload) = decode_initial_header(&ci, Role::Client);
let Some((header, d_cid, s_cid, payload)) = decode_initial_header(&ci, Role::Client) else {
return;
};
let (aead, hp) = initial_aead_and_hp(d_cid, Role::Client);
let (_, pn) = remove_header_protection(&hp, header, payload);

Expand Down
4 changes: 3 additions & 1 deletion fuzz/fuzz_targets/server_initial.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ fuzz_target!(|data: &[u8]| {
.dgram()
.expect("a datagram");

let (header, d_cid, s_cid, payload) = decode_initial_header(&si, Role::Server);
let Some((header, d_cid, s_cid, payload)) = decode_initial_header(&si, Role::Server) else {
return;
};
let (aead, hp) = initial_aead_and_hp(d_cid, Role::Server);
let (_, pn) = remove_header_protection(&hp, header, payload);

Expand Down
19 changes: 14 additions & 5 deletions fuzz/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,22 @@ use neqo_crypto::{
// Any token is thrown away.
#[must_use]
#[allow(clippy::missing_panics_doc)]
pub fn decode_initial_header(dgram: &Datagram, role: Role) -> (&[u8], &[u8], &[u8], &[u8]) {
#[allow(clippy::type_complexity)]
pub fn decode_initial_header(dgram: &Datagram, role: Role) -> Option<(&[u8], &[u8], &[u8], &[u8])> {
let mut dec = Decoder::new(&dgram[..]);
let type_and_ver = dec.decode(5).unwrap().to_vec();
// The client sets the QUIC bit, the server might not.
match role {
Role::Client => assert_eq!(type_and_ver[0] & 0xf0, 0xc0),
Role::Server => assert_eq!(type_and_ver[0] & 0xb0, 0x80),
Role::Client => {
if type_and_ver[0] & 0xf0 != 0xc0 {
return None;
}
}
Role::Server => {
if type_and_ver[0] & 0xb0 != 0x80 {
return None;
}
}
}
let dest_cid = dec.decode_vec(1).unwrap();
let src_cid = dec.decode_vec(1).unwrap();
Expand All @@ -40,12 +49,12 @@ pub fn decode_initial_header(dgram: &Datagram, role: Role) -> (&[u8], &[u8], &[u
// Need to read of the length separately so that we can find the packet number.
let payload_len = usize::try_from(dec.decode_varint().unwrap()).unwrap();
let pn_offset = dgram.len() - dec.remaining();
(
Some((
&dgram[..pn_offset],
dest_cid,
src_cid,
dec.decode(payload_len).unwrap(),
)
))
}

/// Generate an AEAD and header protection object for a client Initial.
Expand Down

0 comments on commit b5f35b2

Please sign in to comment.