From f4c00893ad26cb409e613598168087b6bd63bd82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Thu, 16 Aug 2018 10:58:06 +0200 Subject: [PATCH] test: add test for different rsa crypto libs --- src/keys/rsa.js | 8 +++++ test/keys/rsa-crypto-libs.js | 65 ++++++++++++++++++++++++++++++++++++ test/node.js | 3 ++ 3 files changed, 76 insertions(+) create mode 100644 test/keys/rsa-crypto-libs.js create mode 100644 test/node.js diff --git a/src/keys/rsa.js b/src/keys/rsa.js index 86e669f..d8bd9bc 100644 --- a/src/keys/rsa.js +++ b/src/keys/rsa.js @@ -3,6 +3,10 @@ const crypto = require('crypto') let keypair try { + if (process.env.LP2P_FORCE_CRYPTO_LIB === 'keypair') { + throw new Error('Force keypair usage') + } + const ursa = require('ursa-optional') // throws if not compiled keypair = ({bits}) => { const key = ursa.generatePrivateKey(bits) @@ -12,6 +16,10 @@ try { } } } catch (e) { + if (process.env.LP2P_FORCE_CRYPTO_LIB === 'ursa') { + throw e + } + keypair = require('keypair') } const setImmediate = require('async/setImmediate') diff --git a/test/keys/rsa-crypto-libs.js b/test/keys/rsa-crypto-libs.js new file mode 100644 index 0000000..87eca9d --- /dev/null +++ b/test/keys/rsa-crypto-libs.js @@ -0,0 +1,65 @@ +'use strict' + +/* eslint-env mocha */ +/* eslint max-nested-callbacks: ["error", 8] */ + +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) +chai.use(require('chai-string')) + +const LIBS = ['ursa', 'keypair'] + +describe('RSA crypto libs', function () { + this.timeout(20 * 1000) + + LIBS.forEach(lib => { + describe(lib, () => { + let crypto + let rsa + + before(() => { + process.env.LP2P_FORCE_CRYPTO_LIB = lib + + for (const path in require.cache) { // clear module cache + if (path.endsWith('.js')) { + delete require.cache[path] + } + } + + crypto = require('../../src') + rsa = crypto.keys.supportedKeys.rsa + }) + + it('generates a valid key', (done) => { + crypto.keys.generateKeyPair('RSA', 512, (err, key) => { + if (err) { + return done(err) + } + + expect(key).to.be.an.instanceof(rsa.RsaPrivateKey) + + key.hash((err, digest) => { + if (err) { + return done(err) + } + + expect(digest).to.have.length(34) + done() + }) + }) + }) + + after(() => { + for (const path in require.cache) { // clear module cache + if (path.endsWith('.js')) { + delete require.cache[path] + } + } + + delete process.env.LP2P_FORCE_CRYPTO_LIB + }) + }) + }) +}) diff --git a/test/node.js b/test/node.js new file mode 100644 index 0000000..7d67c01 --- /dev/null +++ b/test/node.js @@ -0,0 +1,3 @@ +'use strict' + +require('./keys/rsa-crypto-libs')