[AC-1266] Enums filename conventions (#5140)
* refactor: update clientType enum
* refactor: update deviceType filename
* refactor: update encryptedExportType filename
* refactor: update encryptionType filename
* refactor: update eventType filename
* refactor: update fieldType filename
* refactor: update fileUploadType filename
* refactor: update hashPurpose filename
* refactor: update htmlStorageLocation filename
* refactor: update kdfType filename
* refactor: update keySuffixOptions filename
* refactor: update linkedIdType filename
* refactor: update logLevelType filename
* refactor: update nativeMessagingVersion filename
* refactor: update notificationType filename
* refactor: update productType filename
* refactor: update secureNoteType filename
* refactor: update stateVersion filename
* refactor: update storageLocation filename
* refactor: update themeType filename
* refactor: update uriMatchType filename
* fix: update kdfType classes missed in initial pass, refs AC-1266
* fix: missing import update for device-type
* refactor: add barrel file for enums and update pathed import statements, refs AC-1266
* fix: incorrect import statements for web, refs AC-1266
* fix: missed import statement updates (browser), refs AC-1266
* fix: missed import statement changes (cli), refs AC-1266
* fix: missed import statement changes (desktop), refs AC-1266
* fix: prettier, refs AC-1266
* refactor: (libs) update relative paths to use barrel file, refs AC-1266
* fix: missed find/replace import statements for SecureNoteType, refs AC-1266
* refactor: apply .enum suffix to enums folder and modify leftover relative paths, refs AC-1266
* fix: find/replace errors for native-messaging-version, refs AC-1266
2023-04-05 05:42:21 +02:00
|
|
|
import { EncryptionType } from "@bitwarden/common/enums";
|
2022-10-14 18:25:50 +02:00
|
|
|
import { EncArrayBuffer } from "@bitwarden/common/models/domain/enc-array-buffer";
|
2022-07-26 03:40:32 +02:00
|
|
|
|
2022-08-11 03:35:08 +02:00
|
|
|
import { makeStaticByteArray } from "../../utils";
|
2022-07-26 03:40:32 +02:00
|
|
|
|
|
|
|
describe("encArrayBuffer", () => {
|
|
|
|
describe("parses the buffer", () => {
|
|
|
|
test.each([
|
|
|
|
[EncryptionType.AesCbc128_HmacSha256_B64, "AesCbc128_HmacSha256_B64"],
|
|
|
|
[EncryptionType.AesCbc256_HmacSha256_B64, "AesCbc256_HmacSha256_B64"],
|
|
|
|
])("with %c%s", (encType: EncryptionType) => {
|
|
|
|
const iv = makeStaticByteArray(16, 10);
|
|
|
|
const mac = makeStaticByteArray(32, 20);
|
|
|
|
// We use the minimum data length of 1 to test the boundary of valid lengths
|
|
|
|
const data = makeStaticByteArray(1, 100);
|
|
|
|
|
|
|
|
const array = new Uint8Array(1 + iv.byteLength + mac.byteLength + data.byteLength);
|
|
|
|
array.set([encType]);
|
|
|
|
array.set(iv, 1);
|
|
|
|
array.set(mac, 1 + iv.byteLength);
|
|
|
|
array.set(data, 1 + iv.byteLength + mac.byteLength);
|
|
|
|
|
|
|
|
const actual = new EncArrayBuffer(array.buffer);
|
|
|
|
|
|
|
|
expect(actual.encryptionType).toEqual(encType);
|
|
|
|
expect(actual.ivBytes).toEqualBuffer(iv);
|
|
|
|
expect(actual.macBytes).toEqualBuffer(mac);
|
|
|
|
expect(actual.dataBytes).toEqualBuffer(data);
|
|
|
|
});
|
|
|
|
|
|
|
|
it("with AesCbc256_B64", () => {
|
|
|
|
const encType = EncryptionType.AesCbc256_B64;
|
|
|
|
const iv = makeStaticByteArray(16, 10);
|
|
|
|
// We use the minimum data length of 1 to test the boundary of valid lengths
|
|
|
|
const data = makeStaticByteArray(1, 100);
|
|
|
|
|
|
|
|
const array = new Uint8Array(1 + iv.byteLength + data.byteLength);
|
|
|
|
array.set([encType]);
|
|
|
|
array.set(iv, 1);
|
|
|
|
array.set(data, 1 + iv.byteLength);
|
|
|
|
|
|
|
|
const actual = new EncArrayBuffer(array.buffer);
|
|
|
|
|
|
|
|
expect(actual.encryptionType).toEqual(encType);
|
|
|
|
expect(actual.ivBytes).toEqualBuffer(iv);
|
|
|
|
expect(actual.dataBytes).toEqualBuffer(data);
|
|
|
|
expect(actual.macBytes).toBeNull();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe("throws if the buffer has an invalid length", () => {
|
|
|
|
test.each([
|
|
|
|
[EncryptionType.AesCbc128_HmacSha256_B64, 50, "AesCbc128_HmacSha256_B64"],
|
|
|
|
[EncryptionType.AesCbc256_HmacSha256_B64, 50, "AesCbc256_HmacSha256_B64"],
|
|
|
|
[EncryptionType.AesCbc256_B64, 18, "AesCbc256_B64"],
|
|
|
|
])("with %c%c%s", (encType: EncryptionType, minLength: number) => {
|
|
|
|
// Generate invalid byte array
|
|
|
|
// Minus 1 to leave room for the encType, minus 1 to make it invalid
|
|
|
|
const invalidBytes = makeStaticByteArray(minLength - 2);
|
|
|
|
|
|
|
|
const invalidArray = new Uint8Array(1 + invalidBytes.buffer.byteLength);
|
|
|
|
invalidArray.set([encType]);
|
|
|
|
invalidArray.set(invalidBytes, 1);
|
|
|
|
|
|
|
|
expect(() => new EncArrayBuffer(invalidArray.buffer)).toThrow(
|
|
|
|
"Error parsing encrypted ArrayBuffer"
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
it("doesn't parse the buffer if the encryptionType is not supported", () => {
|
|
|
|
// Starting at 9 implicitly gives us an invalid encType
|
|
|
|
const bytes = makeStaticByteArray(50, 9);
|
|
|
|
expect(() => new EncArrayBuffer(bytes)).toThrow("Error parsing encrypted ArrayBuffer");
|
|
|
|
});
|
|
|
|
});
|