Use the browser bridge from kestrove-core; webpki security update
The broker, pairing channel, IPC and kestrove-nmh moved to kestrove-core so the macOS app serves the extension too (a Mac no longer needs this app). Old module paths are re-exports. rustls-webpki 0.103.16 and webpki-roots 1.0.10 (RUSTSEC-2026-0381/0382). Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
directly. The web UI only renders and never touches keys. macOS uses the native `kestrove-apple` app.
|
||||
|
||||
Also ships `kestrove-nmh`, the **native-messaging host** that bridges `kestrove-browser` to the app.
|
||||
On a Mac, the Kestrove Mac app serves the browser extension itself (Chrome, Edge, Brave, Vivaldi, Arc,
|
||||
Firefox), so this app isn't needed there; it still builds on macOS for development.
|
||||
|
||||
```bash
|
||||
# prerequisites: rustup, Node 20+, and Tauri's OS deps (https://tauri.app/start/prerequisites/)
|
||||
@@ -22,23 +24,27 @@ keeps working; Quit is in the tray menu.
|
||||
## Browser integration (docs/05)
|
||||
|
||||
```
|
||||
extension ─ native messaging (stdio) ─▶ kestrove-nmh ─ local IPC ─▶ app (src-tauri/src/broker.rs)
|
||||
extension ─ native messaging (stdio) ─▶ kestrove-nmh ─ local IPC ─▶ app (broker)
|
||||
└──────────── pairing channel: X25519 → 6 words → AES-256-GCM, end to end ───────────┘
|
||||
```
|
||||
|
||||
* **IPC** (`ipc.rs`): Unix socket `$XDG_RUNTIME_DIR/kestrove/nmh.sock` (macOS: the per-user temp
|
||||
The bridge is shared with the macOS app and lives in kestrove-core: `crates/kv-ipc` (framing, IPC),
|
||||
`crates/kv-nmh` (the host) and `kv-ffi`'s `browser-bridge` feature (`src/bridge/`: broker, pairing
|
||||
channel). This crate re-exports them under the old module names.
|
||||
|
||||
* **IPC** (`kv-ipc`): Unix socket `$XDG_RUNTIME_DIR/kestrove/nmh.sock` (macOS: the per-user temp
|
||||
dir), dir 0700, socket 0600, peer uid checked on both ends. Windows: `\\.\pipe\kestrove-nmh-<user>`,
|
||||
first instance only, local clients only, DACL for the current user, client token SID checked
|
||||
(compile-checked only). `KESTROVE_IPC_DIR` isolates an instance for tests.
|
||||
* **Pairing** (`channel.rs`, mirrored by kestrove-browser `src/channel.ts`, shared test vectors):
|
||||
* **Pairing** (`bridge/channel.rs`, mirrored by kestrove-browser `src/channel.ts`, shared test vectors):
|
||||
both UIs show 6 words; the user confirms in the app (needs an unlocked vault) and in the extension.
|
||||
Each connection derives a fresh session key from both sides' nonces; messages carry strict
|
||||
counters, so replay and reordering fail. `kestrove-nmh` only relays ciphertext.
|
||||
* **Protocol** (`broker.rs`): `query` → identities for the origin (`items_for_url`); `fill`/`totp`
|
||||
* **Protocol** (`bridge/broker.rs`): `query` → identities for the origin (`items_for_url`); `fill`/`totp`
|
||||
re-check that the item matches the origin and need an unlocked vault; `save` shows a prompt in
|
||||
the app (new login or password update).
|
||||
* **Native host manifests**: `native-messaging/install.sh` (Linux, macOS) and `install.ps1`
|
||||
(Windows, HKCU registry) fill in the host path and extension ids.
|
||||
* **Native host manifests**: `native-messaging/install.sh` (Linux; macOS for development only, the Mac
|
||||
app registers its own) and `install.ps1` (Windows, HKCU registry) fill in the host path and extension ids.
|
||||
* **Tests**: `cargo test` (unit tests + `tests/nmh_stdio.rs`, which drives the real `kestrove-nmh`
|
||||
over stdio through the paired channel). `examples/test-host.rs` is a headless, auto-approving
|
||||
stand-in for the app used by kestrove-browser's interop and Chrome end-to-end tests.
|
||||
|
||||
Reference in New Issue
Block a user