Repository navigation
Restore login-name proof and keep the email timer fail-closed - #110
Merged
Merged
Conversation
… merged marketing site. Email sign-in still derives the vault key from the email. A login name works only when prelogin returns that email. PIN and pattern wrap the user key on the device after a master-password unlock, and the public downloads page reads the release manifest without replacing the home-page sign-in. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…vice. Never leaves the timer off. A successful code starts a fixed window; failed sign-ins and ordinary requests do not move it. Standing second factors stay required, and a code that cannot be mailed does not complete sign-in. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…imer against a real server. The signed-in onboarding rail stays off, Downloads stays in the vault navigation, and the timed email code is checked with a loopback mail sink: a verified account, a challenge, a bad code, a replay after expiry, and a mailer failure. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…unlock in a browser. The restore test no longer trips the underscore-drop deny. A throwaway server applies both new migrations on boot and keeps the row on a second boot. Chrome signs in, opens Downloads, and enrolls, unlocks, and rejects a PIN. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…roid build jobs. PIN enrollment now checks the 32 or 64 byte user key before the Angular unlock service accepts it. Linux and Windows CI jobs build unsigned packages. Android release runs only when a keystore secret already exists. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
Sign-in now requires the vault email as the KDF salt. Timed email codes use a server-issued trust token and a login challenge, and the timer cannot be turned on unless a verified mailbox can actually receive mail. User-key wrapping accepts 64-byte and longer COSE keys and rejects a bare 32-byte key. Desktop CI uses Node 24 and npm 11, and a published release is what writes download URLs. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…timer fail-closed. A login name no longer resolves through prelogin. The client proves the password with a separate verifier, and only then receives the email and real KDF. An enabled email timer stays required when mail cannot send; Never is the signed-in way to turn it off. Trust revocation waits for the server, codes are claimed with one update, and the web vault lock clears the in-memory user key so PIN and pattern can decrypt the vault. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
…with its commit. The clients image manifest publishes only the Chromium zip that image just built. A release manifest checks every published checksum against the bytes uploaded for that same commit. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
The 100000 login-name verifier is gone. Enrollment in the signed-in vault stores an AES-GCM envelope of the registration email, wrapped with the account's own KDF. Logout revokes the email trust token from extension session storage, and lock clears secret caches before it reloads. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
Prelogin no longer returns a vault-key email for registered accounts. Login-name open always reports the same PBKDF2-600000 wrap, and the account KDF stays inside the envelope. Stronger account KDFs cannot enroll a cheaper seal. The old verifier hashes are cleared. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
The device page uses the same wrap rule as the server and does not offer a form for Argon2 or PBKDF2 above 600000. The web vault keeps the typed email case. Marketing tries that case first, then the lowercased salt. Co-authored-by: Admin <GoDeskio@users.noreply.github.com>
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.
Head
d04ec4e4f6ab77658ba608fbccc83f16deee8dfconcursor/dashboard-unlock-7d2a. Do not merge or deploy. No new secrets, signing identities, store submission, DNS change, or release publish. The committed download manifest is not a public download.Corrections on this commit
The device page checks the same rule as the server before it shows a login-name form. Argon2, and PBKDF2 above 600000 iterations, see that a login name is not available and that email sign-in still uses the account's own key derivation. The form is not shown, so nothing is submitted. The eligible copy says the envelope is sealed with PBKDF2-SHA256 at 600000 iterations. It does not say the account KDF seals the envelope.
The web vault keeps the case of the typed email. It does not lowercase that string before deriving the vault key. Marketing tries the typed case first. If that sign-in is rejected and the lowercased string is different, it tries the lowercased salt. A mixed-case vault opens from the exact string. An account registered with a lowercased salt still opens when the person types different case.
Migration
20261108050000is tested by seedingverifier_hash = cheap-verifier, removing that migration's record, booting again, and checking the value is null.Login names for Argon2 and for PBKDF2 above 600000 are not implemented. A uniform open response cannot reveal those parameters without telling an anonymous caller the name exists, and the 600000 wrap would be a cheaper password check. Email sign-in is the path for those accounts.
Email prelogin still returns the real KDF for an address that exists and a decoy otherwise. That difference is unchanged from main.
Local evidence
20261108050000runs again.MARKETING EMAIL CASE PASS.ANGULAR VAULT UNLOCK PASS.CI for
d04ec4e4is the check that still has to finish. Earlier checksums are not evidence for this head.