Skip to content

Commit

Permalink
crypto: assign and use ERR_CRYPTO_UNKNOWN_CIPHER
Browse files Browse the repository at this point in the history
PR-URL: nodejs#31437
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
tniessen authored and Trott committed Jan 23, 2020
1 parent 085a5c7 commit 8c313ce
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 4 deletions.
5 changes: 5 additions & 0 deletions doc/api/errors.md
Expand Up @@ -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.

<a id="ERR_CRYPTO_UNKNOWN_CIPHER"></a>
### `ERR_CRYPTO_UNKNOWN_CIPHER`

An unknown cipher was specified.

<a id="ERR_CRYPTO_UNKNOWN_DH_GROUP"></a>
### `ERR_CRYPTO_UNKNOWN_DH_GROUP`

Expand Down
6 changes: 3 additions & 3 deletions src/node_crypto.cc
Expand Up @@ -3531,7 +3531,7 @@ static NonCopyableMaybe<PrivateKeyEncodingConfig> GetPrivateKeyEncodingFromJs(
args[*offset].As<String>());
result.cipher_ = EVP_get_cipherbyname(*cipher_name);
if (result.cipher_ == nullptr) {
env->ThrowError("Unknown cipher");
THROW_ERR_CRYPTO_UNKNOWN_CIPHER(env);
return NonCopyableMaybe<PrivateKeyEncodingConfig>();
}
needs_passphrase = true;
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions src/node_errors.h
Expand Up @@ -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) \
Expand Down Expand Up @@ -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") \
Expand Down
6 changes: 5 additions & 1 deletion test/parallel/test-crypto-cipheriv-decipheriv.js
Expand Up @@ -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(
Expand Down
1 change: 1 addition & 0 deletions test/parallel/test-crypto-keygen.js
Expand Up @@ -822,6 +822,7 @@ const sec1EncExp = (cipher) => getRegExpForPEM('EC PRIVATE KEY', cipher);
}
}), {
name: 'Error',
code: 'ERR_CRYPTO_UNKNOWN_CIPHER',
message: 'Unknown cipher'
});

Expand Down

0 comments on commit 8c313ce

Please sign in to comment.