Repository navigation
SecretSpace 4.0.0: nothing carries the old name any more - #34
Merged
Merged
Conversation
The project was renamed from PassMan to SecretSpace in November 2026, but SecretSpace 3 still carried the old name where nobody looks: in the labels its keys are made with, in the markers at the start of its files, in the name of its data folder. This version uses its own name everywhere. That means a new file format (format 2) and a one-time conversion of an account made by SecretSpace 3; the cryptography itself is unchanged. - account_crypto: `Format` holds what differs between the two formats (label prefix, file markers, Secret Key spelling). NOW is written; OLD is read, to convert. The signing key and the recovery proof, which were derived with the old labels, are stored in the keyset from now on - for a converted account the values it always had, so its identity, everything it signed and the server's recovery check all stay valid. - accounts.convert: opens an account the old way and writes it again - keyset (same salt, so every device arrives at the same new login key), the stored Secret Key, every vault file and sync base. account.json is the commit point; stopped before it the old account is whole, stopped after it the next unlock tidies up. Asked for at unlock, with "Save a copy first". - The recovery copy opens only with the 12 words, so it is converted when the user types them once (asked after the conversion; Settings later). - account_sync: the server is told at the next sync (old login key, then the new keyset). The personal vault is uploaded in the new format. A further vault moves by a key change, once every member's account is converted; until then it stays in the old format and is read and written that way, so a member who has not updated is never locked out. Needs SecretSpace Server 2.1.0. - An Emergency Kit from SecretSpace 3 (A3-...) stays valid; the key is shown as A4-... now. - The data folder %APPDATA%\PassMan is renamed to %APPDATA%\SecretSpace at start (renamed, not copied; used where it is if it cannot be). - legacy_names.py is the one module with the old names. A test fails if the old name appears anywhere else in the program. - Headers X-SecretSpace-*, SECRETSPACE_DATA_DIR, the wording of Import. Tests: 849 (88 new). The conversion is tested on accounts made by the real 3.1.0 with its server 2.0.0 (tests/fixtures/format1). 56 mutants: 55 caught, 1 equivalent. Lab flows on the app: accounts 42/42, sync 22/22, vaults 56/56, sharing 101/101, recovery 83/83. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w
…f its own Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w
Review finding: a sign-in from a server converted an account that no device had converted yet, on the server, without asking - which locks out every device of that account still running SecretSpace 3. Now sign_in raises NeedsConversion (nothing changed, anywhere) unless convert=True, and the window asks with the same "will be converted" question as an unlock, saying that it happens on the server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w
…us one Found in the security review of the new format: compare only once both people have updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of the task "rename everything: PassMan → SecretSpace" (your decision of 13 Nov: everything, the cryptography's labels too, with a new account format and a one-time re-key).
SecretSpace 3 still carried the old name where nobody looks: in the labels its keys are made with, in the markers at the start of its files, in the name of its data folder. This version uses its own name everywhere. The cryptography is unchanged; the format is new (format 2), and an account from SecretSpace 3 is converted the first time it is unlocked.
What the user sees
A3-…is accepted; it is shown asA4-…now.%APPDATA%\PassManis renamed to%APPDATA%\SecretSpaceat start (renamed, not copied).What must be known before installing
How it is built
account_crypto.Format: what differs between the formats.NOWis written;OLDis read, to convert — and written only for a vault that someone with an older app still opens.accounts.convert: keyset sealed again with the same salt (every device arrives at the same new login key on its own), then the vault files;account.jsonis the commit point.legacy_names.pyis the one module with the old names; a test fails if the old name appears anywhere else in the program.Proof
tests/fixtures/format1, made bymake_format1.py): a synced account with a shared vault, its other member, and an account that was never on a server.Not done
After the merge
Tag
v4.0.0, build and release the installer. The local foldersE:\CLAUDE\PassMan-*are renamed last, after all four merges.🤖 Generated with Claude Code
https://claude.ai/code/session_011ojnyXb6JY4UPVU4waZe1w