From 2e8e0707d0ec1bcbbeddbd1e7bcc7d50337d2510 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 22 Jun 2019 15:38:22 -0600 Subject: [PATCH] test: split pummel crypto dh test into two separate tests Split test-crypto-dh into two tests so that it does not time out in CI. With a recent OpenSSL upgrade, getDiffieHellman() is much slower than before. PR-URL: https://github.com/nodejs/node/pull/28390 Reviewed-By: Ben Noordhuis Reviewed-By: Daniel Bevenius --- ...st-crypto-dh.js => test-crypto-dh-hash.js} | 13 ------ test/pummel/test-crypto-dh-keys.js | 42 +++++++++++++++++++ 2 files changed, 42 insertions(+), 13 deletions(-) rename test/pummel/{test-crypto-dh.js => test-crypto-dh-hash.js} (82%) create mode 100644 test/pummel/test-crypto-dh-keys.js diff --git a/test/pummel/test-crypto-dh.js b/test/pummel/test-crypto-dh-hash.js similarity index 82% rename from test/pummel/test-crypto-dh.js rename to test/pummel/test-crypto-dh-hash.js index a88e105a8aa..ffe11d1c124 100644 --- a/test/pummel/test-crypto-dh.js +++ b/test/pummel/test-crypto-dh-hash.js @@ -47,16 +47,3 @@ for (const name in hashes) { assert.strictEqual(hash1, hash2); assert.strictEqual(group.getGenerator('hex'), '02'); } - -for (const name in hashes) { - // modp1 is 768 bits, FIPS requires >= 1024 - if (name === 'modp1' && common.hasFipsCrypto) - continue; - const group1 = crypto.getDiffieHellman(name); - const group2 = crypto.getDiffieHellman(name); - group1.generateKeys(); - group2.generateKeys(); - const key1 = group1.computeSecret(group2.getPublicKey()); - const key2 = group2.computeSecret(group1.getPublicKey()); - assert.deepStrictEqual(key1, key2); -} diff --git a/test/pummel/test-crypto-dh-keys.js b/test/pummel/test-crypto-dh-keys.js new file mode 100644 index 00000000000..f8f990b5c5e --- /dev/null +++ b/test/pummel/test-crypto-dh-keys.js @@ -0,0 +1,42 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; +const common = require('../common'); +if (!common.hasCrypto) + common.skip('node compiled without OpenSSL.'); + +const assert = require('assert'); +const crypto = require('crypto'); + +[ 'modp1', 'modp2', 'modp5', 'modp14', 'modp15', 'modp16', 'modp17' ] +.forEach((name) => { + // modp1 is 768 bits, FIPS requires >= 1024 + if (name === 'modp1' && common.hasFipsCrypto) + return; + const group1 = crypto.getDiffieHellman(name); + const group2 = crypto.getDiffieHellman(name); + group1.generateKeys(); + group2.generateKeys(); + const key1 = group1.computeSecret(group2.getPublicKey()); + const key2 = group2.computeSecret(group1.getPublicKey()); + assert.deepStrictEqual(key1, key2); +});