Bump Vite 8, matrix-js-sdk, and related deps; fix immer/vanilla-extract imports for new majors. Replace blocking sync error dialog with background recovery on wake/offline, and disable Vite auto-open in dev. Add feature handoff documentation index.
2.8 KiB
2.8 KiB
E2E encryption & devices — handoff
Summary
End-to-end encryption support via matrix-js-sdk crypto store: device verification, cross-signing, secret storage, key backup/export, and session management. Critical for secure DM and encrypted rooms.
User-facing behavior
- Verify new logins / other sessions
- Export room keys backup (
paarrot-keys.txt) - Restore backup after verification
- View and rename devices; logout remote sessions
- Unverified sessions tab in sidebar
Architecture
secretStorageKeys.ts + cryptoCallbacks
Devices.tsx, Verification.tsx, LocalBackup.tsx
DeviceVerification.tsx — incoming verification
BackupRestore.tsx — auto restore on verify
useSecretStorage, useKeyBackup, useVerificationRequest hooks
Key files
| Path | Role |
|---|---|
cinny/src/client/secretStorageKeys.ts |
SSSS key handling |
cinny/src/app/features/settings/devices/Devices.tsx |
Device list |
cinny/src/app/features/settings/devices/Verification.tsx |
Verification UI |
cinny/src/app/features/settings/devices/LocalBackup.tsx |
Key export |
cinny/src/app/features/settings/devices/OtherDevices.tsx |
Remote sessions |
cinny/src/app/components/DeviceVerification.tsx |
Incoming verify modal |
cinny/src/app/components/BackupRestore.tsx |
Auto restore |
cinny/src/app/components/SecretStorage.tsx |
Passphrase setup |
cinny/src/app/hooks/useSecretStorage.ts |
Secret storage API |
cinny/src/app/hooks/useKeyBackup.ts |
Backup API |
cinny/src/app/pages/client/sidebar/UnverifiedTab.tsx |
Unverified badge |
Data model
| Store | Purpose |
|---|---|
| IndexedDB crypto | Olm account, Megolm sessions |
| SSSS | Cross-signing keys, backup key |
| Matrix account data | m.cross_signing.*, m.secret_storage.* |
Dependencies
- matrix-js-sdk crypto module
- Secure random / Web Crypto
Integration points
- matrix-client: crypto store init in initMatrix
- authentication: first login bootstrap
- user-settings: devices tab
Testing
Manual
- Login second device; verify via emoji/SAS from first.
- Export keys backup; file downloads.
- Encrypted room: send message; decrypt on other device.
- Logout remote session from devices list.
Automated
- None
Known issues & gotchas
handlingKeyConflictin initMatrix on duplicate device keys- Logout clears crypto store — must re-verify
- Backup passphrase loss = message history loss
Future work
- Dehydrated devices support
- Better recovery key UX
Related docs
Add your extra things here
- Local backup filename:
paarrot-keys.txtin LocalBackup.tsx ReceiveSelfDeviceVerificationroute component in Router.tsx