aboutsummaryrefslogtreecommitdiffstats
path: root/tests/check.py
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-28 19:42:27 +0100
committereunhhu <[email protected]>2026-09-28 19:42:27 +0100
commit3308de49adfdb2a55c646e6b675da998f2c36900 (patch)
tree6548fc239b9f0ab8aabd32747fbaae0fd5517e44 /tests/check.py
parent63cc9554f2cd93e46d0413a21cbce05014e2f2b3 (diff)
downloadpure-3308de49adfdb2a55c646e6b675da998f2c36900.tar.gz
pure-3308de49adfdb2a55c646e6b675da998f2c36900.zip
Remember each sender's secret beside the node's key: no X25519 at restart
A listener lets a quiet sender's secret go with its active state, so a node started again made one X25519 for every sender that came back (169 us on this Pi, most of a wake's CPU): asymmetric work in proportion to the links, which design 011 counts as a reason to design again. The secret is now remembered in a file beside the key (KEY.links, 0600, begun again for another node's key): a place of 64 bytes a sender in the order allowed, mapped, so a sender at rest takes no memory for it. A place is the first 28 bytes of the sender's key, a check (FNV-1a of the key and the secret) and the secret, written secret first and key last; a place whose check fails is made again. The UDP link checks see a receiver started again make no X25519.
Diffstat (limited to 'tests/check.py')
-rw-r--r--tests/check.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/tests/check.py b/tests/check.py
index e46622b..7be32d7 100644
--- a/tests/check.py
+++ b/tests/check.py
@@ -784,7 +784,9 @@ def server_links_udp(aup, pure, work, netem=None):
delays, loses and reorders packets meanwhile. The receiver takes its
senders from a file (--senders, the sender among a thousand others) and
lets a sender's keys and streams go after 400 ms of quiet
- (--link-idle-ms): the order after a longer pause arrives all the same."""
+ (--link-idle-ms): the order after a longer pause arrives all the same.
+ Started again, it makes no X25519: the secret is remembered beside its
+ key (KEY.links)."""
import select
import signal
import socket
@@ -903,11 +905,14 @@ def server_links_udp(aup, pure, work, netem=None):
_, error = process.communicate(timeout=30)
assert process.returncode == 0, error[-1000:]
stats[name] = [json.loads(line) for line in error.decode().splitlines() if line.startswith('{"active"')][-1]
+ # The receiver, started again, remembered the sender's secret: no X25519 for it.
assert stats['b']['listener_swept'] >= 1 and stats['b']['listener_woken'] >= 2, stats['b']
+ assert stats['b']['listener_remembered'] == stats['b']['listener_woken'], stats['b']
return {'orders': sent, 'acknowledged_total': sum(acknowledged),
'packets_after_restart': stats['a']['link_packets'], 'resent_after_restart': stats['a']['link_resent'],
'lost_after_restart': stats['a']['link_lost'], 'received_after_restart': stats['b']['listener_received'],
- 'woken_after_restart': stats['b']['listener_woken'], 'swept_after_restart': stats['b']['listener_swept']}
+ 'woken_after_restart': stats['b']['listener_woken'], 'swept_after_restart': stats['b']['listener_swept'],
+ 'remembered_after_restart': stats['b']['listener_remembered']}
def server_links_udp_lossy(aup, pure, work):