From 30633acf202d23d5866b56f15374d0ac8721be77 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 e1a1f2e7f2ab28..34ea548cba62c2 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -829,6 +829,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 5057c002195ce1..1a532ae66f1de2 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -2966,7 +2966,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; @@ -3492,7 +3492,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]; @@ -3556,7 +3556,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 e7f49437699618..a05ce8f6bfb1bd 100644 --- a/src/node_errors.h +++ b/src/node_errors.h @@ -37,6 +37,7 @@ void OnFatalError(const char* location, const char* message); 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 OnFatalError(const char* location, const char* message); "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' });