wire_benchmark/
wire_benchmark.rs1use std::hint::black_box;
15use std::time::Instant;
16
17use ed25519_dalek::SigningKey;
18use libfcp_core::{AttemptId, Body, Envelope, FederationId, SigningIdentity, WebRtcBinding};
19use ml_dsa::{MlDsa65, SigningKey as MlDsaSigningKey, B32};
20
21const SAMPLES: usize = 20_000;
22
23fn signed_wire(body: Body) -> Vec<u8> {
24 let signer = SigningIdentity::new(
25 SigningKey::from_bytes(&[41; 32]),
26 MlDsaSigningKey::<MlDsa65>::from_seed(&B32::from([41; 32])),
27 );
28 let recipient = SigningIdentity::new(
29 SigningKey::from_bytes(&[42; 32]),
30 MlDsaSigningKey::<MlDsa65>::from_seed(&B32::from([42; 32])),
31 );
32 Envelope::sign(
33 &signer,
34 FederationId::from_bytes([1; 32]),
35 AttemptId::from_bytes([2; 16]),
36 recipient.endpoint(),
37 body,
38 )
39 .expect("bounded test envelope")
40 .encode()
41 .expect("canonical wire")
42}
43
44fn measure(name: &str, wire: &[u8]) {
45 let samples = u32::try_from(SAMPLES).expect("fixed sample count fits u32");
46 let start = Instant::now();
47 let mut total = 0_u32;
48 for _ in 0..samples {
49 let envelope = Envelope::decode_verified(black_box(wire)).expect("verified fixture");
50 let encoded = envelope.encode().expect("canonical re-encode");
51 let bytes = u32::try_from(encoded.len()).expect("bounded envelope fits u32");
52 total = total
53 .checked_add(bytes)
54 .expect("fixed benchmark byte count fits u32");
55 black_box(envelope);
56 }
57 let seconds = start.elapsed().as_secs_f64();
58 let envelopes_per_second = f64::from(samples) / seconds;
59 let mebibytes_per_second = f64::from(total) / (1024.0 * 1024.0) / seconds;
60 println!(
61 "{name}\twire_bytes={}\tsamples={SAMPLES}\tenvelopes_per_second={envelopes_per_second:.0}\tMiB_per_second={mebibytes_per_second:.2}",
62 wire.len()
63 );
64}
65
66fn main() {
67 let offer = signed_wire(Body::Offer {
68 binding: WebRtcBinding::derive(b"deterministic-offer", b"fingerprint"),
69 description: vec![0xA5; 1024],
70 });
71 let cfr_control = signed_wire(Body::CfrControl {
72 payload: vec![0x5A; 4096],
73 });
74
75 println!("fcp_wire_benchmark\tversion=1\tmode=release_expected");
76 measure("verified_offer", &offer);
77 measure("verified_cfr_control", &cfr_control);
78}