ts-jose
Version:
Wrap functions of JOSE in steady interface
42 lines • 1.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.JWE = void 0;
const jose_1 = require("jose");
class JWE {
static async decrypt(cypher, key, options) {
const jwk = await this.getKeyFrom(cypher, key, options);
if (typeof options?.enc === 'string')
options.enc = [options.enc];
if (typeof options?.alg === 'string')
options.alg = [options.alg];
const result = await (0, jose_1.compactDecrypt)(cypher, jwk.key, {
contentEncryptionAlgorithms: options?.enc ? [...options.enc] : undefined,
keyManagementAlgorithms: options?.alg ? [...options.alg] : undefined,
});
const decoder = new TextDecoder();
return decoder.decode(result.plaintext);
}
static async encrypt(data, key, options) {
const jwk = key.getKey({
use: 'enc',
kid: options.kid,
});
const encoder = new TextEncoder();
const jwe = new jose_1.CompactEncrypt(encoder.encode(data));
jwe.setProtectedHeader({
alg: options.alg,
enc: options.enc,
kid: options.kid ?? jwk.kid,
});
return jwe.encrypt((await jwk.toPublic()).key);
}
static getKeyFrom(cypher, jwk, options) {
const header = (0, jose_1.decodeProtectedHeader)(cypher);
return Promise.resolve(jwk.getKey({
use: 'enc',
kid: options?.kid ? options.kid : header.kid,
}));
}
}
exports.JWE = JWE;
//# sourceMappingURL=jwe.js.map