mirror of
https://github.com/bitwarden/browser
synced 2024-12-22 16:12:07 +01:00
bacb8828de
* 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
77 lines
3.0 KiB
TypeScript
77 lines
3.0 KiB
TypeScript
import { EncryptionType } from "@bitwarden/common/enums";
|
|
import { EncArrayBuffer } from "@bitwarden/common/models/domain/enc-array-buffer";
|
|
|
|
import { makeStaticByteArray } from "../../utils";
|
|
|
|
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");
|
|
});
|
|
});
|