diff options
author | James M Snell <jasnell@gmail.com> | 2017-10-24 10:04:25 -0700 |
---|---|---|
committer | James M Snell <jasnell@gmail.com> | 2017-10-26 07:47:16 -0700 |
commit | eeada6ca63d57354aef3e5907097c56a5b9fb347 (patch) | |
tree | 4f622499b23e44bedc34ef2fc1366eb167913979 /lib | |
parent | 664512678d8d02e2ef413136cf262dcf7debb42d (diff) | |
download | android-node-v8-eeada6ca63d57354aef3e5907097c56a5b9fb347.tar.gz android-node-v8-eeada6ca63d57354aef3e5907097c56a5b9fb347.tar.bz2 android-node-v8-eeada6ca63d57354aef3e5907097c56a5b9fb347.zip |
crypto: migrate timingSafeEqual to internal/errors
PR-URL: https://github.com/nodejs/node/pull/16448
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/crypto.js | 2 | ||||
-rw-r--r-- | lib/internal/crypto/util.js | 22 | ||||
-rw-r--r-- | lib/internal/errors.js | 2 |
3 files changed, 24 insertions, 2 deletions
diff --git a/lib/crypto.js b/lib/crypto.js index 1337cccf2c..0082172c5c 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -34,7 +34,6 @@ const constants = process.binding('constants').crypto; const { getFipsCrypto, setFipsCrypto, - timingSafeEqual } = process.binding('crypto'); const { randomBytes, @@ -75,6 +74,7 @@ const { getHashes, setDefaultEncoding, setEngine, + timingSafeEqual, toBuf } = require('internal/crypto/util'); const Certificate = require('internal/crypto/certificate'); diff --git a/lib/internal/crypto/util.js b/lib/internal/crypto/util.js index 84ad1fb2c7..ac01a447bc 100644 --- a/lib/internal/crypto/util.js +++ b/lib/internal/crypto/util.js @@ -4,7 +4,8 @@ const { getCiphers: _getCiphers, getCurves: _getCurves, getHashes: _getHashes, - setEngine: _setEngine + setEngine: _setEngine, + timingSafeEqual: _timingSafeEqual } = process.binding('crypto'); const { @@ -17,6 +18,9 @@ const { cachedResult, filterDuplicateStrings } = require('internal/util'); +const { + isArrayBufferView +} = require('internal/util/types'); var defaultEncoding = 'buffer'; @@ -60,6 +64,21 @@ function setEngine(id, flags) { throw new errors.Error('ERR_CRYPTO_ENGINE_UNKNOWN', id); } +function timingSafeEqual(a, b) { + if (!isArrayBufferView(a)) { + throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'a', + ['Buffer', 'TypedArray', 'DataView']); + } + if (!isArrayBufferView(b)) { + throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'b', + ['Buffer', 'TypedArray', 'DataView']); + } + if (a.length !== b.length) { + throw new errors.RangeError('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH'); + } + return _timingSafeEqual(a, b); +} + module.exports = { getCiphers, getCurves, @@ -67,5 +86,6 @@ module.exports = { getHashes, setDefaultEncoding, setEngine, + timingSafeEqual, toBuf }; diff --git a/lib/internal/errors.js b/lib/internal/errors.js index e211333648..48eb6b8935 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -160,6 +160,8 @@ E('ERR_CRYPTO_HASH_FINALIZED', 'Digest already called'); E('ERR_CRYPTO_HASH_UPDATE_FAILED', 'Hash update failed'); E('ERR_CRYPTO_INVALID_DIGEST', 'Invalid digest: %s'); E('ERR_CRYPTO_SIGN_KEY_REQUIRED', 'No key provided to sign'); +E('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH', + 'Input buffers must have the same length'); E('ERR_DNS_SET_SERVERS_FAILED', (err, servers) => `c-ares failed to set servers: "${err}" [${servers}]`); E('ERR_ENCODING_INVALID_ENCODED_DATA', |