mirror of
https://github.com/danbulant/jose
synced 2026-05-24 20:41:46 +00:00
71 lines
3.7 KiB
JavaScript
71 lines
3.7 KiB
JavaScript
const test = require('ava')
|
|
|
|
const isObject = require('../../lib/help/is_object')
|
|
const Key = require('../../lib/jwk/key/base')
|
|
const { JWKS, JWK: { generateSync }, JWE } = require('../..')
|
|
const key = generateSync('oct')
|
|
const ks = new JWKS.KeyStore(generateSync('EC'), key)
|
|
|
|
const complete = (t, jwe, k, ...keys) => {
|
|
if (typeof k === 'string') {
|
|
keys.unshift(k)
|
|
k = key
|
|
}
|
|
const decrypted = JWE.decrypt(jwe(), k, { complete: true })
|
|
t.is(Object.values(decrypted).length, keys.length)
|
|
if (k instanceof Key) {
|
|
t.is(decrypted.key, k)
|
|
} else {
|
|
t.is(decrypted.key, ks.get(decrypted.protected))
|
|
}
|
|
t.true(keys.every(k => k in decrypted))
|
|
if (keys.includes('header')) {
|
|
t.true(isObject(decrypted.header))
|
|
}
|
|
if (keys.includes('protected')) {
|
|
t.true(isObject(decrypted.protected))
|
|
}
|
|
if (keys.includes('unprotected')) {
|
|
t.true(isObject(decrypted.unprotected))
|
|
}
|
|
if (keys.includes('aad')) {
|
|
t.is(typeof decrypted.aad, 'string')
|
|
}
|
|
t.true(Buffer.isBuffer(decrypted.cleartext))
|
|
}
|
|
|
|
test('compact', complete, () => JWE.encrypt('foo', key), 'cleartext', 'protected', 'key')
|
|
test('flattened', complete, () => JWE.encrypt.flattened('foo', key), 'cleartext', 'protected', 'key')
|
|
test('flattened w/ aad', complete, () => JWE.encrypt.flattened('foo', key, undefined, undefined, 'bar'), 'cleartext', 'protected', 'aad', 'key')
|
|
test('flattened w/ unprotected', complete, () => JWE.encrypt.flattened('foo', key, undefined, { foo: 'bar' }), 'cleartext', 'protected', 'unprotected', 'key')
|
|
test('flattened w/ header', complete, () => {
|
|
const enc = new JWE.Encrypt('foo')
|
|
enc.recipient(key, { foo: 'bar' })
|
|
return enc.encrypt('flattened')
|
|
}, 'cleartext', 'protected', 'header', 'key')
|
|
test('general', complete, () => JWE.encrypt.general('foo', key), 'cleartext', 'protected', 'key')
|
|
test('general w/ aad', complete, () => JWE.encrypt.general('foo', key, undefined, undefined, 'bar'), 'cleartext', 'protected', 'aad', 'key')
|
|
test('general w/ unprotected', complete, () => JWE.encrypt.general('foo', key, undefined, { foo: 'bar' }), 'cleartext', 'protected', 'unprotected', 'key')
|
|
test('general w/ header', complete, () => {
|
|
const enc = new JWE.Encrypt('foo')
|
|
enc.recipient(key, { foo: 'bar' })
|
|
return enc.encrypt('general')
|
|
}, 'cleartext', 'protected', 'header', 'key')
|
|
|
|
test('with keystore > compact', complete, () => JWE.encrypt('foo', key), ks, 'cleartext', 'protected', 'key')
|
|
test('with keystore > flattened', complete, () => JWE.encrypt.flattened('foo', key), ks, 'cleartext', 'protected', 'key')
|
|
test('with keystore > flattened w/ aad', complete, () => JWE.encrypt.flattened('foo', key, undefined, undefined, 'bar'), ks, 'cleartext', 'protected', 'aad', 'key')
|
|
test('with keystore > flattened w/ unprotected', complete, () => JWE.encrypt.flattened('foo', key, undefined, { foo: 'bar' }), ks, 'cleartext', 'protected', 'unprotected', 'key')
|
|
test('with keystore > flattened w/ header', complete, () => {
|
|
const enc = new JWE.Encrypt('foo')
|
|
enc.recipient(key, { foo: 'bar' })
|
|
return enc.encrypt('flattened')
|
|
}, ks, 'cleartext', 'protected', 'header', 'key')
|
|
test('with keystore > general', complete, () => JWE.encrypt.general('foo', key), ks, 'cleartext', 'protected', 'key')
|
|
test('with keystore > general w/ aad', complete, () => JWE.encrypt.general('foo', key, undefined, undefined, 'bar'), ks, 'cleartext', 'protected', 'aad', 'key')
|
|
test('with keystore > general w/ unprotected', complete, () => JWE.encrypt.general('foo', key, undefined, { foo: 'bar' }), ks, 'cleartext', 'protected', 'unprotected', 'key')
|
|
test('with keystore > general w/ header', complete, () => {
|
|
const enc = new JWE.Encrypt('foo')
|
|
enc.recipient(key, { foo: 'bar' })
|
|
return enc.encrypt('general')
|
|
}, ks, 'cleartext', 'protected', 'header', 'key')
|