258 lines
6.5 KiB
TypeScript
258 lines
6.5 KiB
TypeScript
import * as assert from "assert";
|
|
import * as core from "@peculiar/webcrypto-core";
|
|
|
|
// tslint:disable:max-classes-per-file
|
|
|
|
context("AES", () => {
|
|
|
|
context("AES-CBC", () => {
|
|
|
|
const provider = Reflect.construct(core.AesCbcProvider, []) as core.AesCbcProvider;
|
|
|
|
context("checkGenerateKeyParams", () => {
|
|
|
|
it("error if `length` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({ name: "AES-CBC" } as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `length` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({ name: "AES-CBC", length: "s" } as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if `length` has wrong value", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({ name: "AES-CBC", length: 1 } as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
[128, 192, 256].forEach((length) => {
|
|
it(`correct length:${length}`, () => {
|
|
provider.checkGenerateKeyParams({ name: "AES-CBC", length } as any);
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("AES-CBC", () => {
|
|
|
|
const provider = Reflect.construct(core.AesCbcProvider, []) as core.AesCbcProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if parameter `iv` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if parameter `iv` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
iv: "wrong type",
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if parameter `iv` has wrong length", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new Uint8Array(20),
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("correct parameter `iv`", () => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new Uint8Array(16),
|
|
} as any);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("AES-CMAC", () => {
|
|
|
|
const provider = Reflect.construct(core.AesCmacProvider, []) as core.AesCmacProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if parameter `length` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if parameter `length` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
length: "128",
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if parameter `length` less than 1", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
length: 0,
|
|
} as any);
|
|
}, core.OperationError);
|
|
});
|
|
|
|
it("correct parameter `length`", () => {
|
|
provider.checkAlgorithmParams({
|
|
length: 1,
|
|
} as any);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("AES-CTR", () => {
|
|
|
|
const provider = Reflect.construct(core.AesCtrProvider, []) as core.AesCtrProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if parameter `counter` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
length: 1,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if parameter `counter` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
counter: "wrong type",
|
|
length: 1,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if parameter `counter` has wrong length", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new ArrayBuffer(10),
|
|
length: 1,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("counter is ArrayBuffer", () => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new ArrayBuffer(16),
|
|
length: 1,
|
|
} as any);
|
|
});
|
|
|
|
it("counter is ArrayBufferView", () => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new Uint8Array(16),
|
|
length: 1,
|
|
} as any);
|
|
});
|
|
|
|
it("error if parameter `length` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new Uint8Array(16),
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if parameter `length` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new Uint8Array(16),
|
|
length: "1",
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if parameter `length` less than 1", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new Uint8Array(16),
|
|
length: 0,
|
|
} as any);
|
|
}, core.OperationError);
|
|
});
|
|
|
|
it("correct parameter `length`", () => {
|
|
provider.checkAlgorithmParams({
|
|
counter: new Uint8Array(16),
|
|
length: 1,
|
|
} as any);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("AES-GCM", () => {
|
|
|
|
const provider = Reflect.construct(core.AesGcmProvider, []) as core.AesGcmProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if parameter `iv` is not present", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if parameter `iv` has wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
iv: "wrong type",
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if parameter `iv` has wrong length", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new Uint8Array(0),
|
|
} as any);
|
|
}, core.OperationError);
|
|
});
|
|
|
|
it("correct parameter `iv`", () => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new ArrayBuffer(1),
|
|
} as any);
|
|
});
|
|
|
|
it("error if parameter `tagLength` has wrong value", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new ArrayBuffer(1),
|
|
tagLength: 33,
|
|
} as any);
|
|
}, core.OperationError);
|
|
});
|
|
|
|
[32, 64, 96, 104, 112, 120, 128].forEach((tagLength) => {
|
|
it(`correct tagLength: ${tagLength}`, () => {
|
|
provider.checkAlgorithmParams({
|
|
iv: new ArrayBuffer(1),
|
|
tagLength,
|
|
} as any);
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|