RrdpsLeakage
Privacy amplification bounded by the packet length alone, no observable read
9/9 passed in 179ms
| Test | What it does | Result |
|---|---|---|
test_collective_bound_beats_the_original | rrdps_collective(l, 1) is exactly 1 at l = 2 and below both rrdps_leak(l, 1) and a whole bit at every longer train, Yin et al.'s corollary. | ✅ pass |
test_gllp_charges_each_photon_number | rrdps_gllp matches Eq. (13) summed out to four thousand photon numbers, including the thresholds past half the delays where it collapses onto the whole-key form. | ✅ pass |
test_leak_falls_with_train_length | rrdps_leak(l, 1) falls monotonically in l, is h2(1/1023) at l = 1024, and scales as log2(l)/l with no floor. | ✅ pass |
test_leak_has_no_channel_argument | Moving the bit error rate changes rrdps_rate only through qf_ech2(e)/l, never through privacy amplification. | ✅ pass |
test_leak_saturates_at_a_whole_bit | rrdps_leak is exactly one bit once the threshold reaches half the delays, and stays there past it. | ✅ pass |
test_phase_mixes_the_error_rates | rrdps_phase is the tagged share plus nu/(l - 1) on the rest, capped at one half. | ✅ pass |
test_source_tail_is_the_poisson_one | rrdps_src is the Poisson tail of the packet's own mean l*mu, not of mu. | ✅ pass |
test_tagging_reduces_to_the_leak | rrdps_tag passes the leakage bound through unchanged at a zero over-threshold probability, and charges a whole bit on a wholly tagged key. | ✅ pass |
test_three_published_forms_are_ordered | rrdps_gllp <= rrdps_tag <= h2(rrdps_phase) at every train length and threshold. | ✅ pass |