UNPKG

cose-kit

Version:

**DEPRECATED:** Use [@auth0/cose](https://www.npmjs.com/package/@auth0/cose).

102 lines (101 loc) 3.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.COSEKey = exports.JWKToCOSEValue = exports.JWKFromCOSEValue = void 0; const kty_js_1 = require("./kty.js"); const cbor_js_1 = require("../cbor.js"); const curve_js_1 = require("./curve.js"); const typedmap_1 = require("@jfromaniello/typedmap"); const headers_js_1 = require("../headers.js"); const jose_1 = require("jose"); const params_js_1 = require("./params.js"); const key_ops_js_1 = require("./key_ops.js"); const base64_js_1 = require("#runtime/base64.js"); const buffer_js_1 = require("#runtime/buffer.js"); const toArray = (v) => Array.isArray(v) ? v : [v]; exports.JWKFromCOSEValue = new Map([ ['kty', (value) => kty_js_1.JWKKeyType[value]], ['crv', (value) => curve_js_1.Curve[value]], ['alg', (value) => headers_js_1.Algorithms[value]], ['kid', (v) => { if (typeof v === 'string') { return v; } return new TextDecoder().decode(v); }], ['key_ops', (v) => toArray(v).map((value) => key_ops_js_1.JWKKeyOps.get(value))], ...([ 'x', 'y', 'd', 'k', ].map((param) => [param, (v) => (0, base64_js_1.encodeBase64URL)(v)])) ]); exports.JWKToCOSEValue = new Map([ ['kty', (value) => kty_js_1.JWKKeyType[value]], ['crv', (value) => curve_js_1.Curve[value]], ['alg', (value) => headers_js_1.Algorithms[value]], ['kid', (v) => (0, buffer_js_1.toBuffer)(v)], ['key_ops', (v) => toArray(v).map((value) => key_ops_js_1.JWKKeyOpsToCOSE.get(value)).flat()], ...([ 'x', 'y', 'd', 'k', ].map((label) => [label, (v) => (0, base64_js_1.decodeBase64URL)(v)])) ]); class COSEKey extends typedmap_1.TypedMap { static import(data) { if (data instanceof Uint8Array) { const decoded = cbor_js_1.encoder.decode(data); return new COSEKey(decoded); } else { return new COSEKey(data); } } static fromJWK(jwk) { var _a; const coseKey = new COSEKey(); const kty = jwk.kty; for (const [key, value] of Object.entries(jwk)) { const jwkKey = ((_a = params_js_1.KTYSpecificJWKParamsRev[kty]) === null || _a === void 0 ? void 0 : _a.get(key)) || params_js_1.JWKParam[key]; const formatter = exports.JWKToCOSEValue.get(key); if (jwkKey && formatter) { coseKey.set(jwkKey, formatter(value)); } } return coseKey; } static async generate(alg, options = {}) { const { privateKey, publicKey } = await (0, jose_1.generateKeyPair)(headers_js_1.Algorithms[alg], { ...options !== null && options !== void 0 ? options : {}, extractable: true }); return { privateKey: COSEKey.fromJWK(await (0, jose_1.exportJWK)(privateKey)), publicKey: COSEKey.fromJWK(await (0, jose_1.exportJWK)(publicKey)), }; } toJWK() { var _a, _b; const result = {}; const kty = kty_js_1.JWKKeyType[this.get(params_js_1.COSEKeyParam.KeyType)]; for (const [key, value] of this) { const jwkKey = (_b = (_a = params_js_1.KTYSpecificJWKParams[kty]) === null || _a === void 0 ? void 0 : _a.get(key)) !== null && _b !== void 0 ? _b : params_js_1.JWKParam[key]; const parser = exports.JWKFromCOSEValue.get(jwkKey); if (parser && jwkKey) { const parsed = parser(value); result[jwkKey] = parsed; } } return result; } toKeyLike() { return (0, jose_1.importJWK)(this.toJWK()); } encode() { return cbor_js_1.encoder.encode(this.esMap); } } exports.COSEKey = COSEKey;