aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2017-10-24 10:04:25 -0700
committerJames M Snell <jasnell@gmail.com>2017-10-26 07:47:16 -0700
commiteeada6ca63d57354aef3e5907097c56a5b9fb347 (patch)
tree4f622499b23e44bedc34ef2fc1366eb167913979 /lib
parent664512678d8d02e2ef413136cf262dcf7debb42d (diff)
downloadandroid-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.js2
-rw-r--r--lib/internal/crypto/util.js22
-rw-r--r--lib/internal/errors.js2
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',