#include #include #include "packeteer/net/checksum.hpp" #include "packeteer/net/ipv4.hpp" using namespace packeteer::net; // internet_checksum() itself takes arbitrary bytes directly. The // verify_*_checksum_ipv4() wrappers additionally need two addresses, // so the first 8 bytes of input become src/dst and the rest is treated // as the header/segment/datagram under test - exercises the // pseudo-header construction (detail::build_ipv4_pseudo_header) along // with the checksum math itself. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { internet_checksum({data, size}); verify_ipv4_checksum({data, size}); if (size < 8) return 0; Ipv4Address src{{data[0], data[1], data[2], data[3]}}; Ipv4Address dst{{data[4], data[5], data[6], data[7]}}; std::span rest{data + 8, size - 8}; verify_tcp_checksum_ipv4(src, dst, rest); verify_udp_checksum_ipv4(src, dst, rest); return 0; }