mirror of
https://github.com/bitwarden/browser
synced 2025-12-11 05:43:41 +00:00
[PM-22563] Add awaiting the SDK to be ready to EncryptService (#15138)
This commit is contained in:
@@ -26,6 +26,7 @@ import {
|
|||||||
getFeatureFlagValue,
|
getFeatureFlagValue,
|
||||||
} from "../../../enums/feature-flag.enum";
|
} from "../../../enums/feature-flag.enum";
|
||||||
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
|
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
|
||||||
|
import { SdkLoadService } from "../../../platform/abstractions/sdk/sdk-load.service";
|
||||||
import { EncryptService } from "../abstractions/encrypt.service";
|
import { EncryptService } from "../abstractions/encrypt.service";
|
||||||
|
|
||||||
export class EncryptServiceImplementation implements EncryptService {
|
export class EncryptServiceImplementation implements EncryptService {
|
||||||
@@ -242,6 +243,7 @@ export class EncryptServiceImplementation implements EncryptService {
|
|||||||
if (encString == null || encString.encryptedString == null) {
|
if (encString == null || encString.encryptedString == null) {
|
||||||
throw new Error("encString is null or undefined");
|
throw new Error("encString is null or undefined");
|
||||||
}
|
}
|
||||||
|
await SdkLoadService.Ready;
|
||||||
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.toEncoded());
|
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.toEncoded());
|
||||||
}
|
}
|
||||||
this.logService.debug("decrypting with javascript");
|
this.logService.debug("decrypting with javascript");
|
||||||
@@ -324,6 +326,7 @@ export class EncryptServiceImplementation implements EncryptService {
|
|||||||
encThing.dataBytes,
|
encThing.dataBytes,
|
||||||
encThing.macBytes,
|
encThing.macBytes,
|
||||||
).buffer;
|
).buffer;
|
||||||
|
await SdkLoadService.Ready;
|
||||||
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.toEncoded());
|
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.toEncoded());
|
||||||
}
|
}
|
||||||
this.logService.debug("[EncryptService] Decrypting bytes with javascript");
|
this.logService.debug("[EncryptService] Decrypting bytes with javascript");
|
||||||
|
|||||||
@@ -11,10 +11,12 @@ import {
|
|||||||
SymmetricCryptoKey,
|
SymmetricCryptoKey,
|
||||||
} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
|
} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
|
||||||
import { CsprngArray } from "@bitwarden/common/types/csprng";
|
import { CsprngArray } from "@bitwarden/common/types/csprng";
|
||||||
|
import { PureCrypto } from "@bitwarden/sdk-internal";
|
||||||
|
|
||||||
import { makeStaticByteArray } from "../../../../spec";
|
import { makeStaticByteArray } from "../../../../spec";
|
||||||
import { DefaultFeatureFlagValue, FeatureFlag } from "../../../enums/feature-flag.enum";
|
import { DefaultFeatureFlagValue, FeatureFlag } from "../../../enums/feature-flag.enum";
|
||||||
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
|
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
|
||||||
|
import { SdkLoadService } from "../../../platform/abstractions/sdk/sdk-load.service";
|
||||||
|
|
||||||
import { EncryptServiceImplementation } from "./encrypt.service.implementation";
|
import { EncryptServiceImplementation } from "./encrypt.service.implementation";
|
||||||
|
|
||||||
@@ -343,6 +345,24 @@ describe("EncryptService", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("calls PureCrypto when useSDKForDecryption is true", async () => {
|
||||||
|
(encryptService as any).useSDKForDecryption = true;
|
||||||
|
const decryptedBytes = makeStaticByteArray(10, 200);
|
||||||
|
Object.defineProperty(SdkLoadService, "Ready", {
|
||||||
|
value: Promise.resolve(),
|
||||||
|
configurable: true,
|
||||||
|
});
|
||||||
|
jest.spyOn(PureCrypto, "symmetric_decrypt_array_buffer").mockReturnValue(decryptedBytes);
|
||||||
|
|
||||||
|
const actual = await encryptService.decryptToBytes(encBuffer, key);
|
||||||
|
|
||||||
|
expect(PureCrypto.symmetric_decrypt_array_buffer).toHaveBeenCalledWith(
|
||||||
|
encBuffer.buffer,
|
||||||
|
key.toEncoded(),
|
||||||
|
);
|
||||||
|
expect(actual).toEqualBuffer(decryptedBytes);
|
||||||
|
});
|
||||||
|
|
||||||
it("decrypts data with provided key for Aes256CbcHmac", async () => {
|
it("decrypts data with provided key for Aes256CbcHmac", async () => {
|
||||||
const decryptedBytes = makeStaticByteArray(10, 200);
|
const decryptedBytes = makeStaticByteArray(10, 200);
|
||||||
|
|
||||||
@@ -450,6 +470,25 @@ describe("EncryptService", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("calls PureCrypto when useSDKForDecryption is true", async () => {
|
||||||
|
(encryptService as any).useSDKForDecryption = true;
|
||||||
|
const key = new SymmetricCryptoKey(makeStaticByteArray(64, 0));
|
||||||
|
const encString = new EncString(EncryptionType.AesCbc256_HmacSha256_B64, "data", "iv", "mac");
|
||||||
|
Object.defineProperty(SdkLoadService, "Ready", {
|
||||||
|
value: Promise.resolve(),
|
||||||
|
configurable: true,
|
||||||
|
});
|
||||||
|
jest.spyOn(PureCrypto, "symmetric_decrypt").mockReturnValue("data");
|
||||||
|
|
||||||
|
const actual = await encryptService.decryptToUtf8(encString, key);
|
||||||
|
|
||||||
|
expect(actual).toEqual("data");
|
||||||
|
expect(PureCrypto.symmetric_decrypt).toHaveBeenCalledWith(
|
||||||
|
encString.encryptedString,
|
||||||
|
key.toEncoded(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("decrypts data with provided key for AesCbc256_HmacSha256", async () => {
|
it("decrypts data with provided key for AesCbc256_HmacSha256", async () => {
|
||||||
const key = new SymmetricCryptoKey(makeStaticByteArray(64, 0));
|
const key = new SymmetricCryptoKey(makeStaticByteArray(64, 0));
|
||||||
const encString = new EncString(EncryptionType.AesCbc256_HmacSha256_B64, "data", "iv", "mac");
|
const encString = new EncString(EncryptionType.AesCbc256_HmacSha256_B64, "data", "iv", "mac");
|
||||||
|
|||||||
Reference in New Issue
Block a user