jose/test/jws/complete.test.js
2019-03-11 21:28:45 +01:00

39 lines
1.9 KiB
JavaScript

const test = require('ava')
const { JWKS, JWK: { generateSync }, JWS } = require('../..')
const Key = require('../../lib/jwk/key/base')
const key = generateSync('oct')
const ks = new JWKS.KeyStore(generateSync('EC'), key)
const complete = (t, jws, k, ...keys) => {
if (typeof k === 'string') {
keys.unshift(k)
k = key
}
const verified = JWS.verify(jws(), k, { complete: true })
t.is(Object.values(verified).length, keys.length)
if (k instanceof Key) {
t.is(verified.key, k)
} else {
t.is(verified.key, ks.get(verified.protected))
}
if (keys.includes('header')) {
t.is(typeof verified.header, 'object')
}
if (keys.includes('protected')) {
t.is(typeof verified.protected, 'object')
}
t.is(typeof verified.payload, 'object')
}
test('compact', complete, () => JWS.sign({}, key), 'payload', 'protected', 'key')
test('flattened', complete, () => JWS.sign.flattened({}, key), 'payload', 'protected', 'key')
test('flattened w/ header', complete, () => JWS.sign.flattened({}, key, undefined, { foo: 'bar' }), 'payload', 'protected', 'header', 'key')
test('general', complete, () => JWS.sign.general({}, key), 'payload', 'protected', 'key')
test('general w/ header', complete, () => JWS.sign.general({}, key, undefined, { foo: 'bar' }), 'payload', 'protected', 'header', 'key')
test('with keystore > compact', complete, () => JWS.sign({}, key), ks, 'payload', 'protected', 'key')
test('with keystore > flattened', complete, () => JWS.sign.flattened({}, key), ks, 'payload', 'protected', 'key')
test('with keystore > flattened w/ header', complete, () => JWS.sign.flattened({}, key, undefined, { foo: 'bar' }), ks, 'payload', 'protected', 'header', 'key')
test('with keystore > general', complete, () => JWS.sign.general({}, key), ks, 'payload', 'protected', 'key')
test('with keystore > general w/ header', complete, () => JWS.sign.general({}, key, undefined, { foo: 'bar' }), ks, 'payload', 'protected', 'header', 'key')