Resolved comments
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[package]
|
[package]
|
||||||
name = "ctap2-fuzz"
|
name = "ctap2-fuzz"
|
||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
@@ -14,7 +13,7 @@ libfuzzer-sys = { version = "0.3"}
|
|||||||
arrayref = "0.3.6"
|
arrayref = "0.3.6"
|
||||||
libtock_drivers = { path = "../third_party/libtock-drivers" }
|
libtock_drivers = { path = "../third_party/libtock-drivers" }
|
||||||
crypto = { path = "../libraries/crypto", features = ['std'] }
|
crypto = { path = "../libraries/crypto", features = ['std'] }
|
||||||
cbor = { path = "../libraries/cbor"}
|
cbor = { path = "../libraries/cbor" }
|
||||||
|
|
||||||
[dependencies.ctap2]
|
[dependencies.ctap2]
|
||||||
path = ".."
|
path = ".."
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ const DUMMY_TIMESTAMP: Timestamp<isize> = Timestamp::from_ms(0);
|
|||||||
const PACKET_TYPE_MASK: u8 = 0x80;
|
const PACKET_TYPE_MASK: u8 = 0x80;
|
||||||
|
|
||||||
// Converts a byte slice into Message
|
// Converts a byte slice into Message
|
||||||
fn raw_to_message(data: &[u8], len: usize) -> Message {
|
fn raw_to_message(data: &[u8]) -> Message {
|
||||||
if len <= 4 {
|
if data.len() <= 4 {
|
||||||
let mut cid = [0; 4];
|
let mut cid = [0; 4];
|
||||||
cid[..len].copy_from_slice(data);
|
cid[..data.len()].copy_from_slice(data);
|
||||||
Message {
|
Message {
|
||||||
cid,
|
cid,
|
||||||
cmd: 0,
|
cmd: 0,
|
||||||
@@ -35,30 +35,18 @@ fn raw_to_message(data: &[u8], len: usize) -> Message {
|
|||||||
|
|
||||||
/* Fuzzing HID packets splitting and assembling functions*/
|
/* Fuzzing HID packets splitting and assembling functions*/
|
||||||
fuzz_target!(|data: &[u8]| {
|
fuzz_target!(|data: &[u8]| {
|
||||||
let Message {
|
let mut message = raw_to_message(data);
|
||||||
cid,
|
if let Some(hid_packet_iterator) = HidPacketIterator::new(message.clone()) {
|
||||||
mut cmd,
|
|
||||||
payload,
|
|
||||||
} = raw_to_message(data, data.len());
|
|
||||||
if let Some(hid_packet_iterator) = HidPacketIterator::new(Message {
|
|
||||||
cid,
|
|
||||||
cmd,
|
|
||||||
payload: payload.clone(),
|
|
||||||
}) {
|
|
||||||
let mut assembler = MessageAssembler::new();
|
let mut assembler = MessageAssembler::new();
|
||||||
let packets: Vec<HidPacket> = hid_packet_iterator.collect();
|
let packets: Vec<HidPacket> = hid_packet_iterator.collect();
|
||||||
if let Some((last_packet, first_packets)) = packets.split_last() {
|
if let Some((last_packet, first_packets)) = packets.split_last() {
|
||||||
for packet in first_packets {
|
for packet in first_packets {
|
||||||
assert_eq!(assembler.parse_packet(packet, DUMMY_TIMESTAMP), Ok(None));
|
assert_eq!(assembler.parse_packet(packet, DUMMY_TIMESTAMP), Ok(None));
|
||||||
}
|
}
|
||||||
cmd = cmd & !PACKET_TYPE_MASK;
|
message.cmd &= !PACKET_TYPE_MASK;
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
assembler.parse_packet(last_packet, DUMMY_TIMESTAMP),
|
assembler.parse_packet(last_packet, DUMMY_TIMESTAMP),
|
||||||
Ok(Some(Message {
|
Ok(Some(message.clone()))
|
||||||
cid,
|
|
||||||
cmd,
|
|
||||||
payload: payload.clone()
|
|
||||||
}))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user