UNPKG

@nfen/webcrypto-ts

Version:
96 lines 3.01 kB
import * as proxy from "../proxy.js"; import { AesShared, Alg, } from "./shared.js"; /** @hidden */ export const handler = { get(target, prop) { switch (prop) { case "self": return target; case "wrapKey": return (format, key) => wrapKey(format, key, target); case "unwrapKey": return (format, wrappedKey, wrappedKeyAlgorithm, extractable, keyUsages) => unwrapKey(format, wrappedKey, wrappedKeyAlgorithm, target, extractable, keyUsages); case "exportKey": return (format) => exportKey(format, target); } return Reflect.get(target, prop); }, }; /** * Generate a new AES_KW key * @example * ```ts * const key = await AES_KW.generateKey(); * ``` */ export async function generateKey(algorithm = { length: 256, }, extractable = true, keyUsages) { const key = (await AesShared.generateKey({ ...algorithm, name: Alg.Mode.AES_KW, }, extractable, keyUsages)); return proxy.proxifyKey(handler)(key); } /** * Import an AES_KW key from the specified format * @example * ```ts * const key = await AES_KW.importKey("jwk", jwk); * ``` */ export async function importKey(format, key, extractable, keyUsages) { const importedKey = (await AesShared.importKey(format, key, { name: Alg.Mode.AES_KW, }, extractable, keyUsages)); return proxy.proxifyKey(handler)(importedKey); } /** * Export an AES_KW key into the specified format * @example * ```ts * const jwk = await AES_KW.exportKey("jwk", key.self); * ``` * @example * ```ts * const jwk = await key.exportKey("jwk"); * ``` */ export const exportKey = async (format, key) => AesShared.exportKey(format, key); /** * Wrap another key with an AES_KW key * @example * ```ts * const kek = await AES_KW.generateKey({length: 256}, true, ['wrapKey', 'unwrapKey']); * const dek = await AES_GCM.generateKey(); * const wrappedKey = await AES_KW.wrapKey("raw", dek.self, kek.self); * ``` * @example * ```ts * const kek = await AES_KW.generateKey({length: 256}, true, ['wrapKey', 'unwrapKey']); * const dek = await AES_GCM.generateKey(); * const wrappedKey = await kek.wrapKey("raw", dek.self); * ``` */ export async function wrapKey(format, key, wrappingkey) { return await AesShared.wrapKey(format, key, wrappingkey, { name: Alg.Mode.AES_KW, }); } /** * Unwrap a wrapped key using the key encryption key * @example * ```ts * const dek = await AES_KW.unwrapKey("raw", wrappedKey, {name: "AES_GCM"}, kek.self); * ``` * @example * ```ts * const dek = await kek.unwrapKey("raw", wrappedKey, {name: "AES_GCM"}); * ``` */ export async function unwrapKey(format, wrappedKey, wrappedKeyAlgorithm, unwrappingKey, extractable = true, keyUsages) { return await AesShared.unwrapKey(format, wrappedKey, wrappedKeyAlgorithm, unwrappingKey, { name: Alg.Mode.AES_KW, }, extractable, keyUsages); } //# sourceMappingURL=aes_kw.js.map