diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2020-04-10 12:42:22 +0200 |
---|---|---|
committer | Michaƫl Zasso <targos@protonmail.com> | 2020-05-04 14:23:21 +0200 |
commit | e07cca6af6930f082be0a52014a4fd47d6116440 (patch) | |
tree | 0a46386591fe54209e9fb6173732aa06e3e28362 | |
parent | 637442fec9210bf985cf8dae8b8806b6d08e13ef (diff) | |
download | node-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.js | 4 | ||||
-rw-r--r-- | test/parallel/test-crypto-dh.js | 7 |
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', |