From 8c313ceedfcc337f05022ffaabf2e42ef26d0cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Mon, 20 Jan 2020 18:14:13 -0400 Subject: [PATCH] crypto: assign and use ERR_CRYPTO_UNKNOWN_CIPHER PR-URL: https://github.com/nodejs/node/pull/31437 Reviewed-By: Anna Henningsen Reviewed-By: David Carlier Reviewed-By: Sam Roberts Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott Reviewed-By: James M Snell --- doc/api/errors.md | 5 +++++ src/node_crypto.cc | 6 +++--- src/node_errors.h | 2 ++ test/parallel/test-crypto-cipheriv-decipheriv.js | 6 +++++- test/parallel/test-crypto-keygen.js | 1 + 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/doc/api/errors.md b/doc/api/errors.md index d091e1b8acf1e2..d16149b00bec50 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -831,6 +831,11 @@ A signing `key` was not provided to the [`sign.sign()`][] method. [`crypto.timingSafeEqual()`][] was called with `Buffer`, `TypedArray`, or `DataView` arguments of different lengths. + +### `ERR_CRYPTO_UNKNOWN_CIPHER` + +An unknown cipher was specified. + ### `ERR_CRYPTO_UNKNOWN_DH_GROUP` diff --git a/src/node_crypto.cc b/src/node_crypto.cc index df823c48c188c9..606b63b753538b 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -3531,7 +3531,7 @@ static NonCopyableMaybe GetPrivateKeyEncodingFromJs( args[*offset].As()); result.cipher_ = EVP_get_cipherbyname(*cipher_name); if (result.cipher_ == nullptr) { - env->ThrowError("Unknown cipher"); + THROW_ERR_CRYPTO_UNKNOWN_CIPHER(env); return NonCopyableMaybe(); } needs_passphrase = true; @@ -4037,7 +4037,7 @@ void CipherBase::Init(const char* cipher_type, const EVP_CIPHER* const cipher = EVP_get_cipherbyname(cipher_type); if (cipher == nullptr) - return env()->ThrowError("Unknown cipher"); + return THROW_ERR_CRYPTO_UNKNOWN_CIPHER(env()); unsigned char key[EVP_MAX_KEY_LENGTH]; unsigned char iv[EVP_MAX_IV_LENGTH]; @@ -4101,7 +4101,7 @@ void CipherBase::InitIv(const char* cipher_type, const EVP_CIPHER* const cipher = EVP_get_cipherbyname(cipher_type); if (cipher == nullptr) { - return env()->ThrowError("Unknown cipher"); + return THROW_ERR_CRYPTO_UNKNOWN_CIPHER(env()); } const int expected_iv_len = EVP_CIPHER_iv_length(cipher); diff --git a/src/node_errors.h b/src/node_errors.h index 96ea94cb563f07..bc180b2a68efd7 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -39,6 +39,7 @@ void PrintErrorString(const char* format, ...); V(ERR_BUFFER_TOO_LARGE, Error) \ V(ERR_CONSTRUCT_CALL_REQUIRED, TypeError) \ V(ERR_CONSTRUCT_CALL_INVALID, TypeError) \ + V(ERR_CRYPTO_UNKNOWN_CIPHER, Error) \ V(ERR_CRYPTO_UNKNOWN_DH_GROUP, Error) \ V(ERR_INVALID_ARG_VALUE, TypeError) \ V(ERR_OSSL_EVP_INVALID_DIGEST, Error) \ @@ -90,6 +91,7 @@ void PrintErrorString(const char* format, ...); "Buffer is not available for the current Context") \ V(ERR_CONSTRUCT_CALL_INVALID, "Constructor cannot be called") \ V(ERR_CONSTRUCT_CALL_REQUIRED, "Cannot call constructor without `new`") \ + V(ERR_CRYPTO_UNKNOWN_CIPHER, "Unknown cipher") \ V(ERR_CRYPTO_UNKNOWN_DH_GROUP, "Unknown DH group") \ V(ERR_INVALID_TRANSFER_OBJECT, "Found invalid object in transferList") \ V(ERR_MEMORY_ALLOCATION_FAILED, "Failed to allocate memory") \ diff --git a/test/parallel/test-crypto-cipheriv-decipheriv.js b/test/parallel/test-crypto-cipheriv-decipheriv.js index e2279a689c05ec..07591fdfffd072 100644 --- a/test/parallel/test-crypto-cipheriv-decipheriv.js +++ b/test/parallel/test-crypto-cipheriv-decipheriv.js @@ -210,7 +210,11 @@ for (let n = 1; n < 256; n += 1) { // Passing an invalid cipher name should throw. assert.throws( () => crypto.createCipheriv('aes-127', Buffer.alloc(16), null), - /Unknown cipher/); + { + name: 'Error', + code: 'ERR_CRYPTO_UNKNOWN_CIPHER', + message: 'Unknown cipher' + }); // Passing a key with an invalid length should throw. assert.throws( diff --git a/test/parallel/test-crypto-keygen.js b/test/parallel/test-crypto-keygen.js index e408d54164e659..1f059c469419fc 100644 --- a/test/parallel/test-crypto-keygen.js +++ b/test/parallel/test-crypto-keygen.js @@ -822,6 +822,7 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher); } }), { name: 'Error', + code: 'ERR_CRYPTO_UNKNOWN_CIPHER', message: 'Unknown cipher' });