From a78327f48be4266e250ad4c2170a0f263b47bc5f Mon Sep 17 00:00:00 2001 From: James M Snell Date: Mon, 23 Oct 2017 23:06:53 -0700 Subject: [PATCH] crypto: migrate setEngine to internal/errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/16429 Reviewed-By: Luigi Pinca Reviewed-By: Michaƫl Zasso Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Joyee Cheung --- doc/api/errors.md | 7 +++++++ lib/internal/crypto/util.js | 3 ++- lib/internal/errors.js | 1 + src/node_crypto.cc | 12 +++++------- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/api/errors.md b/doc/api/errors.md index 6de2e6f3afad8b..804d26ab2968f0 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -637,6 +637,12 @@ Used when the native call from `process.cpuUsage` cannot be processed properly. Used when an invalid value for the `format` argument has been passed to the `crypto.ECDH()` class `getPublicKey()` method. + +### ERR_CRYPTO_ENGINE_UNKNOWN + +Used when an invalid crypto engine identifier is passed to +[`require('crypto').setEngine()`][]. + ### ERR_CRYPTO_INVALID_DIGEST @@ -1357,6 +1363,7 @@ closed. [`new URLSearchParams(iterable)`]: url.html#url_constructor_new_urlsearchparams_iterable [`process.on('uncaughtException')`]: process.html#process_event_uncaughtexception [`process.send()`]: process.html#process_process_send_message_sendhandle_options_callback +[`require('crypto').setEngine()`]: crypto.html#crypto_crypto_setengine_engine_flags [Node.js Error Codes]: #nodejs-error-codes [V8's stack trace API]: https://github.com/v8/v8/wiki/Stack-Trace-API [WHATWG URL API]: url.html#url_the_whatwg_url_api diff --git a/lib/internal/crypto/util.js b/lib/internal/crypto/util.js index 9e242dc917045d..84ad1fb2c7ef1d 100644 --- a/lib/internal/crypto/util.js +++ b/lib/internal/crypto/util.js @@ -56,7 +56,8 @@ function setEngine(id, flags) { if (flags === 0) flags = ENGINE_METHOD_ALL; - return _setEngine(id, flags); + if (!_setEngine(id, flags)) + throw new errors.Error('ERR_CRYPTO_ENGINE_UNKNOWN', id); } module.exports = { diff --git a/lib/internal/errors.js b/lib/internal/errors.js index cc787b6061d831..e21133364835da 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -154,6 +154,7 @@ E('ERR_CONSOLE_WRITABLE_STREAM', 'Console expects a writable stream instance for %s'); E('ERR_CPU_USAGE', 'Unable to obtain cpu usage %s'); E('ERR_CRYPTO_ECDH_INVALID_FORMAT', 'Invalid ECDH format: %s'); +E('ERR_CRYPTO_ENGINE_UNKNOWN', 'Engine "%s" was not found'); E('ERR_CRYPTO_HASH_DIGEST_NO_UTF16', 'hash.digest() does not support UTF-16'); E('ERR_CRYPTO_HASH_FINALIZED', 'Digest already called'); E('ERR_CRYPTO_HASH_UPDATE_FAILED', 'Hash update failed'); diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 7decd7dd1821e5..450a841eaea0da 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -5946,19 +5946,17 @@ void SetEngine(const FunctionCallbackInfo& args) { if (engine == nullptr) { int err = ERR_get_error(); - if (err == 0) { - char tmp[1024]; - snprintf(tmp, sizeof(tmp), "Engine \"%s\" was not found", *engine_id); - return env->ThrowError(tmp); - } else { - return ThrowCryptoError(env, err); - } + if (err == 0) + return args.GetReturnValue().Set(false); + return ThrowCryptoError(env, err); } int r = ENGINE_set_default(engine, flags); ENGINE_free(engine); if (r == 0) return ThrowCryptoError(env, ERR_get_error()); + + args.GetReturnValue().Set(true); } #endif // !OPENSSL_NO_ENGINE