diff --git a/docs/plans/mesh-protocol-gaps.md b/docs/plans/mesh-protocol-gaps.md index d883f5d..614f826 100644 --- a/docs/plans/mesh-protocol-gaps.md +++ b/docs/plans/mesh-protocol-gaps.md @@ -13,9 +13,10 @@ QuicProChat has strong cryptography (MLS, PQ-KEM) but **real gaps** in the mesh | Gap | Severity | Status | |-----|----------|--------| -| MLS overhead too large for LoRa | **Critical** | **MEASURED** — see actual sizes below | +| MLS overhead too large for LoRa | **Critical** | **MEASURED** — classical MLS viable! | | No lightweight messaging mode | **High** | **DONE** — MLS-Lite implemented | -| KeyPackage distribution over mesh | **High** | Not solved | +| KeyPackage distribution over mesh | **High** | **DONE** — announce-based with cache | +| Transport capability negotiation | **High** | **DONE** — auto-selects crypto mode | | Announce/routing not battle-tested | **Medium** | S3-S4 done, needs real-world test | | No DTN bundle protocol integration | **Medium** | Priority field added | | Battery/duty-cycle optimization | **Medium** | Basic tracker exists | @@ -167,10 +168,12 @@ KeyPackage propagation: ### Action Items -- [ ] **Extend MeshAnnounce** with optional `keypackage_hash` field -- [ ] **Add KeyPackage request/response** to mesh protocol -- [ ] **Implement KeyPackage cache** in MeshStore (separate from message queue) +- [x] **Extend MeshAnnounce** with optional `keypackage_hash` field — 8-byte truncated hash +- [x] **Add KeyPackage request/response** to mesh protocol — `mesh_protocol.rs` +- [x] **Implement KeyPackage cache** — `keypackage_cache.rs` (separate from MeshStore) - [ ] **Design KeyPackage refresh protocol** for mesh-only scenarios +- [x] **Add transport capability negotiation** — `transport.rs` TransportCapability enum +- [x] **Add MLS-Lite upgrade path** — `crypto_negotiation.rs` --- diff --git a/docs/status.md b/docs/status.md index 724474d..dbc47aa 100644 --- a/docs/status.md +++ b/docs/status.md @@ -47,9 +47,23 @@ New `fapp_router.rs` module: --- -## 2026-03-30 — Implementation Sprint (S4-S5 + MLS-Lite) +## 2026-03-30 — Mesh Protocol Infrastructure Sprint -### Completed +### Completed (Latest) +- **KeyPackage distribution** — `keypackage_cache.rs` + `mesh_protocol.rs` + - MeshAnnounce extended with `keypackage_hash` field + - KeyPackageRequest/Response/Unavailable messages + - KeyPackageCache with TTL, per-address limits, LRU eviction +- **Transport capability negotiation** — `transport.rs` TransportCapability + - Auto-classification: Unconstrained/Medium/Constrained/SeverelyConstrained + - CryptoMode recommendation per capability level + - TransportManager.recommended_crypto(), select_for_size() +- **MLS-Lite upgrade path** — `crypto_negotiation.rs` + - GroupCryptoState tracks current mode + - MlsLiteBootstrap derives MLS-Lite keys from MLS epoch secret + - Enables same group to use full MLS on WiFi, MLS-Lite on LoRa + +### Previously Completed - **S4: Multi-hop routing** — `MeshRouter` with `send()`, `handle_incoming()`, `forward()`, `drain_store_for()` - **S4: REPL commands** — `/mesh trace
` and `/mesh stats` - **S5: Truncated addresses** — `MeshEnvelopeV2` with 16-byte addresses (~18% smaller)