Skip to content

Commit 381e7fa

Browse files
authored
[PM-22563] Add awaiting the SDK to be ready to EncryptService (#15138)
1 parent 708737f commit 381e7fa

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

libs/common/src/key-management/crypto/services/encrypt.service.implementation.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
getFeatureFlagValue,
2727
} from "../../../enums/feature-flag.enum";
2828
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
29+
import { SdkLoadService } from "../../../platform/abstractions/sdk/sdk-load.service";
2930
import { EncryptService } from "../abstractions/encrypt.service";
3031

3132
export class EncryptServiceImplementation implements EncryptService {
@@ -242,6 +243,7 @@ export class EncryptServiceImplementation implements EncryptService {
242243
if (encString == null || encString.encryptedString == null) {
243244
throw new Error("encString is null or undefined");
244245
}
246+
await SdkLoadService.Ready;
245247
return PureCrypto.symmetric_decrypt(encString.encryptedString, key.toEncoded());
246248
}
247249
this.logService.debug("decrypting with javascript");
@@ -324,6 +326,7 @@ export class EncryptServiceImplementation implements EncryptService {
324326
encThing.dataBytes,
325327
encThing.macBytes,
326328
).buffer;
329+
await SdkLoadService.Ready;
327330
return PureCrypto.symmetric_decrypt_array_buffer(buffer, key.toEncoded());
328331
}
329332
this.logService.debug("[EncryptService] Decrypting bytes with javascript");

libs/common/src/key-management/crypto/services/encrypt.service.spec.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import {
1111
SymmetricCryptoKey,
1212
} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key";
1313
import { CsprngArray } from "@bitwarden/common/types/csprng";
14+
import { PureCrypto } from "@bitwarden/sdk-internal";
1415

1516
import { makeStaticByteArray } from "../../../../spec";
1617
import { DefaultFeatureFlagValue, FeatureFlag } from "../../../enums/feature-flag.enum";
1718
import { ServerConfig } from "../../../platform/abstractions/config/server-config";
19+
import { SdkLoadService } from "../../../platform/abstractions/sdk/sdk-load.service";
1820

1921
import { EncryptServiceImplementation } from "./encrypt.service.implementation";
2022

@@ -343,6 +345,24 @@ describe("EncryptService", () => {
343345
);
344346
});
345347

348+
it("calls PureCrypto when useSDKForDecryption is true", async () => {
349+
(encryptService as any).useSDKForDecryption = true;
350+
const decryptedBytes = makeStaticByteArray(10, 200);
351+
Object.defineProperty(SdkLoadService, "Ready", {
352+
value: Promise.resolve(),
353+
configurable: true,
354+
});
355+
jest.spyOn(PureCrypto, "symmetric_decrypt_array_buffer").mockReturnValue(decryptedBytes);
356+
357+
const actual = await encryptService.decryptToBytes(encBuffer, key);
358+
359+
expect(PureCrypto.symmetric_decrypt_array_buffer).toHaveBeenCalledWith(
360+
encBuffer.buffer,
361+
key.toEncoded(),
362+
);
363+
expect(actual).toEqualBuffer(decryptedBytes);
364+
});
365+
346366
it("decrypts data with provided key for Aes256CbcHmac", async () => {
347367
const decryptedBytes = makeStaticByteArray(10, 200);
348368

@@ -450,6 +470,25 @@ describe("EncryptService", () => {
450470
);
451471
});
452472

473+
it("calls PureCrypto when useSDKForDecryption is true", async () => {
474+
(encryptService as any).useSDKForDecryption = true;
475+
const key = new SymmetricCryptoKey(makeStaticByteArray(64, 0));
476+
const encString = new EncString(EncryptionType.AesCbc256_HmacSha256_B64, "data", "iv", "mac");
477+
Object.defineProperty(SdkLoadService, "Ready", {
478+
value: Promise.resolve(),
479+
configurable: true,
480+
});
481+
jest.spyOn(PureCrypto, "symmetric_decrypt").mockReturnValue("data");
482+
483+
const actual = await encryptService.decryptToUtf8(encString, key);
484+
485+
expect(actual).toEqual("data");
486+
expect(PureCrypto.symmetric_decrypt).toHaveBeenCalledWith(
487+
encString.encryptedString,
488+
key.toEncoded(),
489+
);
490+
});
491+
453492
it("decrypts data with provided key for AesCbc256_HmacSha256", async () => {
454493
const key = new SymmetricCryptoKey(makeStaticByteArray(64, 0));
455494
const encString = new EncString(EncryptionType.AesCbc256_HmacSha256_B64, "data", "iv", "mac");

0 commit comments

Comments
 (0)