tane/spike/block2_spike
vjrj 2cafc7fc12 spike(block2): de-risk NIP-17 messaging + validate shared-connection shape
Extends the Block 2 spike to attack the highest-risk unbuilt piece (private
messaging) and to prove the Q2 architecture recommendation with running code:

- NostrConnection: one shared socket+key+sign+REQ/EOSE lifecycle. Refactored
  NostrOfferTransport onto it; added NostrMessageTransport — two thin contracts
  on ONE connection (the 'one connection, three interfaces' shape).
- NIP-44 v2 encryption (secp256k1 ECDH -> ChaCha20 + HMAC, length-hiding pad).
- NIP-17/NIP-59 gift-wrap: rumor(14) -> seal(13) -> wrap(1059, ephemeral key).
  Alice->Bob DM round-trips through the relay: encrypted, sender authenticated,
  and metadata-private (relay/eavesdropper sees only ciphertext, an ephemeral
  author and the recipient p-tag — Alice stays hidden).

Findings updated: NIP-17 risk drops Medium-High -> Medium (hardening, not
feasibility); next de-risking target is the web of trust. NIP-44 not yet
vector-verified (noted). 20 tests green, analyzer clean, Block 1 untouched.
2026-07-10 02:11:54 +02:00
..
lib spike(block2): de-risk NIP-17 messaging + validate shared-connection shape 2026-07-10 02:11:54 +02:00
test spike(block2): de-risk NIP-17 messaging + validate shared-connection shape 2026-07-10 02:11:54 +02:00
.gitignore spike(block2): de-risk social layer — key derivation, OfferTransport, NIP-99 round-trip 2026-07-10 01:57:25 +02:00
pubspec.yaml spike(block2): de-risk NIP-17 messaging + validate shared-connection shape 2026-07-10 02:11:54 +02:00