Root cause: when importing an encrypted sync code from another device, _decryptFromSync was replacing the local encryption config (salt) with the source device's salt. This caused: 1. Local key cache derived from wrong salt 2. Local data (encrypted with local salt) became unreadable 3. _applyData tried to write with the wrong key Fixed with a complete refactor of cross-device decryption: - authenticateForSync() derives a TEMPORARY key using the source salt - Temporary key stored separately as 'tempSyncKey' in IndexedDB - Local encryption config and cached key are NEVER modified - After decryption, _applyData writes via _writeSecure using the LOCAL key (which uses the local salt) - _handleDecryptedMeta extracted for code reuse Also: - Options.js auth handler detects pending sync import and routes to authenticateForSync instead of regular authenticate - After auth success, automatically retries the import - README updated: imported passwords are protected (dots in UI, vault password to reveal, AES-256 encrypted at rest) - Bumped to v2.0.9 https://claude.ai/code/session_01SWSwDfMVij53bCTNSCLMwn
19 lines
572 B
JSON
19 lines
572 B
JSON
{
|
|
"name": "silent-send",
|
|
"version": "2.0.9",
|
|
"private": true,
|
|
"license": "BSL-1.1",
|
|
"description": "Browser extension that substitutes personal data before sending to AI services",
|
|
"scripts": {
|
|
"build:chrome": "./build.sh chrome",
|
|
"build:firefox": "./build.sh firefox",
|
|
"build": "./build.sh both",
|
|
"lint:firefox": "npx web-ext lint --source-dir dist/firefox",
|
|
"sign:firefox": "./sign-firefox.sh",
|
|
"run:firefox": "./build.sh firefox && npx web-ext run --source-dir dist/firefox"
|
|
},
|
|
"devDependencies": {
|
|
"web-ext": "^8.4.0"
|
|
}
|
|
}
|