From 3d3a02ccb97647d3fa608d64bb7543c787a69d55 Mon Sep 17 00:00:00 2001 From: Bernd Schoolmann Date: Thu, 28 Aug 2025 14:35:39 +0200 Subject: [PATCH] Add persistent to os biometric service --- .../biometrics/os-biometrics-linux.service.ts | 6 ++++++ .../biometrics/os-biometrics-mac.service.ts | 8 ++++++++ .../biometrics/os-biometrics-windows.service.ts | 12 ++++++++++++ .../biometrics/os-biometrics.service.ts | 2 ++ 4 files changed, 28 insertions(+) diff --git a/apps/desktop/src/key-management/biometrics/os-biometrics-linux.service.ts b/apps/desktop/src/key-management/biometrics/os-biometrics-linux.service.ts index a93e7593070..12e239a58af 100644 --- a/apps/desktop/src/key-management/biometrics/os-biometrics-linux.service.ts +++ b/apps/desktop/src/key-management/biometrics/os-biometrics-linux.service.ts @@ -33,6 +33,12 @@ export default class OsBiometricsServiceLinux implements OsBiometricService { constructor() {} + async enrollPersistent(userId: UserId, key: SymmetricCryptoKey): Promise {} + + async hasPersistentKey(userId: UserId): Promise { + return false; + } + async setBiometricKey(userId: UserId, key: SymmetricCryptoKey): Promise { await biometrics.provideKey(this.biometricsSystem, userId, Buffer.from(key.toEncoded().buffer)); } diff --git a/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.ts b/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.ts index 1dc64f1bcd5..87d63971750 100644 --- a/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.ts +++ b/apps/desktop/src/key-management/biometrics/os-biometrics-mac.service.ts @@ -20,6 +20,14 @@ export default class OsBiometricsServiceMac implements OsBiometricService { private logService: LogService, ) {} + async enrollPersistent(userId: UserId, key: SymmetricCryptoKey): Promise { + return await passwords.setPassword(SERVICE, getLookupKeyForUser(userId), key.toBase64()); + } + + async hasPersistentKey(userId: UserId): Promise { + return (await passwords.getPassword(SERVICE, getLookupKeyForUser(userId))) != null; + } + async supportsBiometrics(): Promise { return systemPreferences.canPromptTouchID(); } diff --git a/apps/desktop/src/key-management/biometrics/os-biometrics-windows.service.ts b/apps/desktop/src/key-management/biometrics/os-biometrics-windows.service.ts index 41f2a8eca3c..c47a639033b 100644 --- a/apps/desktop/src/key-management/biometrics/os-biometrics-windows.service.ts +++ b/apps/desktop/src/key-management/biometrics/os-biometrics-windows.service.ts @@ -16,6 +16,18 @@ export default class OsBiometricsServiceWindows implements OsBiometricService { private windowMain: WindowMain, ) {} + async enrollPersistent(userId: UserId, key: SymmetricCryptoKey): Promise { + await biometrics.enrollPersistent( + this.biometricsSystem, + userId, + Buffer.from(key.toEncoded().buffer), + ); + } + + async hasPersistentKey(userId: UserId): Promise { + return await biometrics.hasPersistent(this.biometricsSystem, userId); + } + async supportsBiometrics(): Promise { return await biometrics.authenticateAvailable(this.biometricsSystem); } diff --git a/apps/desktop/src/key-management/biometrics/os-biometrics.service.ts b/apps/desktop/src/key-management/biometrics/os-biometrics.service.ts index 63e0527c034..064b28f2ff2 100644 --- a/apps/desktop/src/key-management/biometrics/os-biometrics.service.ts +++ b/apps/desktop/src/key-management/biometrics/os-biometrics.service.ts @@ -25,4 +25,6 @@ export interface OsBiometricService { setBiometricKey(userId: UserId, key: SymmetricCryptoKey): Promise; deleteBiometricKey(userId: UserId): Promise; getBiometricsFirstUnlockStatusForUser(userId: UserId): Promise; + enrollPersistent(userId: UserId, key: SymmetricCryptoKey): Promise; + hasPersistentKey(userId: UserId): Promise; }