Skip to content

Commit

Permalink
crypto: cleanup validation
Browse files Browse the repository at this point in the history
Many of the validations could be simplified and cleaned up by using validators and to keep consistency.
  • Loading branch information
VoltrexKeyva authored Aug 22, 2021
1 parent 82ae00c commit 20e97e5
Showing 1 changed file with 22 additions and 29 deletions.
51 changes: 22 additions & 29 deletions lib/internal/crypto/keygen.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ const {
const { customPromisifyArgs } = require('internal/util');

const {
isInt32,
isUint32,
validateBuffer,
validateCallback,
validateString,
validateInt32,
validateInteger,
validateObject,
validateOneOf,
validateUint32,
} = require('internal/validators');

const {
Expand Down Expand Up @@ -172,16 +173,13 @@ function createJob(mode, type, options) {
{
validateObject(options, 'options');
const { modulusLength } = options;
if (!isUint32(modulusLength))
throw new ERR_INVALID_ARG_VALUE('options.modulusLength', modulusLength);
validateUint32(modulusLength, 'options.modulusLength');

let { publicExponent } = options;
if (publicExponent == null) {
publicExponent = 0x10001;
} else if (!isUint32(publicExponent)) {
throw new ERR_INVALID_ARG_VALUE(
'options.publicExponent',
publicExponent);
} else {
validateUint32(publicExponent, 'options.publicExponent');
}

if (type === 'rsa') {
Expand All @@ -194,12 +192,12 @@ function createJob(mode, type, options) {
}

const { hash, mgf1Hash, saltLength } = options;
if (hash !== undefined && typeof hash !== 'string')
throw new ERR_INVALID_ARG_VALUE('options.hash', hash);
if (mgf1Hash !== undefined && typeof mgf1Hash !== 'string')
throw new ERR_INVALID_ARG_VALUE('options.mgf1Hash', mgf1Hash);
if (saltLength !== undefined && (!isInt32(saltLength) || saltLength < 0))
throw new ERR_INVALID_ARG_VALUE('options.saltLength', saltLength);
if (hash !== undefined)
validateString(hash, 'options.hash');
if (mgf1Hash !== undefined)
validateString(mgf1Hash, 'options.mgf1Hash');
if (saltLength !== undefined)
validateInt32(saltLength, 'options.saltLength', 0);

return new RsaKeyPairGenJob(
mode,
Expand All @@ -215,15 +213,13 @@ function createJob(mode, type, options) {
{
validateObject(options, 'options');
const { modulusLength } = options;
if (!isUint32(modulusLength))
throw new ERR_INVALID_ARG_VALUE('options.modulusLength', modulusLength);
validateUint32(modulusLength, 'options.modulusLength');

let { divisorLength } = options;
if (divisorLength == null) {
divisorLength = -1;
} else if (!isInt32(divisorLength) || divisorLength < 0) {
throw new ERR_INVALID_ARG_VALUE('options.divisorLength', divisorLength);
}
} else
validateInt32(divisorLength, 'options.divisorLength', 0);

return new DsaKeyPairGenJob(
mode,
Expand All @@ -235,8 +231,7 @@ function createJob(mode, type, options) {
{
validateObject(options, 'options');
const { namedCurve } = options;
if (typeof namedCurve !== 'string')
throw new ERR_INVALID_ARG_VALUE('options.namedCurve', namedCurve);
validateString(namedCurve, 'options.namedCurve');
let { paramEncoding } = options;
if (paramEncoding == null || paramEncoding === 'named')
paramEncoding = OPENSSL_EC_NAMED_CURVE;
Expand Down Expand Up @@ -284,28 +279,26 @@ function createJob(mode, type, options) {
throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');
if (generator != null)
throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');
if (typeof group !== 'string')
throw new ERR_INVALID_ARG_VALUE('options.group', group);

validateString(group, 'options.group');

return new DhKeyPairGenJob(mode, group, ...encoding);
}

if (prime != null) {
if (primeLength != null)
throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');
if (!isArrayBufferView(prime))
throw new ERR_INVALID_ARG_VALUE('options.prime', prime);

validateBuffer(prime, 'options.prime');
} else if (primeLength != null) {
if (!isInt32(primeLength) || primeLength < 0)
throw new ERR_INVALID_ARG_VALUE('options.primeLength', primeLength);
validateInt32(primeLength, 'options.primeLength', 0);
} else {
throw new ERR_MISSING_OPTION(
'At least one of the group, prime, or primeLength options');
}

if (generator != null) {
if (!isInt32(generator) || generator < 0)
throw new ERR_INVALID_ARG_VALUE('options.generator', generator);
validateInt32(generator, 'options.generator', 0);
}
return new DhKeyPairGenJob(
mode,
Expand Down

0 comments on commit 20e97e5

Please sign in to comment.