mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 16:23:44 +00:00
update device-crypto service with new crypto service
This commit is contained in:
@@ -6,7 +6,11 @@ import { CryptoFunctionService } from "../platform/abstractions/crypto-function.
|
|||||||
import { CryptoService } from "../platform/abstractions/crypto.service";
|
import { CryptoService } from "../platform/abstractions/crypto.service";
|
||||||
import { EncryptService } from "../platform/abstractions/encrypt.service";
|
import { EncryptService } from "../platform/abstractions/encrypt.service";
|
||||||
import { StateService } from "../platform/abstractions/state.service";
|
import { StateService } from "../platform/abstractions/state.service";
|
||||||
import { SymmetricCryptoKey, DeviceKey } from "../platform/models/domain/symmetric-crypto-key";
|
import {
|
||||||
|
SymmetricCryptoKey,
|
||||||
|
DeviceKey,
|
||||||
|
UserSymKey,
|
||||||
|
} from "../platform/models/domain/symmetric-crypto-key";
|
||||||
import { CsprngArray } from "../types/csprng";
|
import { CsprngArray } from "../types/csprng";
|
||||||
|
|
||||||
export class DeviceCryptoService implements DeviceCryptoServiceAbstraction {
|
export class DeviceCryptoService implements DeviceCryptoServiceAbstraction {
|
||||||
@@ -21,7 +25,7 @@ export class DeviceCryptoService implements DeviceCryptoServiceAbstraction {
|
|||||||
|
|
||||||
async trustDevice(): Promise<DeviceResponse> {
|
async trustDevice(): Promise<DeviceResponse> {
|
||||||
// Attempt to get user symmetric key
|
// Attempt to get user symmetric key
|
||||||
const userSymKey: SymmetricCryptoKey = await this.cryptoService.getEncKey();
|
const userSymKey: UserSymKey = await this.cryptoService.getUserKeyFromMemory();
|
||||||
|
|
||||||
// If user symmetric key is not found, throw error
|
// If user symmetric key is not found, throw error
|
||||||
if (!userSymKey) {
|
if (!userSymKey) {
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ import { CryptoFunctionService } from "../platform/abstractions/crypto-function.
|
|||||||
import { EncryptService } from "../platform/abstractions/encrypt.service";
|
import { EncryptService } from "../platform/abstractions/encrypt.service";
|
||||||
import { StateService } from "../platform/abstractions/state.service";
|
import { StateService } from "../platform/abstractions/state.service";
|
||||||
import { EncString } from "../platform/models/domain/enc-string";
|
import { EncString } from "../platform/models/domain/enc-string";
|
||||||
import { SymmetricCryptoKey, DeviceKey } from "../platform/models/domain/symmetric-crypto-key";
|
import {
|
||||||
|
SymmetricCryptoKey,
|
||||||
|
DeviceKey,
|
||||||
|
UserSymKey,
|
||||||
|
} from "../platform/models/domain/symmetric-crypto-key";
|
||||||
import { CryptoService } from "../platform/services/crypto.service";
|
import { CryptoService } from "../platform/services/crypto.service";
|
||||||
import { CsprngArray } from "../types/csprng";
|
import { CsprngArray } from "../types/csprng";
|
||||||
|
|
||||||
@@ -125,7 +129,7 @@ describe("deviceCryptoService", () => {
|
|||||||
let mockDeviceKey: DeviceKey;
|
let mockDeviceKey: DeviceKey;
|
||||||
|
|
||||||
let mockUserSymKeyRandomBytes: CsprngArray;
|
let mockUserSymKeyRandomBytes: CsprngArray;
|
||||||
let mockUserSymKey: SymmetricCryptoKey;
|
let mockUserSymKey: UserSymKey;
|
||||||
|
|
||||||
const deviceRsaKeyLength = 2048;
|
const deviceRsaKeyLength = 2048;
|
||||||
let mockDeviceRsaKeyPair: [ArrayBuffer, ArrayBuffer];
|
let mockDeviceRsaKeyPair: [ArrayBuffer, ArrayBuffer];
|
||||||
@@ -147,7 +151,7 @@ describe("deviceCryptoService", () => {
|
|||||||
|
|
||||||
let makeDeviceKeySpy: jest.SpyInstance;
|
let makeDeviceKeySpy: jest.SpyInstance;
|
||||||
let rsaGenerateKeyPairSpy: jest.SpyInstance;
|
let rsaGenerateKeyPairSpy: jest.SpyInstance;
|
||||||
let cryptoSvcGetEncKeySpy: jest.SpyInstance;
|
let cryptoSvcGetUserKeyFromMemorySpy: jest.SpyInstance;
|
||||||
let cryptoSvcRsaEncryptSpy: jest.SpyInstance;
|
let cryptoSvcRsaEncryptSpy: jest.SpyInstance;
|
||||||
let encryptServiceEncryptSpy: jest.SpyInstance;
|
let encryptServiceEncryptSpy: jest.SpyInstance;
|
||||||
let appIdServiceGetAppIdSpy: jest.SpyInstance;
|
let appIdServiceGetAppIdSpy: jest.SpyInstance;
|
||||||
@@ -160,7 +164,7 @@ describe("deviceCryptoService", () => {
|
|||||||
mockDeviceKey = new SymmetricCryptoKey(mockDeviceKeyRandomBytes) as DeviceKey;
|
mockDeviceKey = new SymmetricCryptoKey(mockDeviceKeyRandomBytes) as DeviceKey;
|
||||||
|
|
||||||
mockUserSymKeyRandomBytes = new Uint8Array(userSymKeyBytesLength).buffer as CsprngArray;
|
mockUserSymKeyRandomBytes = new Uint8Array(userSymKeyBytesLength).buffer as CsprngArray;
|
||||||
mockUserSymKey = new SymmetricCryptoKey(mockUserSymKeyRandomBytes);
|
mockUserSymKey = new SymmetricCryptoKey(mockUserSymKeyRandomBytes) as UserSymKey;
|
||||||
|
|
||||||
mockDeviceRsaKeyPair = [
|
mockDeviceRsaKeyPair = [
|
||||||
new ArrayBuffer(deviceRsaKeyLength),
|
new ArrayBuffer(deviceRsaKeyLength),
|
||||||
@@ -194,8 +198,8 @@ describe("deviceCryptoService", () => {
|
|||||||
.spyOn(cryptoFunctionService, "rsaGenerateKeyPair")
|
.spyOn(cryptoFunctionService, "rsaGenerateKeyPair")
|
||||||
.mockResolvedValue(mockDeviceRsaKeyPair);
|
.mockResolvedValue(mockDeviceRsaKeyPair);
|
||||||
|
|
||||||
cryptoSvcGetEncKeySpy = jest
|
cryptoSvcGetUserKeyFromMemorySpy = jest
|
||||||
.spyOn(cryptoService, "getEncKey")
|
.spyOn(cryptoService, "getUserKeyFromMemory")
|
||||||
.mockResolvedValue(mockUserSymKey);
|
.mockResolvedValue(mockUserSymKey);
|
||||||
|
|
||||||
cryptoSvcRsaEncryptSpy = jest
|
cryptoSvcRsaEncryptSpy = jest
|
||||||
@@ -227,7 +231,7 @@ describe("deviceCryptoService", () => {
|
|||||||
|
|
||||||
expect(makeDeviceKeySpy).toHaveBeenCalledTimes(1);
|
expect(makeDeviceKeySpy).toHaveBeenCalledTimes(1);
|
||||||
expect(rsaGenerateKeyPairSpy).toHaveBeenCalledTimes(1);
|
expect(rsaGenerateKeyPairSpy).toHaveBeenCalledTimes(1);
|
||||||
expect(cryptoSvcGetEncKeySpy).toHaveBeenCalledTimes(1);
|
expect(cryptoSvcGetUserKeyFromMemorySpy).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
expect(cryptoSvcRsaEncryptSpy).toHaveBeenCalledTimes(1);
|
expect(cryptoSvcRsaEncryptSpy).toHaveBeenCalledTimes(1);
|
||||||
expect(encryptServiceEncryptSpy).toHaveBeenCalledTimes(2);
|
expect(encryptServiceEncryptSpy).toHaveBeenCalledTimes(2);
|
||||||
@@ -247,17 +251,17 @@ describe("deviceCryptoService", () => {
|
|||||||
|
|
||||||
it("throws specific error if user symmetric key is not found", async () => {
|
it("throws specific error if user symmetric key is not found", async () => {
|
||||||
// setup the spy to return null
|
// setup the spy to return null
|
||||||
cryptoSvcGetEncKeySpy.mockResolvedValue(null);
|
cryptoSvcGetUserKeyFromMemorySpy.mockResolvedValue(null);
|
||||||
// check if the expected error is thrown
|
// check if the expected error is thrown
|
||||||
await expect(deviceCryptoService.trustDevice()).rejects.toThrow(
|
await expect(deviceCryptoService.trustDevice()).rejects.toThrow(
|
||||||
"User symmetric key not found"
|
"User symmetric key not found"
|
||||||
);
|
);
|
||||||
|
|
||||||
// reset the spy
|
// reset the spy
|
||||||
cryptoSvcGetEncKeySpy.mockReset();
|
cryptoSvcGetUserKeyFromMemorySpy.mockReset();
|
||||||
|
|
||||||
// setup the spy to return undefined
|
// setup the spy to return undefined
|
||||||
cryptoSvcGetEncKeySpy.mockResolvedValue(undefined);
|
cryptoSvcGetUserKeyFromMemorySpy.mockResolvedValue(undefined);
|
||||||
// check if the expected error is thrown
|
// check if the expected error is thrown
|
||||||
await expect(deviceCryptoService.trustDevice()).rejects.toThrow(
|
await expect(deviceCryptoService.trustDevice()).rejects.toThrow(
|
||||||
"User symmetric key not found"
|
"User symmetric key not found"
|
||||||
@@ -276,9 +280,9 @@ describe("deviceCryptoService", () => {
|
|||||||
errorText: "rsaGenerateKeyPair error",
|
errorText: "rsaGenerateKeyPair error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
method: "getEncKey",
|
method: "getUserKeyFromMemory",
|
||||||
spy: () => cryptoSvcGetEncKeySpy,
|
spy: () => cryptoSvcGetUserKeyFromMemorySpy,
|
||||||
errorText: "getEncKey error",
|
errorText: "getUserKeyFromMemory error",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
method: "rsaEncrypt",
|
method: "rsaEncrypt",
|
||||||
|
|||||||
Reference in New Issue
Block a user