- Device key (DeviceSigner): Windows TPM via CNG with a DPAPI-sealed software
fallback, Linux Secret Service with a 0600 file fallback (warned in Settings),
macOS keychain for dev runs. The store used is recorded; no silent switching.
- SyncService (Tauri-free): server URL and pins, create account with the
server's setup code, sync after unlock/save/browser save, every 15 min while
unlocked and on demand, status events, integrity alarm, device list with
fingerprint approval and revoke.
- Onboarding: "Use my phone" (join_start/poll, QR rendered locally, 6-digit
code), Emergency Kit from PDF/PNG/JPEG (hayro + rqrr), paste setup code, new
account. Then only the master password.
- From a signed-in desktop: "Add a phone or tablet" QR with countdown (cancel,
lock and quit revoke the ticket) and "Approve a computer" via pasted join code.
- KESTROVE_DATA_DIR / KESTROVE_DEVICE_NAME for a second instance; ignored
live test drives three instances against a real server.
- deny: ignore three unmaintained notices for zbus 5 sub-crates (Linux keyring).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The old workflow was invalid YAML (unquoted ${{ }} in a flow mapping) and never ran.
deny.toml: allows BSL-1.0 (arboard's Windows deps) and CDLA-Permissive-2.0
(webpki-roots); ignores three unmaintained-crate notices for build-time proc-macros
(uniffi 0.28, glib-macros 0.18) that need upstream upgrades.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
src-tauri/fuzz: nmh_session drives a whole kestrove-nmh connection through
Broker::serve (framing, outer JSON, pair_init/pair_confirm/open/msg); frame_read
checks read_frame. 8 min each (2.5 M / 2.7 M execs): no findings.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Builds and runs (tauri build --debug); placeholder icons; persistent VaultCore::open in the
OS app-data dir; Secret Key remembered on the device; tray keeps the app serving the extension.
- Auto-lock: idle (system idle on Windows/macOS, in-app activity on Linux), screen lock, sleep.
- Local IPC for kestrove-nmh: 0700 dir + 0600 Unix socket with peer-uid checks; Windows named
pipe (first instance, local only, user DACL, client SID check) behind cfg.
- Pairing channel: X25519 → HKDF → 6-word fingerprint confirmed in both UIs, per-connection
session keys, AES-256-GCM with strict counters. Test vectors shared with kestrove-browser.
- Broker: query/fill/totp/save with origin re-checks; pairing and save prompts in the UI.
- kestrove-nmh relays ciphertext only; native-host installers for Linux/macOS/Windows.
- Tests: unit tests, tests/nmh_stdio.rs (real kestrove-nmh over stdio), examples/test-host.
Co-Authored-By: Claude Opus 5.5 <[email protected]>