mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 16:23:44 +00:00
Assign ownership to many of the remaining libs/common files. Criteria for ownership: * Files used by a single team, is now owned by that team. * Files related to a domain owned by a team is now owned by that team. * Where ownership is unclear the "lowest level" service takes ownership.
75 lines
2.9 KiB
TypeScript
75 lines
2.9 KiB
TypeScript
import { makeStaticByteArray } from "../../../../spec";
|
|
import { EncryptionType } from "../../enums";
|
|
|
|
import { EncArrayBuffer } from "./enc-array-buffer";
|
|
|
|
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);
|
|
|
|
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);
|
|
|
|
expect(actual.encryptionType).toEqual(encType);
|
|
expect(actual.ivBytes).toEqual(iv);
|
|
expect(actual.dataBytes).toEqual(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.byteLength);
|
|
invalidArray.set([encType]);
|
|
invalidArray.set(invalidBytes, 1);
|
|
|
|
expect(() => new EncArrayBuffer(invalidArray)).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");
|
|
});
|
|
});
|