kv-wasm: forget the Secret Key on logout and on any failed unlock or login
ci / test (push) Canceled after 0s
ci / wasm (push) Canceled after 0s
ci / deny (push) Canceled after 0s
ci / fuzz (push) Canceled after 0s

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-18 07:00:50 +09:00
co-authored by Claude Opus 5.5
parent 2e2c8cd26f
commit 1e073e1f09
4 changed files with 58 additions and 10 deletions
+11
View File
@@ -247,6 +247,13 @@ async fn web_vault_enrolls_by_ticket_both_ways() {
reloaded.unlock(PW, &sk).unwrap();
assert_eq!(reloaded.setup_payload_for_kit().unwrap(), kit);
web.unlock(PW, &sk).unwrap();
// A failed unlock (or login) forgets it until the next one that succeeds.
assert!(matches!(web.unlock("wrong password!!", &sk), Err(CoreError::BadCredentials)));
assert!(matches!(web.setup_payload_for_kit(), Err(CoreError::Locked)));
web.unlock(PW, &sk).unwrap();
assert!(web.login("wrong password!!", &sk, None).await.is_err());
assert!(matches!(web.setup_payload_for_kit(), Err(CoreError::Locked)));
web.unlock(PW, &sk).unwrap();
// Single use: another browser with the same QR waits for approval.
let (_, third) = new_web(&server);
@@ -273,6 +280,10 @@ async fn web_vault_enrolls_by_ticket_both_ways() {
let (_, late) = new_web(&server);
let setup = kv_wasm::core::parse_setup_payload(&add.payload).unwrap();
assert_eq!(late.login_with_setup(&setup, PW).await.unwrap(), LoginResult::PendingApproval);
// Logging out forgets the Secret Key too.
web.logout().await.unwrap();
assert!(matches!(web.setup_payload_for_kit(), Err(CoreError::Locked)));
}
#[tokio::test]