UNPKG

@adorsys/jwe-codec

Version:

Codec to encrypt any javascript value into a JsonWebEncryption (JWE)

44 lines (37 loc) 1.02 kB
const jose = require('node-jose') const hydra = require('hydration') function isKey (jwk) { return ( ['oct'].includes(jwk.kty) && ['A256KW', 'A256GCMKW', 'A256GCM', 'A128CBC-HS256', undefined].includes(jwk.alg) && ['enc', undefined].includes(jwk.use) && jwk.k.match(/^[A-Za-z0-9_-]{43}$/) ) } async function jwe (jwk) { if (!isKey(jwk)) { throw new Error('bad key') } const key = await jose.JWK.asKey(jwk) async function encrypt (value) { const dehydratedData = hydra.dehydrate({ value }) const cipher = await jose.JWE.createEncrypt({ format: 'compact' }, key).final( JSON.stringify(dehydratedData), 'utf8' ) return cipher } async function decrypt (cipher) { const { value } = await jose.JWE.createDecrypt(key.keystore) .decrypt(cipher) .then(res => res.payload.toString()) .then(payload => hydra.hydrate(JSON.parse(payload))) return value } return { encrypt, decrypt } } jwe.default = jwe module.exports = jwe