The project evaluates the same PQC-secured request/response protocol over several transport implementations. The important design point is that the cryptographic protocol is kept stable while the packet I/O path changes.
Client benchmark
|
| Four-message PQC handshake
v
Transport backend
|
| Linux TCP/UDP, packet_mmap, XDP/AF_XDP, DPDK, F-Stack, mTCP, Seastar
v
Server endpoint
|
| AES-256-GCM encrypted request/response data path
v
Metrics and logs
The diagram used in the README is stored at ../figures/architecture_diagram.png.
The handshake has four messages:
CLIENT_HELLO: client nonce, ephemeral KEM public key, certificate/signature material.SERVER_HELLO: server nonce, ephemeral KEM public key, certificate/signature material bound to the client transcript.CLIENT_KEM: client encapsulation to the server KEM key, signed over the transcript.SERVER_KEM: server encapsulation to the client KEM key, signed over the transcript.
Both sides derive client and server write keys plus IVs from the two KEM shared secrets and the complete transcript. The data plane uses AES-256-GCM with sequence-number-derived nonces and AAD that binds direction and sequence number.
| Family | Directories | Kernel involvement |
|---|---|---|
| Linux socket baselines | experiments/default_sockets, experiments/udp_linux |
Full kernel networking stack |
| AF_PACKET / packet_mmap | experiments/packet_mmap, experiments/packet_mmap_v3, experiments/zerocopy_mmap, experiments/zerocopy_mmap_v3 |
Kernel packet path with memory-mapped receive rings |
| eBPF/XDP | experiments/ebpf_xdp |
XDP program redirects selected traffic to AF_XDP |
| Raw DPDK | experiments/dpdk |
Full userspace packet I/O, UDP framing and fragmentation |
| Userspace TCP over DPDK | experiments/fstack-dpdk, experiments/mtcp-dpdk, experiments/seastar-dpdk |
TCP stack runs in userspace |
| Additional dataplane prototypes | experiments/ix-dpdk, experiments/netmap_generic |
Userspace dataplane experiments |
The benchmark layer records:
- Per-phase handshake timing.
- CPU cycle counters via Linux
perf_event_openwhen available. - Context switches, page faults, CPU time, and RSS.
- Interface-level PPS and Mbps logs.
- Message timing breakdown for established encrypted sessions.
The final summary is generated from raw artifacts by ../scripts/analyze_results.py.
See backend_matrix.md for a backend-by-backend implementation and result coverage table.