summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2020-04-10 12:42:22 +0200
committerMichaƫl Zasso <targos@protonmail.com>2020-05-04 14:23:21 +0200
commite07cca6af6930f082be0a52014a4fd47d6116440 (patch)
tree0a46386591fe54209e9fb6173732aa06e3e28362
parent637442fec9210bf985cf8dae8b8806b6d08e13ef (diff)
downloadnode-new-e07cca6af6930f082be0a52014a4fd47d6116440.tar.gz
crypto: generator must be int32 in DiffieHellman()
Validate the generator argument in `crypto.createDiffieHellman(key, g)`. When it's a number, it should be an int32. Fixes: https://github.com/nodejs/node/issues/32748 PR-URL: https://github.com/nodejs/node/pull/32739 Fixes: https://github.com/nodejs/node/issues/32738 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Zeyu Yang <himself65@outlook.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
-rw-r--r--lib/internal/crypto/diffiehellman.js4
-rw-r--r--test/parallel/test-crypto-dh.js7
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/internal/crypto/diffiehellman.js b/lib/internal/crypto/diffiehellman.js
index 70e4100d50..8f86911757 100644
--- a/lib/internal/crypto/diffiehellman.js
+++ b/lib/internal/crypto/diffiehellman.js
@@ -77,7 +77,9 @@ function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) {
if (!generator)
generator = DH_GENERATOR;
- else if (typeof generator !== 'number')
+ else if (typeof generator === 'number')
+ validateInt32(generator, 'generator');
+ else
generator = toBuf(generator, genEncoding);
this[kHandle] = new _DiffieHellman(sizeOrKey, generator);
diff --git a/test/parallel/test-crypto-dh.js b/test/parallel/test-crypto-dh.js
index f5eddb8c88..e1c5db9683 100644
--- a/test/parallel/test-crypto-dh.js
+++ b/test/parallel/test-crypto-dh.js
@@ -30,6 +30,13 @@ assert.throws(() => crypto.createDiffieHellman(13.37), {
'It must be an integer. Received 13.37',
});
+assert.throws(() => crypto.createDiffieHellman('abcdef', 13.37), {
+ code: 'ERR_OUT_OF_RANGE',
+ name: 'RangeError',
+ message: 'The value of "generator" is out of range. ' +
+ 'It must be an integer. Received 13.37',
+});
+
for (const bits of [-1, 0, 1]) {
assert.throws(() => crypto.createDiffieHellman(bits), {
code: 'ERR_OSSL_BN_BITS_TOO_SMALL',