Skip to content

Commit f4494d3

Browse files
RafaelGSSpanvatniessen
committed
src: fix error handling on async crypto operations
Fixes: https://hackerone.com/reports/2817648 Co-Authored-By: Filip Skokan <panva.ip@gmail.com> Co-Authored-By: Tobias Nießen <tniessen@tnie.de> Backport-PR-URL: nodejs-private/node-private#688 CVE-ID: CVE-2025-23166 PR-URL: nodejs-private/node-private#709
1 parent edaf54d commit f4494d3

20 files changed

+124
-89
lines changed

src/crypto/crypto_dh.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -523,10 +523,10 @@ MaybeLocal<Value> DHBitsTraits::EncodeOutput(Environment* env,
523523
return out->ToArrayBuffer(env);
524524
}
525525

526-
bool DHBitsTraits::DeriveBits(
527-
Environment* env,
528-
const DHBitsConfig& params,
529-
ByteSource* out) {
526+
bool DHBitsTraits::DeriveBits(Environment* env,
527+
const DHBitsConfig& params,
528+
ByteSource* out,
529+
CryptoJobMode mode) {
530530
*out = StatelessDiffieHellmanThreadsafe(params.private_key.GetAsymmetricKey(),
531531
params.public_key.GetAsymmetricKey());
532532
return true;

src/crypto/crypto_dh.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ struct DHBitsTraits final {
103103
unsigned int offset,
104104
DHBitsConfig* params);
105105

106-
static bool DeriveBits(
107-
Environment* env,
108-
const DHBitsConfig& params,
109-
ByteSource* out_);
106+
static bool DeriveBits(Environment* env,
107+
const DHBitsConfig& params,
108+
ByteSource* out_,
109+
CryptoJobMode mode);
110110

111111
static v8::MaybeLocal<v8::Value> EncodeOutput(Environment* env,
112112
const DHBitsConfig& params,

src/crypto/crypto_ec.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,8 @@ Maybe<void> ECDHBitsTraits::AdditionalConfig(
450450

451451
bool ECDHBitsTraits::DeriveBits(Environment* env,
452452
const ECDHBitsConfig& params,
453-
ByteSource* out) {
453+
ByteSource* out,
454+
CryptoJobMode mode) {
454455
size_t len = 0;
455456
const auto& m_privkey = params.private_.GetAsymmetricKey();
456457
const auto& m_pubkey = params.public_.GetAsymmetricKey();

src/crypto/crypto_ec.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ struct ECDHBitsTraits final {
7878
unsigned int offset,
7979
ECDHBitsConfig* params);
8080

81-
static bool DeriveBits(
82-
Environment* env,
83-
const ECDHBitsConfig& params,
84-
ByteSource* out_);
81+
static bool DeriveBits(Environment* env,
82+
const ECDHBitsConfig& params,
83+
ByteSource* out_,
84+
CryptoJobMode mode);
8585

8686
static v8::MaybeLocal<v8::Value> EncodeOutput(Environment* env,
8787
const ECDHBitsConfig& params,

src/crypto/crypto_hash.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -502,10 +502,10 @@ Maybe<void> HashTraits::AdditionalConfig(
502502
return JustVoid();
503503
}
504504

505-
bool HashTraits::DeriveBits(
506-
Environment* env,
507-
const HashConfig& params,
508-
ByteSource* out) {
505+
bool HashTraits::DeriveBits(Environment* env,
506+
const HashConfig& params,
507+
ByteSource* out,
508+
CryptoJobMode mode) {
509509
EVPMDCtxPointer ctx(EVP_MD_CTX_new());
510510

511511
if (!ctx || EVP_DigestInit_ex(ctx.get(), params.digest, nullptr) <= 0 ||

src/crypto/crypto_hash.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ struct HashTraits final {
7070
unsigned int offset,
7171
HashConfig* params);
7272

73-
static bool DeriveBits(
74-
Environment* env,
75-
const HashConfig& params,
76-
ByteSource* out);
73+
static bool DeriveBits(Environment* env,
74+
const HashConfig& params,
75+
ByteSource* out,
76+
CryptoJobMode mode);
7777

7878
static v8::MaybeLocal<v8::Value> EncodeOutput(Environment* env,
7979
const HashConfig& params,

src/crypto/crypto_hkdf.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ Maybe<void> HKDFTraits::AdditionalConfig(
9696
return JustVoid();
9797
}
9898

99-
bool HKDFTraits::DeriveBits(
100-
Environment* env,
101-
const HKDFConfig& params,
102-
ByteSource* out) {
99+
bool HKDFTraits::DeriveBits(Environment* env,
100+
const HKDFConfig& params,
101+
ByteSource* out,
102+
CryptoJobMode mode) {
103103
auto dp = ncrypto::hkdf(params.digest,
104104
ncrypto::Buffer<const unsigned char>{
105105
.data = reinterpret_cast<const unsigned char*>(

src/crypto/crypto_hkdf.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ struct HKDFTraits final {
4242
unsigned int offset,
4343
HKDFConfig* params);
4444

45-
static bool DeriveBits(
46-
Environment* env,
47-
const HKDFConfig& params,
48-
ByteSource* out);
45+
static bool DeriveBits(Environment* env,
46+
const HKDFConfig& params,
47+
ByteSource* out,
48+
CryptoJobMode mode);
4949

5050
static v8::MaybeLocal<v8::Value> EncodeOutput(Environment* env,
5151
const HKDFConfig& params,

src/crypto/crypto_hmac.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,10 @@ Maybe<void> HmacTraits::AdditionalConfig(
221221
return JustVoid();
222222
}
223223

224-
bool HmacTraits::DeriveBits(
225-
Environment* env,
226-
const HmacConfig& params,
227-
ByteSource* out) {
224+
bool HmacTraits::DeriveBits(Environment* env,
225+
const HmacConfig& params,
226+
ByteSource* out,
227+
CryptoJobMode mode) {
228228
HMACCtxPointer ctx(HMAC_CTX_new());
229229

230230
if (!ctx || !HMAC_Init_ex(ctx.get(),

src/crypto/crypto_hmac.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ struct HmacTraits final {
7373
unsigned int offset,
7474
HmacConfig* params);
7575

76-
static bool DeriveBits(
77-
Environment* env,
78-
const HmacConfig& params,
79-
ByteSource* out);
76+
static bool DeriveBits(Environment* env,
77+
const HmacConfig& params,
78+
ByteSource* out,
79+
CryptoJobMode mode);
8080

8181
static v8::MaybeLocal<v8::Value> EncodeOutput(Environment* env,
8282
const HmacConfig& params,

0 commit comments

Comments
 (0)