1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-10 13:40:06 +00:00

Fix private key encryption

This commit is contained in:
Bernd Schoolmann
2025-03-06 19:25:09 +01:00
parent 4aeb20239f
commit 041e7743f8
3 changed files with 11 additions and 14 deletions

View File

@@ -98,7 +98,7 @@ export class UserKeyRotationService {
const newMasterKey = await this.keyService.makeMasterKey(newMasterPassword, email, kdfConfig);
const userkey = PureCrypto.generate_userkey(false);
const userkey = PureCrypto.generate_userkey(true);
const newUnencryptedUserKey = new SymmetricCryptoKey(userkey) as UserKey;
let kdf: Kdf = { pBKDF2: { iterations: 1 } };
if (kdfConfig.kdfType === KdfType.PBKDF2_SHA256) {

View File

@@ -499,6 +499,7 @@ const safeProviders: SafeProvider[] = [
configService: ConfigService,
stateProvider: StateProvider,
accountService: AccountServiceAbstraction,
logService: LogService,
) =>
new CipherService(
keyService,
@@ -514,6 +515,7 @@ const safeProviders: SafeProvider[] = [
configService,
stateProvider,
accountService,
logService,
),
deps: [
KeyService,
@@ -529,6 +531,7 @@ const safeProviders: SafeProvider[] = [
ConfigService,
StateProvider,
AccountServiceAbstraction,
LogService,
],
}),
safeProvider({

View File

@@ -67,10 +67,7 @@ export class EncryptServiceImplementation implements EncryptService {
const mac = Utils.fromBufferToB64(encObj.mac);
return new EncString(innerKey.type, data, iv, mac);
} else if (innerKey.type === EncryptionType.XChaCha20Poly1305_B64) {
const encrypted = PureCrypto.symmetric_encrypt(
Utils.fromBufferToByteString(plainBuf),
Utils.fromBufferToB64(innerKey.coseKey),
);
const encrypted = PureCrypto.symmetric_encrypt(plainBuf, innerKey.coseKey);
return new EncString(encrypted);
} else {
throw new Error(`Encrypt is not supported for keys of type ${innerKey.type}`);
@@ -102,10 +99,7 @@ export class EncryptServiceImplementation implements EncryptService {
encBytes.set(new Uint8Array(encValue.data), 1 + encValue.iv.byteLength);
return new EncArrayBuffer(encBytes);
} else if (innerKey.type === EncryptionType.XChaCha20Poly1305_B64) {
const encrypted = PureCrypto.symmetric_decrypt_array_buffer(
plainValue,
Utils.fromBufferToB64(innerKey.coseKey),
);
const encrypted = PureCrypto.symmetric_decrypt_array_buffer(plainValue, innerKey.coseKey);
return new EncArrayBuffer(encrypted);
}
}
@@ -121,7 +115,7 @@ export class EncryptServiceImplementation implements EncryptService {
throw new Error("encString is null or undefined");
}
try {
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.keyB64);
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.key);
} catch (e) {
this.logService.error("Error decrypting with SDK", e);
return null;
@@ -193,7 +187,7 @@ export class EncryptServiceImplementation implements EncryptService {
parameters: fastParams,
});
} else if (innerKey.type === EncryptionType.XChaCha20Poly1305_B64) {
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.keyB64);
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.key);
} else {
throw new Error(`Unsupported encryption type`);
}
@@ -210,7 +204,7 @@ export class EncryptServiceImplementation implements EncryptService {
const buffer = new Uint8Array(encThing.dataBytes.length + 1);
buffer[0] = encThing.encryptionType;
buffer.set(encThing.dataBytes, 1);
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.keyB64);
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.key);
}
if (
@@ -227,7 +221,7 @@ export class EncryptServiceImplementation implements EncryptService {
encThing.macBytes,
).buffer;
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.keyB64);
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.key);
}
this.logService.debug("decrypting bytes with javascript");
@@ -303,7 +297,7 @@ export class EncryptServiceImplementation implements EncryptService {
encThing.dataBytes,
encThing.macBytes,
).buffer;
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.keyB64);
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.key);
}
}