diff --git a/lib/internal/crypto/diffiehellman.js b/lib/internal/crypto/diffiehellman.js index 70e4100d500ce9..8f86911757fe1f 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 d98b92b837668f..43bbad38410fd8 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',