From 5f6f3920a2859d5fd5afef6d228b6ede3953e473 Mon Sep 17 00:00:00 2001 From: Filip Skokan Date: Fri, 8 Feb 2019 22:07:03 +0100 Subject: [PATCH] test: generate and generate async --- test/jwk/generate.test.js | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 test/jwk/generate.test.js diff --git a/test/jwk/generate.test.js b/test/jwk/generate.test.js new file mode 100644 index 00000000..fc627c8a --- /dev/null +++ b/test/jwk/generate.test.js @@ -0,0 +1,110 @@ +const test = require('ava') + +const { JWK: { generate, generateSync } } = require('../..'); + +[ + ['rsa'], + ['RSA'], + ['RSA', undefined, undefined, true], + ['RSA', undefined, undefined, false], + ['RSA', 2048], + ['RSA', 2048, { use: 'sig' }], + ['RSA', 2048, { use: 'enc' }], + ['RSA', 2048, { use: 'sig', alg: 'PS256' }], + ['RSA', 2048, { use: 'enc', alg: 'RSA-OAEP' }], + ['RSA', 2048, { alg: 'PS256' }], + ['RSA', 2048, { alg: 'RSA-OAEP' }], + ['ec'], + ['EC'], + ['EC', undefined, undefined, true], + ['EC', undefined, undefined, false], + ['EC', 'P-256'], + ['EC', 'P-256', { use: 'sig' }], + ['EC', 'P-256', { use: 'enc' }], + ['EC', 'P-256', { use: 'sig', alg: 'ES256' }], + ['EC', 'P-256', { use: 'enc', alg: 'ECDH-ES' }], + ['EC', 'P-256', { alg: 'ES256' }], + ['EC', 'P-256', { alg: 'ECDH-ES' }], + ['EC', 'P-384'], + ['EC', 'P-384', { use: 'sig' }], + ['EC', 'P-384', { use: 'enc' }], + ['EC', 'P-384', { use: 'sig', alg: 'ES384' }], + ['EC', 'P-384', { use: 'enc', alg: 'ECDH-ES' }], + ['EC', 'P-384', { alg: 'ES384' }], + ['EC', 'P-384', { alg: 'ECDH-ES' }], + ['EC', 'P-521'], + ['EC', 'P-521', { use: 'sig' }], + ['EC', 'P-521', { use: 'enc' }], + ['EC', 'P-521', { use: 'sig', alg: 'ES512' }], + ['EC', 'P-521', { use: 'enc', alg: 'ECDH-ES' }], + ['EC', 'P-521', { alg: 'ES512' }], + ['EC', 'P-521', { alg: 'ECDH-ES' }], + ['oct'], + ['oct', 192], + ['oct', 192, { use: 'sig' }], + ['oct', 192, { use: 'enc' }], + ['oct', 192, { use: 'sig', alg: 'HS256' }], + ['oct', 192, { use: 'enc', alg: 'A192GCM' }], + ['oct', 192, { alg: 'HS256' }], + ['oct', 192, { alg: 'A192GCM' }] +].forEach((args) => { + test(`sync generates ${args[0]}(${args[1]}) with options ${JSON.stringify(args[2])}${typeof args[3] === 'boolean' ? ` and private=${args[3]}` : ''}`, t => { + const key = generateSync(args[0], args[1], args[2], args[3]) + t.truthy(key) + + if (key.kty !== 'oct') { + if (args.length === 4) { + if (args[3] === true) { + t.true(key.private) + t.false(key.public) + } else { + t.true(key.public) + t.false(key.private) + } + } else { + t.true(key.private) + t.false(key.public) + } + } + + if (args[2]) { + const { use, alg } = args[2] + t.is(key.use, use) + t.is(key.alg, alg) + + if (alg) { + t.deepEqual([...key.algorithms()], [alg]) + } + } + }) + + test(`async generates ${args[0]}(${args[1]}) with options ${JSON.stringify(args[2])}${typeof args[3] === 'boolean' ? ` and private=${args[3]}` : ''}`, async t => { + const key = await generate(args[0], args[1], args[2], args[3]) + t.truthy(key) + + if (key.kty !== 'oct') { + if (args.length === 4) { + if (args[3] === true) { + t.true(key.private) + t.false(key.public) + } else { + t.true(key.public) + t.false(key.private) + } + } else { + t.true(key.private) + t.false(key.public) + } + } + + if (args[2]) { + const { use, alg } = args[2] + t.is(key.use, use) + t.is(key.alg, alg) + + if (alg) { + t.deepEqual([...key.algorithms()], [alg]) + } + } + }) +})