187 lines
5.1 KiB
TypeScript
187 lines
5.1 KiB
TypeScript
import * as core from "@peculiar/webcrypto-core";
|
|
import * as assert from "assert";
|
|
|
|
context("RSA", () => {
|
|
|
|
context("RSASSA-PKCS1-v1_5", () => {
|
|
|
|
const provider = Reflect.construct(core.RsaSsaProvider, []) as core.RsaSsaProvider;
|
|
|
|
context("checkGenerateKeyParams", () => {
|
|
|
|
it("error if `hash` is missing", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `hash` is wrong", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-WRONG" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `publicExponent` is missing", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `publicExponent` is wrong of type", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: [1, 0, 1],
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if `publicExponent` is value", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 1, 0]),
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if `modulusLength` is missing", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `modulusLength` is wrong value", () => {
|
|
it("not multiple of 8 bits", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 12345,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
it("less than 256", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 256 - 8,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
it("more than 16384", () => {
|
|
assert.throws(() => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 16384 + 8,
|
|
} as any);
|
|
}, TypeError);
|
|
});
|
|
});
|
|
|
|
it("correct value", () => {
|
|
provider.checkGenerateKeyParams({
|
|
hash: { name: "SHA-256" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 4096,
|
|
} as any);
|
|
});
|
|
|
|
});
|
|
|
|
context("checkImportParams", () => {
|
|
|
|
it("error if `hash` is missing", () => {
|
|
assert.throws(() => {
|
|
provider.checkImportParams({
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `hash` is wrong", () => {
|
|
assert.throws(() => {
|
|
provider.checkImportParams({
|
|
hash: { name: "SHA-WRONG" },
|
|
publicExponent: new Uint8Array([1, 0, 1]),
|
|
modulusLength: 2048,
|
|
} as any);
|
|
}, Error);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("RSA-OAEP", () => {
|
|
|
|
const provider = Reflect.construct(core.RsaOaepProvider, []) as core.RsaOaepProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if `label` is wrong type", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({ label: "WRONG" } as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("correct `label`", () => {
|
|
provider.checkAlgorithmParams({ label: new Uint8Array(4) } as any);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
context("RSA-PSS", () => {
|
|
|
|
const provider = Reflect.construct(core.RsaPssProvider, []) as core.RsaPssProvider;
|
|
|
|
context("checkAlgorithmParams", () => {
|
|
|
|
it("error if `saltLength` is missing", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({} as any);
|
|
}, Error);
|
|
});
|
|
|
|
it("error if `saltLength` is not of type Number", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({ saltLength: "123" } as any);
|
|
}, TypeError);
|
|
});
|
|
|
|
it("error if `saltLength` is less than 0", () => {
|
|
assert.throws(() => {
|
|
provider.checkAlgorithmParams({ saltLength: -1 } as any);
|
|
}, RangeError);
|
|
});
|
|
|
|
it("correct `saltLength`", () => {
|
|
provider.checkAlgorithmParams({ saltLength: 8 } as any);
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|