Files
fips/testing/nat/scripts
Johnathan Corgan 2236371537 fix(nostr): stop signing traversal deletion requests with the routing key
After a traversal attempt, both sides published a NIP-09 deletion request
signed by the node's routing key and naming the attempt's offer and answer
wraps. Each request put the node's public identity next to the ids of its
traversal signals on every relay it reached, which the one-time signing keys
on the wraps are meant to avoid.

What the requests deleted differed by side. A relay honouring NIP-59 deletes
a gift wrap when the request is signed by the wrap's p-tagged recipient, so
the initiator's request, sent after a successful punch, did delete the answer
wrap addressed to it; strfry in the NAT lab logged that deletion. The offer
it also named is addressed to the responder, and the responder's requests
named only the answer it had sent to the initiator, so those deleted
nothing.

Drop all three traversal calls (the initiator after a punch, the responder
on refusing an offer, and the responder after its punch attempt), and accept
that an answer wrap now stays on a relay that stores it until its NIP-40
expiration. The wraps are ephemeral kinds, so relays that do not store
ephemeral events never held them. The advertisement retraction keeps its
deletion request, since it names an event the routing key signed itself.
The signal envelope's event id had no other reader and is removed with its
import.

The NAT lab now asserts that its relay holds no kind 5 event after the cone,
symmetric and lan scenarios, scanning the relay's own store and failing if
the scan cannot run or be parsed. Before the fix each scenario failed it:
cone and lan held two requests (the initiator's naming offer and answer, the
responder's naming the answer) and symmetric held the responder's one. After
it, all three held none. The responder's refusal path is not reached by any
lab scenario and is covered by reading only.
2026-09-19 09:11:46 +00:00
..