From 9f5497dba88fdbb828b6848990e5ea1eeb104882 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Tue, 21 Oct 2025 17:51:23 +0200 Subject: [PATCH] Update legacy kdf state on master password unlock sync --- .../default-master-password-unlock.service.spec.ts | 10 ++++++++-- .../services/default-master-password-unlock.service.ts | 4 +++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.spec.ts b/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.spec.ts index 75668e8e6bd..9c35a2a2006 100644 --- a/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.spec.ts +++ b/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.spec.ts @@ -3,7 +3,7 @@ import { of } from "rxjs"; import { newGuid } from "@bitwarden/guid"; // eslint-disable-next-line no-restricted-imports -import { Argon2KdfConfig, KeyService } from "@bitwarden/key-management"; +import { Argon2KdfConfig, KdfConfigService, KeyService } from "@bitwarden/key-management"; import { UserId } from "@bitwarden/user-core"; import { HashPurpose } from "../../../platform/enums"; @@ -23,6 +23,7 @@ describe("DefaultMasterPasswordUnlockService", () => { let masterPasswordService: MockProxy; let keyService: MockProxy; + let kdfService: MockProxy; const mockMasterPassword = "testExample"; const mockUserId = newGuid() as UserId; @@ -41,8 +42,9 @@ describe("DefaultMasterPasswordUnlockService", () => { beforeEach(() => { masterPasswordService = mock(); keyService = mock(); + kdfService = mock(); - sut = new DefaultMasterPasswordUnlockService(masterPasswordService, keyService); + sut = new DefaultMasterPasswordUnlockService(masterPasswordService, keyService, kdfService); masterPasswordService.masterPasswordUnlockData$.mockReturnValue( of(mockMasterPasswordUnlockData), @@ -126,6 +128,10 @@ describe("DefaultMasterPasswordUnlockService", () => { ); expect(masterPasswordService.setMasterKeyHash).toHaveBeenCalledWith(mockKeyHash, mockUserId); expect(masterPasswordService.setMasterKey).toHaveBeenCalledWith(mockMasterKey, mockUserId); + expect(kdfService.setKdfConfig).toHaveBeenCalledWith( + mockUserId, + mockMasterPasswordUnlockData.kdf, + ); }); it("throws an error if masterKey construction fails", async () => { diff --git a/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.ts b/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.ts index 87114000abf..079f0505d03 100644 --- a/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.ts +++ b/libs/common/src/key-management/master-password/services/default-master-password-unlock.service.ts @@ -1,7 +1,7 @@ import { firstValueFrom } from "rxjs"; // eslint-disable-next-line no-restricted-imports -import { KeyService } from "@bitwarden/key-management"; +import { KdfConfigService, KeyService } from "@bitwarden/key-management"; import { UserId } from "@bitwarden/user-core"; import { HashPurpose } from "../../../platform/enums"; @@ -14,6 +14,7 @@ export class DefaultMasterPasswordUnlockService implements MasterPasswordUnlockS constructor( private readonly masterPasswordService: InternalMasterPasswordServiceAbstraction, private readonly keyService: KeyService, + private readonly kdfService: KdfConfigService, ) {} async unlockWithMasterPassword(masterPassword: string, userId: UserId): Promise { @@ -71,5 +72,6 @@ export class DefaultMasterPasswordUnlockService implements MasterPasswordUnlockS await this.masterPasswordService.setMasterKeyHash(localKeyHash, userId); await this.masterPasswordService.setMasterKey(masterKey, userId); + await this.kdfService.setKdfConfig(userId, masterPasswordUnlockData.kdf); } }