Skip to content

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Aug 26, 2025

2025-08-27, Version 24.7.0 (Current), @targos

Notable Changes

Post-Quantum Cryptography in node:crypto

OpenSSL 3.5 on 24.x kicked off post-quantum cryptography efforts in Node.js by
allowing use of NIST's post-quantum cryptography standards for future-proofing
applications against quantum computing threats. The following post-quantum
algorithms are now available in node:crypto:

  • ML-KEM (FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard) through new crypto.encapsulate() and crypto.decapsulate() methods.
  • ML-DSA (FIPS 204, Module-Lattice-Based Digital Signature Standard) in the existing crypto.sign() and crypto.verify() methods.

Contributed by Filip Skokan in #59259 and #59491.

Modern Algorithms in Web Cryptography API

The second substantial extension to the Web Cryptography API
(globalThis.crypto.subtle) was recently accepted for incubation by WICG.
The following algorithms and methods from this extension are now available in
the Node.js Web Cryptography API implementation:

  • AES-OCB
  • ChaCha20-Poly1305
  • ML-DSA
  • ML-KEM
  • SHA-3
  • SHAKE
  • subtle.getPublicKey()
  • SubtleCrypto.supports()
  • ... with more coming in future releases.

Contributed by Filip Skokan in #59365, #59569, #59461, and #59539.

Node.js execution argument support in single executable applications

The single executable application configuration now supports additional fields
to specify Node.js execution arguments and control how they can be extended when
the application is run.

  • execArgv takes an array of strings for the execution arguments to be used.
  • execArgvExtension takes one of the following values:
    • "none": No additional execution arguments are allowed.
    • "cli": Additional execution arguments can be provided via a special command-line flag --node-options="--flag1 --flag2=value" at run time.
    • "env" (default): Additional execution arguments can be provided via the NODE_OPTIONS environment variable at run time.

For example, with the following configuration:

{
  "main": "/path/to/bundled/script.js",
  "output": "/path/to/write/the/generated/blob.blob",
  "execArgv": ["--no-warnings"],
  "execArgvExtension": "cli",
}

If the generated single executable application is named sea, then running:

sea --node-options="--max-old-space-size=4096" user-arg1 user-arg2

Would be equivalent to running:

node --no-warnings --max-old-space-size=4096 /path/to/bundled/script.js user-arg1 user-arg2

Contributed by Joyee Cheung in #59314 and #59560.

Root certificates updated to NSS 3.114

Certificates added:

  • TrustAsia TLS ECC Root CA
  • TrustAsia TLS RSA Root CA
  • SwissSign RSA TLS Root CA 2022 - 1

Certificates removed:

  • GlobalSign Root CA
  • Entrust.net Premium 2048 Secure Server CA
  • Baltimore CyberTrust Root
  • Comodo AAA Services root
  • XRamp Global CA Root
  • Go Daddy Class 2 CA
  • Starfield Class 2 CA

Other Notable Changes

  • [d3afc63c44] - (SEMVER-MINOR) crypto: add argon2() and argon2Sync() methods (Ranieri Althoff) #50353
  • [6ae202fcdf] - (SEMVER-MINOR) http: add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) #59315
  • [dafee05358] - (SEMVER-MINOR) http2: add support for raw header arrays in h2Stream.respond() (Tim Perry) #59455
  • [8dc6f5b696] - (SEMVER-MINOR) stream: add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) #59464

Commits

  • [0fa22cbf7c] - benchmark: calibrate config v8/serialize.js (Rafael Gonzaga) #59586
  • [f5ece45b45] - benchmark: reduce readfile-permission-enabled config (Rafael Gonzaga) #59589
  • [8ebd4f4434] - benchmark: calibrate length of util.diff (Rafael Gonzaga) #59588
  • [7dee3ffd14] - benchmark: reflect current OpenSSL in crypto key benchmarks (Filip Skokan) #59459
  • [027b861ca1] - benchmark, test: replace CRLF variable with string literal (Lee Jiho) #59466
  • [89dd770889] - build: do not set -mminimal-toc with clang (Richard Lau) #59484
  • [e13de4542f] - child_process: remove unsafe array iteration (hotpineapple) #59347
  • [89fe63551e] - crypto: load system CA certificates off thread (Joyee Cheung) #59550
  • [152c5ef518] - (SEMVER-MINOR) crypto: add AES-OCB Web Cryptography algorithm (Filip Skokan) #59539
  • [c6c418343d] - crypto: update root certificates to NSS 3.114 (Node.js GitHub Bot) #59571
  • [18a2ee5b6c] - (SEMVER-MINOR) crypto: support ML-KEM in Web Cryptography (Filip Skokan) #59569
  • [72937e5144] - crypto: require HMAC key length with SHA-3 hashes in Web Cryptography (Filip Skokan) #59567
  • [b7383186c7] - crypto: fix subtle.getPublicKey error for secret type key inputs (Filip Skokan) #59558
  • [2d05c046db] - crypto: return cached copies from CryptoKey algorithm and usages getters (Filip Skokan) #59538
  • [207ffbeb07] - crypto: use CryptoKey internal slots in Web Cryptography (Filip Skokan) #59538
  • [4276516781] - crypto: normalize RsaHashedKeyParams publicExponent (Filip Skokan) #59538
  • [14741539a7] - (SEMVER-MINOR) crypto: support ML-KEM, DHKEM, and RSASVE key encapsulation mechanisms (Filip Skokan) #59491
  • [d3afc63c44] - (SEMVER-MINOR) crypto: add argon2() and argon2Sync() methods (Ranieri Althoff) #50353
  • [4fe383e45a] - (SEMVER-MINOR) crypto: support ML-DSA spki/pkcs8 key formats in Web Cryptography (Filip Skokan) #59365
  • [a95386fbf9] - (SEMVER-MINOR) crypto: subject some algorithms in Web Cryptography on BoringSSL absence (Filip Skokan) #59365
  • [3f47a2fb63] - (SEMVER-MINOR) crypto: add ChaCha20-Poly1305 Web Cryptography algorithm (Filip Skokan) #59365
  • [6fcce9058a] - (SEMVER-MINOR) crypto: add subtle.getPublicKey() utility function in Web Cryptography (Filip Skokan) #59365
  • [76cde76429] - (SEMVER-MINOR) crypto: add SHA-3 Web Cryptography digest algorithms (Filip Skokan) #59365
  • [247d017501] - (SEMVER-MINOR) crypto: add SHAKE Web Cryptography digest algorithms (Filip Skokan) #59365
  • [f4fbcca5ce] - (SEMVER-MINOR) crypto: add SubtleCrypto.supports feature detection in Web Cryptography (Filip Skokan) #59365
  • [a55382214f] - (SEMVER-MINOR) crypto: support ML-DSA in Web Cryptography (Filip Skokan) #59365
  • [c38988c860] - crypto: fix EVPKeyCtxPointer::publicCheck() (Tobias Nießen) #59471
  • [61c3bcdc56] - (SEMVER-MINOR) crypto: support ML-KEM KeyObject (Filip Skokan) #59461
  • [0821b446fb] - deps: update undici to 7.14.0 (Node.js GitHub Bot) #59507
  • [b3af17c065] - deps: V8: cherry-pick 7b91e3e2cbaf (Milad Fa) #59485
  • [9b69baf146] - deps: V8: cherry-pick 59d52e311bb1 (Milad Fa) #59485
  • [b4f202c2f1] - doc: improve sqlite.backup() progress/fulfillment documentation (René) #59598
  • [40b217a2f9] - doc: clarify experimental platform vulnerability policy (Matteo Collina) #59591
  • [cf84fffea5] - doc: link to TypedArray.from() in signature (Aviv Keller) #59226
  • [4bf6ed0bf5] - doc: fix typos in environment_variables.md (PhistucK) #59536
  • [1784c35a49] - doc: add security incident reponse plan (Rafael Gonzaga) #59470
  • [b962560240] - doc: clarify maxRSS unit in process.resourceUsage() (Alex Yang) #59511
  • [e6a6cdb9df] - doc: add missing Zstd strategy constants (RANDRIAMANANTENA Narindra Tiana Annaick) #59312
  • [a6a31cb467] - (SEMVER-MINOR) doc: compress Web Cryptography Algorithm matrix (Filip Skokan) #59365
  • [8f8960cfcb] - doc: fix the version tls.DEFAULT_CIPHERS was added (Allon Murienik) #59247
  • [9e76089f1a] - doc: clarify glob's exclude option behavior (hotpineapple) #59245
  • [dd5f835af7] - doc: add RafaelGSS as performance strategic lead (Rafael Gonzaga) #59445
  • [2b7a7a525e] - doc,crypto: add supported asymmetric key types section (Filip Skokan) #59492
  • [2fafe4c3bb] - esm: link modules synchronously when no async loader hooks are used (Joyee Cheung) #59519
  • [5347c4997a] - esm: show race error message for inner module job race (Joyee Cheung) #59519
  • [b56d8af2fe] - esm: sync-ify module translation (Joyee Cheung) #59453
  • [b4a23d6a69] - http: trim off brackets from IPv6 addresses with string operations (Krishnadas PC) #59420
  • [6ae202fcdf] - (SEMVER-MINOR) http: add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) #59315
  • [dafee05358] - (SEMVER-MINOR) http2: add support for raw header arrays in h2Stream.respond() (Tim Perry) #59455
  • [b7ea39d860] - http2: report sent headers object in client stream dcs (Darshan Sen) #59419
  • [ebe9272dae] - inspector: initial support websocket inspection (Shima Ryuhei) #59404
  • [b35041c7dc] - inspector: prevent propagation of promise hooks to noPromise hooks (Shima Ryuhei) #58841
  • [fe7176d7c6] - lib: do not modify prototype deprecated asyncResource (encore) (Szymon Łągiewka) #59518
  • [93fc80a1e2] - (SEMVER-MINOR) lib: refactor kSupportedAlgorithms (Filip Skokan) #59365
  • [9a12f71ad9] - lib: simplify IPv6 checks in isLoopback() (Krishnadas) #59375
  • [566fb04c82] - meta: update devcontainer to the latest schema (Aviv Keller) #54347
  • [389a24bbff] - module: allow overriding linked requests for a ModuleWrap (Chengzhong Wu) #59527
  • [7880978fe3] - module: correctly detect top-level await in ambiguous contexts (Shima Ryuhei) #58646
  • [99128d9244] - node-api: link to other programming language bindings (Chengzhong Wu) #59516
  • [65c870e6cb] - node-api: clarify enum value ABI stability (Chengzhong Wu) #59085
  • [352d63541a] - sea: implement execArgvExtension (Joyee Cheung) #59560
  • [c6e3d5d98d] - (SEMVER-MINOR) sea: support execArgv in sea config (Joyee Cheung) #59314
  • [e7084df4db] - sqlite: add sqlite-type symbol for DatabaseSync (Alex Yang) #59405
  • [e2b6bdc640] - sqlite: handle ?NNN parameters as positional (Edy Silva) #59350
  • [99e4a12731] - sqlite: avoid useless call to FromMaybe() (Tobias Nießen) #59490
  • [dfd4962e5f] - src: enforce assumptions in FIXED_ONE_BYTE_STRING (Tobias Nießen) #58155
  • [93a368df04] - src: use simdjson to parse --snapshot-config (Joyee Cheung) #59473
  • [716750fcf8] - src: fix order of CHECK_NOT_NULL/dereference (Tobias Nießen) #59487
  • [44a8ecf8d4] - src: assert memory calc for max-old-space-size-percentage (Asaf Federman) #59460
  • [3462b46fca] - src: use simdjson::pad (0hm☘️) #59391
  • [3e1551d845] - src: move shared_ptr objects in KeyObjectData (Tobias Nießen) #59472
  • [c022c1f85a] - src: add internal GetOptionsAsFlags (Pietro Marchini) #59138
  • [c0f08454a3] - src: iterate metadata version entries with std::array (Chengzhong Wu) #57866
  • [f87836f3ae] - src: internalize v8::ConvertableToTraceFormat in traces (Chengzhong Wu) #57866
  • [852b8e46d8] - src: remove duplicate assignment of O_EXCL in node_constants.cc (Daniel Osvaldo R) #59049
  • [64ffde608f] - src: add Intel CET properties to large_pages.S (tjuhaszrh) #59363
  • [823dce32ec] - src: update OpenSSL pqc checks (Filip Skokan) #59436
  • [8dc6f5b696] - (SEMVER-MINOR) stream: add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) #59464
  • [b2b8383755] - test: use mustSucceed in test-repl-tab-complete-import (Sohyeon Kim) #59368
  • [e3ad5cc2c6] - test: skip sea tests on Linux ppc64le (Richard Lau) #59563
  • [f78f47ca5a] - test: support standalone env comment in tests (Pietro Marchini) #59546
  • [0e8bc2c7ac] - test: rename test-net-server-drop-connections-in-cluster.js to -http- (Meghan Denny) #59532
  • [ed339580af] - test: lazy-load internalTTy (Pietro Marchini) #59517
  • [fe86bc6da8] - test: fix test-setproctitle status when ps is not available (Antoine du Hamel) #59523
  • [e517792973] - test: add parseTestMetadata support (Pietro Marchini) #59503
  • [31092972d6] - test: update WPT for WebCryptoAPI to ff26d9b307 (Node.js GitHub Bot) #59497
  • [16afd103cc] - (SEMVER-MINOR) test: add Web Cryptography wrap/unwrap vectors (Filip Skokan) #59365
  • [5598baf34e] - (SEMVER-MINOR) test: cleanup test-webcrypto-supports (Filip Skokan) #59365
  • [e7809d6ddb] - test: make test-debug-process locale-independent (BCD1me) #59254
  • [ca7856e73c] - test: mark test-wasi-pthread as flaky (Joyee Cheung) #59488
  • [0ecd82197f] - test: split test-wasi.js (Joyee Cheung) #59488
  • [0930c218d6] - test: deflake connection refused proxy tests (Joyee Cheung) #59476
  • [7f457f886a] - test: use case-insensitive path checking on Windows in fs.cpSync tests (Joyee Cheung) #59475
  • [37809115f9] - test: add missing hasPostData in test-inspector-emit-protocol-event (Shima Ryuhei) #59412
  • [f4722b1672] - test: refactor error checks to use assert.ifError/mustSucceed (Sohyeon Kim) #59424
  • [9ff71a672d] - test: fix typos (Lee Jiho) #59330
  • [9a7700da62] - test: skip test-watch-mode inspect when no inspector (James M Snell) #59440
  • [e964c4334e] - test_runner: do not error when getting fullName of root context (René) #59377
  • [e076f7857c] - test_runner: add option to rerun only failed tests (Moshe Atlow) #59443
  • [eb8b1939a4] - test_runner: fix isSkipped check in junit (Sungwon) #59414
  • [4e02ea1c52] - tools: update gyp-next to 0.20.3 (Node.js GitHub Bot) #59603
  • [99da7fbe11] - tools: avoid parsing test files twice (Pietro Marchini) #59526
  • [9a6a8e319b] - tools: update coverage GitHub Actions to fixed version (Rich Trott) #59512
  • [8d28236aff] - tools: fix return value of try_check_compiler (theanarkh) #59434
  • [52ab64ec3a] - tools: bump @eslint/plugin-kit from 0.3.3 to 0.3.4 in /tools/eslint (dependabot[bot]) #59271
  • [baa22893bb] - typings: add missing URLBinding methods (성우현 | Woohyun Sung) #59468
  • [b68e0d1eca] - util: fix error's namespaced node_modules highlighting using inspect (Ruben Bridgewater) #59446
  • [15ae21b88a] - util: add some additional error classes to wellKnownPrototypes (Mark S. Miller) #59456
  • [c38b7cfa35] - worker: fix worker name with \0 (theanarkh) #59214
  • [f54ace694a] - worker: add worker name to report (theanarkh) #58935

dependabot bot and others added 30 commits August 21, 2025 19:00
Bumps [@eslint/plugin-kit](https://github.com/eslint/rewrite/tree/HEAD/packages/plugin-kit) from 0.3.3 to 0.3.4.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/plugin-kit/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/plugin-kit-v0.3.4/packages/plugin-kit)

---
updated-dependencies:
- dependency-name: "@eslint/plugin-kit"
  dependency-version: 0.3.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
PR-URL: #59271
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
The checks for '[::1]' and '[0:0:0:0:0:0:0:1]'
in isLoopback were using startsWith,
which is unnecessary as these are canonical
loopback addresses with no valid prefixes.

Switching to strict equality improves
clarity and improves performance.

PR-URL: #59375
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: theanarkh <theratliter@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
PR-URL: #58841
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
PR-URL: #58935
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Stefan Stojanovic <stefan.stojanovic@janeasystems.com>
PR-URL: #59436
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Add note indicating support of Intel CET for large_pages.S file based on annocheck guide: https://sourceware.org/annobin/annobin.html/Test-cf-protection.html

PR-URL: #59363
Refs: #59084
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
PR-URL: #59315
Reviewed-By: Jason Zhang <xzha4350@gmail.com>
The test for watch mode with inspect fails when the inspector
is not available (such as when configured with `--without-ssl`).
This commit skips the test in such cases.

PR-URL: #59440
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
The `isSkipped` function in the JUnit reporter was incorrectly
checking for `node?.attrs.failures` instead of `node?.attrs.skipped`.

PR-URL: #59414
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Pietro Marchini <pietro.marchini94@gmail.com>
PR-URL: #59330
Reviewed-By: Zeyu "Alex" Yang <himself65@outlook.com>
Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com>
PR-URL: #59434
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
PR-URL: #59049
Reviewed-By: theanarkh <theratliter@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
PR-URL: #59214
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
PR-URL: #59445
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Ruy Adorno <ruy@vlt.sh>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
This completes the TODO to compile WASM synchronously and thus
making translation (i.e. compilation + instantiation) synchronous.

PR-URL: #59453
Refs: #55782
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Replace manual `if (err) assert.fail(err)` and `assert.ok(!err)` with
`assert.ifError()` or `common.mustSucceed()` in a few tests to clarify
intent and follow project conventions.

- test/parallel/test-child-process-send-returns-boolean.js
- test/parallel/test-dgram-blocklist.js
- test/parallel/test-fs-watchfile.js

PR-URL: #59424
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
PR-URL: #59459
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
`v8::ConvertableToTraceFormat` is only available in legacy V8 tracing
API and no longer supported in perfetto. This internalize
`node::tracing::TracedValue` and `v8::ConvertableToTraceFormat` by
defining specialized trace argument classes.

The newly defined structured trace argument classes can be easily
converted to `perfetto::TracedValue` by perfetto traced value protocol.
For example, when adding perfetto support, `CastTracedValue` will be a
no-op and these classes can add a new conversion method like:

```cpp
class Foo {
  void WriteIntoTrace(TracedValue context) const {
    auto dict = std::move(context).WriteDictionary();
    dict->Add("key", 42);
    dict->Add("foo", "bar");
    dict->Add("member", member_);
  }
};
```

PR-URL: #57866
Refs: nodejs/diagnostics#654
Refs: https://github.com/google/perfetto/blob/9ddf987d48cdfd9129987a3af1e85052c377756f/include/perfetto/tracing/traced_value.h#L46
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Fixes: #58331
PR-URL: #58646
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: #59138
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
PR-URL: #59412
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
PR-URL: #59461
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Commit 206ebeb added an additional call
to EVP_PKEY_public_check and an unconditional return from publicCheck().
This prevents the control flow from reaching the original call to either
EVP_PKEY_public_check or EVP_PKEY_public_check_quick.

This change restores the previous behavior, which calls
EVP_PKEY_public_check_quick instead, if possible.

Refs: #56812
PR-URL: #59471
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Since copying `shared_ptr` may involve costly atomic operations,
explicitly move both `shared_ptr` objects that are passed to the
private KeyObjectData constructor.

PR-URL: #59472
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
In certain machine configurations on Windows, fs.readlinkSync() may
return a path with upper case drive letter while the other paths may be
constructed from a base path with a lower case drive letter (e.g.
from process.cwd()). Checking path mismatch in a case-sensitive
manner can lead to failure in some tests, specifically with the
Windows machine configurations in the Jenkins CI. Since paths
are case-insensitive on Windows anyway, compare them in a
case-insensitive manner in the tests.

PR-URL: #59475
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
This change improves diagnosis by reporting the headers object that is
actually sent rather than the original input headers in the following
diagnostics channels:
- 'http2.client.stream.created'
- 'http2.client.stream.start'

Signed-off-by: Darshan Sen <raisinten@gmail.com>
PR-URL: #59419
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
The `execArgv` field can be used to specify Node.js-specific
arguments that will be automatically applied when the single
executable application starts. This allows application developers
to configure Node.js runtime options without requiring end users
to be aware of these flags.

PR-URL: #59314
Refs: #51688
Refs: #55573
Refs: nodejs/single-executable#100
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Original commit message:

    [liftoff] Fix parameter passing during CallC

    Values smaller than 8 bytes need to be sign/zero extended to
    8 bytes then pushed on to the stack.

    Change-Id: I5c9a2179ef2b65cf08b7e773180d78b252c2253f
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6597365
    Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
    Reviewed-by: Junliang Yan <junyan@redhat.com>
    Cr-Commit-Position: refs/heads/main@{#100578}

Refs: v8/v8@59d52e3
PR-URL: #59485
Refs: nodejs/build#4091
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Original commit message:

    s390: use %r15 instead of %sp

    Some compilers do not recognize %sp and output:
    ```
    error: invalid register
    ```

    Change-Id: I2e1b64dd0e799a03afccbd12f5b2db17b3130e07
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6603554
    Reviewed-by: Michael Lippautz <mlippautz@chromium.org>
    Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
    Reviewed-by: Junliang Yan <junyan@redhat.com>
    Cr-Commit-Position: refs/heads/main@{#100576}

Refs: v8/v8@7b91e3e
PR-URL: #59485
Refs: nodejs/build#4091
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
targos pushed a commit that referenced this pull request Aug 26, 2025
Notable changes:

crypto:
  * update root certificates to NSS 3.114 (Node.js GitHub Bot) #59571
  * (SEMVER-MINOR) add AES-OCB Web Cryptography algorithm (Filip Skokan) #59539
  * (SEMVER-MINOR) support ML-KEM in Web Cryptography (Filip Skokan) #59569
  * (SEMVER-MINOR) support ML-KEM, DHKEM, and RSASVE key encapsulation mechanisms (Filip Skokan) #59491
  * (SEMVER-MINOR) add argon2() and argon2Sync() methods (Ranieri Althoff) #50353
  * (SEMVER-MINOR) support ML-DSA spki/pkcs8 key formats in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add ChaCha20-Poly1305 Web Cryptography algorithm (Filip Skokan) #59365
  * (SEMVER-MINOR) add subtle.getPublicKey() utility function in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHA-3 Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHAKE Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SubtleCrypto.supports feature detection in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-DSA in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-KEM KeyObject (Filip Skokan) #59461
http:
  * (SEMVER-MINOR) add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) #59315
http2:
  * (SEMVER-MINOR) add support for raw header arrays in h2Stream.respond() (Tim Perry) #59455
sea:
  * (SEMVER-MINOR) support execArgv in sea config (Joyee Cheung) #59314
stream:
  * (SEMVER-MINOR) add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) #59464

PR-URL: #59629
@targos targos marked this pull request as ready for review August 26, 2025 06:56
@slagiewka
Copy link

Any chance #59518 could make the cut? I can't re-run these tests myself, but the CI seems to be at fault here.

@joyeecheung
Copy link
Member

joyeecheung commented Aug 26, 2025

Text for the SEA execArgv changes (if it's too long, the example can be left out).

### Node.js execution argument support in single executable applications

The single executable application configuration now supports additional fields to specify Node.js execution arguments and control how they can be extended when the application is run.

- `execArgv` takes an array of strings for the execution arguments to be used.
- `execArgvExtension` takes one of the following values:
  - `"none"`: No additional execution arguments are allowed.
  - `"cli"`: Additional execution arguments can be provided via a special command-line flag `--node-options="--flag1 --flag2=value"` at run time.
  - `"env"` (default): Additional execution arguments can be provided via the `NODE_OPTIONS` environment variable at run time.

For example, with the following configuration:

```json
{
  "main": "/path/to/bundled/script.js",
  "output": "/path/to/write/the/generated/blob.blob",
  "execArgv": ["--no-warnings"],
  "execArgvExtension": "cli",
}
```

If the generated single executable application is named `sea`, then running:

```console
sea --node-options="--max-old-space-size=4096" user-arg1 user-arg2
```

Would be equivalent to running:

```console
node --no-warnings --max-old-space-size=4096 /path/to/bundled/script.js user-arg1 user-arg2
```

Contributed by Joyee Cheung in https://github.com/nodejs/node/pull/59314 and https://github.com/nodejs/node/pull/59560 

@aduh95
Copy link
Contributor

aduh95 commented Aug 26, 2025

@aduh95 I have a problem with the release commit linter: https://github.com/nodejs/node/actions/runs/17229618249/job/48880734923?pr=59629

It wants we to write \\0, but if I do that, make lint-md then asks to go back to \0.

You can ignore it – I guess the proper way would be to put it in quote, i.e. `\0` instead of \0, but in any case it shouldn't block the release.

@targos targos changed the title 2025-08-26, Version 24.7.0 (Current) 2025-08-27, Version 24.7.0 (Current) Aug 27, 2025
@panva
Copy link
Member

panva commented Aug 27, 2025

@targos notable summary for the plethora of crypto: * commits

Rendered Markdown (click to expand)

Post-Quantum Cryptography in node:crypto

OpenSSL 3.5 on 24.x kicked off post-quantum cryptography efforts in Node.js by allowing use of NIST's post-quantum cryptography standards for future-proofing applications against quantum computing threats. The following post-quantum algorithms are now available in node:crypto:

  • ML-KEM (FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard) through new crypto.encapsulate() and crypto.decapsulate() methods
  • ML-DSA (FIPS 204, Module-Lattice-Based Digital Signature Standard) in the existing crypto.sign() and crypto.verify() methods

Contributed by Filip Skokan in #59259 and #59491

Modern Algorithms in Web Cryptography API

The second substantial extension to the Web Cryptography API (globalThis.crypto.subtle) was recently accepted for incubation by WICG. The following algorithms and methods from this extension are now available in the Node.js Web Cryptography API implementation:

  • AES-OCB
  • ChaCha20-Poly1305
  • ML-DSA
  • ML-KEM
  • SHA-3
  • SHAKE
  • subtle.getPublicKey()
  • SubtleCrypto.supports()
  • ... with more coming in future releases

Contributed by Filip Skokan in #59365, #59569, and #59539

Source:

### Post-Quantum Cryptography in `node:crypto`

OpenSSL 3.5 on 24.x kicked off post-quantum cryptography efforts in Node.js by allowing use of NIST's post-quantum cryptography standards for future-proofing applications against quantum computing threats. The following post-quantum algorithms are now available in `node:crypto`:

- ML-KEM (FIPS 203, Module-Lattice-Based Key-Encapsulation Mechanism Standard) through new `crypto.encapsulate()` and `crypto.decapsulate()` methods
- ML-DSA (FIPS 204, Module-Lattice-Based Digital Signature Standard) in the existing `crypto.sign()` and `crypto.verify()` methods

Contributed by Filip Skokan in https://github.com/nodejs/node/pull/59259 and https://github.com/nodejs/node/pull/59491 

### Modern Algorithms in Web Cryptography API

The second substantial [extension to the Web Cryptography API](https://wicg.github.io/webcrypto-modern-algos/) (`globalThis.crypto.subtle`) was recently accepted for incubation by WICG. The following algorithms and methods from this extension are now available in the Node.js Web Cryptography API implementation:

- AES-OCB
- ChaCha20-Poly1305
- ML-DSA
- ML-KEM
- SHA-3
- SHAKE
- `subtle.getPublicKey()`
- `SubtleCrypto.supports()`
- ... with more coming in future releases

Contributed by Filip Skokan in https://github.com/nodejs/node/pull/59365, https://github.com/nodejs/node/pull/59569, and https://github.com/nodejs/node/pull/59539

Previous attempt has missed one argument (`useEmitSync`), therefore it
effectively did not work as intended.

This change sets `useEmitSync` to `false` which is equivalent to
previous behaviour of `undefined` and sets `modifyPrototype` to `false`
as expected.

PR-URL: #59518
Refs: #58218
Refs: #59195
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
targos pushed a commit that referenced this pull request Aug 27, 2025
Notable changes:

crypto:
  * update root certificates to NSS 3.114 (Node.js GitHub Bot) #59571
  * (SEMVER-MINOR) add AES-OCB Web Cryptography algorithm (Filip Skokan) #59539
  * (SEMVER-MINOR) support ML-KEM in Web Cryptography (Filip Skokan) #59569
  * (SEMVER-MINOR) support ML-KEM, DHKEM, and RSASVE key encapsulation mechanisms (Filip Skokan) #59491
  * (SEMVER-MINOR) add argon2() and argon2Sync() methods (Ranieri Althoff) #50353
  * (SEMVER-MINOR) support ML-DSA spki/pkcs8 key formats in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add ChaCha20-Poly1305 Web Cryptography algorithm (Filip Skokan) #59365
  * (SEMVER-MINOR) add subtle.getPublicKey() utility function in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHA-3 Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHAKE Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SubtleCrypto.supports feature detection in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-DSA in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-KEM KeyObject (Filip Skokan) #59461
http:
  * (SEMVER-MINOR) add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) #59315
http2:
  * (SEMVER-MINOR) add support for raw header arrays in h2Stream.respond() (Tim Perry) #59455
sea:
  * (SEMVER-MINOR) support execArgv in sea config (Joyee Cheung) #59314
stream:
  * (SEMVER-MINOR) add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) #59464

PR-URL: #59629
@targos
Copy link
Member

targos commented Aug 27, 2025

Added #59518 and updated the notable changes.

Notable changes:

crypto:
  * update root certificates to NSS 3.114 (Node.js GitHub Bot) #59571
  * (SEMVER-MINOR) add AES-OCB Web Cryptography algorithm (Filip Skokan) #59539
  * (SEMVER-MINOR) support ML-KEM in Web Cryptography (Filip Skokan) #59569
  * (SEMVER-MINOR) support ML-KEM, DHKEM, and RSASVE key encapsulation mechanisms (Filip Skokan) #59491
  * (SEMVER-MINOR) add argon2() and argon2Sync() methods (Ranieri Althoff) #50353
  * (SEMVER-MINOR) support ML-DSA spki/pkcs8 key formats in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add ChaCha20-Poly1305 Web Cryptography algorithm (Filip Skokan) #59365
  * (SEMVER-MINOR) add subtle.getPublicKey() utility function in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHA-3 Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SHAKE Web Cryptography digest algorithms (Filip Skokan) #59365
  * (SEMVER-MINOR) add SubtleCrypto.supports feature detection in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-DSA in Web Cryptography (Filip Skokan) #59365
  * (SEMVER-MINOR) support ML-KEM KeyObject (Filip Skokan) #59461
http:
  * (SEMVER-MINOR) add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) #59315
http2:
  * (SEMVER-MINOR) add support for raw header arrays in h2Stream.respond() (Tim Perry) #59455
sea:
  * (SEMVER-MINOR) support execArgv in sea config (Joyee Cheung) #59314
stream:
  * (SEMVER-MINOR) add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) #59464

PR-URL: #59629
@targos targos added the request-ci Add this label to start a Jenkins CI on a PR. label Aug 27, 2025
@github-actions github-actions bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Aug 27, 2025
@nodejs-github-bot
Copy link
Collaborator

Copy link

codecov bot commented Aug 27, 2025

Codecov Report

❌ Patch coverage is 88.52327% with 429 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.93%. Comparing base (09dc7a5) to head (d795edb).
⚠️ Report is 113 commits behind head on v24.x.

Files with missing lines Patch % Lines
src/crypto/crypto_chacha20_poly1305.cc 46.38% 56 Missing and 33 partials ⚠️
lib/internal/crypto/webcrypto.js 94.31% 42 Missing and 1 partial ⚠️
src/crypto/crypto_argon2.cc 63.72% 25 Missing and 12 partials ⚠️
lib/internal/crypto/ml_kem.js 89.19% 31 Missing ⚠️
src/crypto/crypto_kem.cc 79.56% 21 Missing and 7 partials ⚠️
src/inspector/network_agent.cc 56.66% 12 Missing and 14 partials ⚠️
src/node_sea.cc 83.03% 12 Missing and 7 partials ⚠️
lib/internal/crypto/ml_dsa.js 94.32% 18 Missing ⚠️
src/node_options.cc 80.51% 6 Missing and 9 partials ⚠️
src/node_snapshotable.cc 56.25% 7 Missing and 7 partials ⚠️
... and 28 more
Additional details and impacted files
@@            Coverage Diff             @@
##            v24.x   #59629      +/-   ##
==========================================
- Coverage   91.77%   89.93%   -1.85%     
==========================================
  Files         330      659     +329     
  Lines      131235   196393   +65158     
  Branches    21467    38606   +17139     
==========================================
+ Hits       120446   176622   +56176     
- Misses      10556    12246    +1690     
- Partials      233     7525    +7292     
Files with missing lines Coverage Δ
lib/_http_agent.js 97.32% <100.00%> (+0.18%) ⬆️
lib/async_hooks.js 99.66% <100.00%> (+6.75%) ⬆️
lib/child_process.js 95.54% <100.00%> (+<0.01%) ⬆️
lib/crypto.js 92.96% <100.00%> (+1.03%) ⬆️
lib/inspector.js 97.09% <100.00%> (+0.04%) ⬆️
lib/internal/async_hooks.js 99.37% <100.00%> (+1.12%) ⬆️
lib/internal/crypto/cfrg.js 96.75% <100.00%> (+<0.01%) ⬆️
lib/internal/crypto/ec.js 96.80% <100.00%> (+0.01%) ⬆️
lib/internal/crypto/hash.js 98.59% <100.00%> (+0.05%) ⬆️
lib/internal/crypto/hashnames.js 100.00% <100.00%> (ø)
... and 80 more

... and 383 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nodejs-github-bot
Copy link
Collaborator

@targos
Copy link
Member

targos commented Aug 27, 2025

targos pushed a commit to targos/node that referenced this pull request Aug 27, 2025
Notable changes:

crypto:
  * update root certificates to NSS 3.114 (Node.js GitHub Bot) nodejs#59571
  * (SEMVER-MINOR) add AES-OCB Web Cryptography algorithm (Filip Skokan) nodejs#59539
  * (SEMVER-MINOR) support ML-KEM in Web Cryptography (Filip Skokan) nodejs#59569
  * (SEMVER-MINOR) support ML-KEM, DHKEM, and RSASVE key encapsulation mechanisms (Filip Skokan) nodejs#59491
  * (SEMVER-MINOR) add argon2() and argon2Sync() methods (Ranieri Althoff) nodejs#50353
  * (SEMVER-MINOR) support ML-DSA spki/pkcs8 key formats in Web Cryptography (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) add ChaCha20-Poly1305 Web Cryptography algorithm (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) add subtle.getPublicKey() utility function in Web Cryptography (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) add SHA-3 Web Cryptography digest algorithms (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) add SHAKE Web Cryptography digest algorithms (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) add SubtleCrypto.supports feature detection in Web Cryptography (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) support ML-DSA in Web Cryptography (Filip Skokan) nodejs#59365
  * (SEMVER-MINOR) support ML-KEM KeyObject (Filip Skokan) nodejs#59461
http:
  * (SEMVER-MINOR) add Agent.agentKeepAliveTimeoutBuffer option (Haram Jeong) nodejs#59315
http2:
  * (SEMVER-MINOR) add support for raw header arrays in h2Stream.respond() (Tim Perry) nodejs#59455
sea:
  * (SEMVER-MINOR) support execArgv in sea config (Joyee Cheung) nodejs#59314
stream:
  * (SEMVER-MINOR) add brotli support to CompressionStream and DecompressionStream (Matthew Aitken) nodejs#59464

PR-URL: nodejs#59629
@targos targos merged commit d795edb into v24.x Aug 27, 2025
56 of 57 checks passed
@targos targos deleted the v24.7.0-proposal branch August 27, 2025 21:17
targos added a commit that referenced this pull request Aug 27, 2025
targos added a commit to targos/nodejs.org that referenced this pull request Aug 27, 2025
github-merge-queue bot pushed a commit to nodejs/nodejs.org that referenced this pull request Aug 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release Issues and PRs related to Node.js releases. v24.x Issues that can be reproduced on v24.x or PRs targeting the v24.x-staging branch.
Projects
None yet
Development

Successfully merging this pull request may close these issues.