- vendor orlp/ed25519 (lib/ed25519, MIT — the exact lib MeshCore uses) for
Curve25519 ECDH key exchange; switch identity/advert signing to it (same
seed -> same pubkey, so peers still recognise us; sigs are byte-identical)
- store pubkeys from heard MeshCore adverts (contacts table) so a DM's
1-byte src_hash can be resolved to a full sender key
- decode PAYLOAD_TYPE_TXT_MSG: ECDH shared secret, HMAC-SHA256 MAC check,
AES-128-ECB decrypt, parse timestamp+text, drive the message modal
- verified end-to-end: real MeshCore node -> "hello from HP Pro Desk" decoded
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- MeshCore: fix PHY to live narrowband config (869.618/62.5/SF8/CR5),
read off the test node's SELF_INFO — old 869.525/250/SF11 heard nothing
- MeshCore: on-chip Ed25519 identity (rweather/Crypto, NVS-persisted) and
signed ADVERT TX (verified valid + received by a real node) — the bridge
now shows up as a MeshCore contact
- Meshtastic: send text messages (portnum 1) reusing the announce path
- serial TX console with per-network targeting ("T:hi" / bare = all)
- longer dwell (3000ms) to sit through flood-rebroadcast bursts
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add SSD1306 UI to the Phase 1 scanner: an animated acid smiley inside
expanding psychedelic rings, an 'RMC' (Reticulum/Meshtastic/meshCore)
strobe header, and three live network rows with per-network packet counts
and RX activity blips. Scan loop made non-blocking (millis-based dwell) so
the display animates smoothly (~20fps) while the radio rotates.
Honest note in-code: the single SX1262 is time-sliced across the three
PHYs (ARCHITECTURE.md §2); the UI shows all three armed but true concurrent
RX needs added radios (Phase 2). Pins U8g2 2.36.18.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First Phase 1 increment toward the single-device 3-in-1: one Heltec V3
(ESP32-S3 + single SX1262) rotating the radio through the Meshtastic /
MeshCore / Reticulum PHY presets, logging every raw packet it demodulates
per dwell window. No framing/crypto/bridge yet — proves the RX loop first.
Validated on hardware: radio.begin() clean, all three presets cycle, and
the Meshtastic window received live broadcast packets (-36..-41 dBm). The
single-radio time-multiplex premise (ARCHITECTURE.md §2) holds.
MeshCore sync word and Reticulum PHY are flagged placeholders in CONFIGS[].
Deps pinned (espressif32 7.0.1, RadioLib 7.7.1). Adds venv/pycache/storage
to .gitignore.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>