summaryrefslogtreecommitdiff
path: root/lib/internal/crypto/diffiehellman.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal/crypto/diffiehellman.js')
-rw-r--r--lib/internal/crypto/diffiehellman.js12
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/internal/crypto/diffiehellman.js b/lib/internal/crypto/diffiehellman.js
index ae6b68b73b..70e4100d50 100644
--- a/lib/internal/crypto/diffiehellman.js
+++ b/lib/internal/crypto/diffiehellman.js
@@ -14,7 +14,10 @@ const {
ERR_INVALID_ARG_TYPE,
ERR_INVALID_OPT_VALUE
} = require('internal/errors').codes;
-const { validateString } = require('internal/validators');
+const {
+ validateString,
+ validateInt32,
+} = require('internal/validators');
const { isArrayBufferView } = require('internal/util/types');
const { KeyObject } = require('internal/crypto/keys');
const {
@@ -51,6 +54,13 @@ function DiffieHellman(sizeOrKey, keyEncoding, generator, genEncoding) {
);
}
+ // Sizes < 0 don't make sense but they _are_ accepted (and subsequently
+ // rejected with ERR_OSSL_BN_BITS_TOO_SMALL) by OpenSSL. The glue code
+ // in node_crypto.cc accepts values that are IsInt32() for that reason
+ // and that's why we do that here too.
+ if (typeof sizeOrKey === 'number')
+ validateInt32(sizeOrKey, 'sizeOrKey');
+
if (keyEncoding && !Buffer.isEncoding(keyEncoding) &&
keyEncoding !== 'buffer') {
genEncoding = generator;