Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine du Hamel <duhamelantoine1995@gmail.com>2021-03-19 14:06:50 +0300
committerRuy Adorno <ruyadorno@hotmail.com>2021-03-24 04:25:30 +0300
commit79259389a198185ec8ef4d74fa38eb3adc99477c (patch)
treee0ee44875bd22efd9fa33fbff1fbe1a1e1413292
parent3452618905eef45975ce457695c8f32be38ea4a1 (diff)
crypto: fix DiffieHellman argument validation
Fixes: https://github.com/nodejs/node/issues/37808 PR-URL: https://github.com/nodejs/node/pull/37810 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Filip Skokan <panva.ip@gmail.com> Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
-rw-r--r--lib/internal/crypto/diffiehellman.js14
-rw-r--r--test/parallel/test-crypto-dh.js6
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/internal/crypto/diffiehellman.js b/lib/internal/crypto/diffiehellman.js
index 1132b090d36..e2106b211ba 100644
--- a/lib/internal/crypto/diffiehellman.js
+++ b/lib/internal/crypto/diffiehellman.js
@@ -118,12 +118,20 @@ function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) {
if (typeof sizeOrKey !== 'number')
sizeOrKey = toBuf(sizeOrKey, keyEncoding);
- if (!generator)
+ if (!generator) {
generator = DH_GENERATOR;
- else if (typeof generator === 'number')
+ } else if (typeof generator === 'number') {
validateInt32(generator, 'generator');
- else
+ } else if (generator !== true) {
generator = toBuf(generator, genEncoding);
+ } else {
+ throw new ERR_INVALID_ARG_TYPE(
+ 'generator',
+ ['number', 'string', 'ArrayBuffer', 'Buffer', 'TypedArray', 'DataView'],
+ generator
+ );
+ }
+
this[kHandle] = new _DiffieHellman(sizeOrKey, generator);
ObjectDefineProperty(this, 'verifyError', {
diff --git a/test/parallel/test-crypto-dh.js b/test/parallel/test-crypto-dh.js
index d08d07de4f8..92687b448c4 100644
--- a/test/parallel/test-crypto-dh.js
+++ b/test/parallel/test-crypto-dh.js
@@ -489,3 +489,9 @@ assert.throws(
'crypto.getDiffieHellman(\'modp1\').setPublicKey(\'\') ' +
'failed to throw the expected error.'
);
+assert.throws(
+ () => crypto.createDiffieHellman('', true),
+ {
+ code: 'ERR_INVALID_ARG_TYPE'
+ }
+);