Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: nodejs/node
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 75650f2360af4908be3c79b8083fb391fdebd6b6
Choose a base ref
..
head repository: nodejs/node
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 051743cdc5953398b3931addee68e18fb669ec3b
Choose a head ref
Showing with 7,749 additions and 6,111 deletions.
  1. +1 βˆ’0 .eslintrc.js
  2. +2 βˆ’0 .github/workflows/coverage-windows.yml
  3. +2 βˆ’0 .github/workflows/test-macos.yml
  4. +41 βˆ’2 Makefile
  5. +141 βˆ’0 benchmark/crypto/oneshot-sign-verify.js
  6. +1 βˆ’1 common.gypi
  7. +9 βˆ’1 deps/llhttp/README.md
  8. +135 βˆ’10 deps/llhttp/include/llhttp.h
  9. +129 βˆ’5 deps/llhttp/src/api.c
  10. +3 βˆ’4 deps/llhttp/src/http.c
  11. +2,859 βˆ’1,316 deps/llhttp/src/llhttp.c
  12. +68 βˆ’0 deps/npm/CHANGELOG.md
  13. +12 βˆ’0 deps/npm/docs/content/commands/npm-dist-tag.md
  14. +13 βˆ’0 deps/npm/docs/content/commands/npm-docs.md
  15. +19 βˆ’4 deps/npm/docs/content/commands/npm-pack.md
  16. +13 βˆ’0 deps/npm/docs/content/commands/npm-repo.md
  17. +14 βˆ’1 deps/npm/docs/content/commands/npm-set-script.md
  18. +1 βˆ’2 deps/npm/docs/content/commands/npm-view.md
  19. +5 βˆ’1 deps/npm/docs/content/using-npm/config.md
  20. +8 βˆ’1 deps/npm/docs/output/commands/npm-dist-tag.html
  21. +9 βˆ’1 deps/npm/docs/output/commands/npm-docs.html
  22. +1 βˆ’1 deps/npm/docs/output/commands/npm-ls.html
  23. +13 βˆ’4 deps/npm/docs/output/commands/npm-pack.html
  24. +9 βˆ’1 deps/npm/docs/output/commands/npm-repo.html
  25. +9 βˆ’2 deps/npm/docs/output/commands/npm-set-script.html
  26. +1 βˆ’2 deps/npm/docs/output/commands/npm-view.html
  27. +1 βˆ’1 deps/npm/docs/output/commands/npm.html
  28. +3 βˆ’1 deps/npm/docs/output/using-npm/config.html
  29. +1 βˆ’0 deps/npm/lib/base-command.js
  30. +52 βˆ’4 deps/npm/lib/dist-tag.js
  31. +16 βˆ’0 deps/npm/lib/docs.js
  32. +7 βˆ’5 deps/npm/lib/exec.js
  33. +22 βˆ’1 deps/npm/lib/pack.js
  34. +16 βˆ’0 deps/npm/lib/repo.js
  35. +9 βˆ’6 deps/npm/lib/run-script.js
  36. +64 βˆ’17 deps/npm/lib/set-script.js
  37. +41 βˆ’16 deps/npm/lib/utils/config/definition.js
  38. +4 βˆ’1 deps/npm/lib/utils/config/definitions.js
  39. +9 βˆ’2 deps/npm/lib/utils/explain-eresolve.js
  40. +124 βˆ’62 deps/npm/lib/view.js
  41. +1 βˆ’1 deps/npm/man/man1/npm-access.1
  42. +1 βˆ’1 deps/npm/man/man1/npm-adduser.1
  43. +1 βˆ’1 deps/npm/man/man1/npm-audit.1
  44. +1 βˆ’1 deps/npm/man/man1/npm-bin.1
  45. +1 βˆ’1 deps/npm/man/man1/npm-bugs.1
  46. +1 βˆ’1 deps/npm/man/man1/npm-cache.1
  47. +1 βˆ’1 deps/npm/man/man1/npm-ci.1
  48. +1 βˆ’1 deps/npm/man/man1/npm-completion.1
  49. +1 βˆ’1 deps/npm/man/man1/npm-config.1
  50. +1 βˆ’1 deps/npm/man/man1/npm-dedupe.1
  51. +1 βˆ’1 deps/npm/man/man1/npm-deprecate.1
  52. +1 βˆ’1 deps/npm/man/man1/npm-diff.1
  53. +10 βˆ’1 deps/npm/man/man1/npm-dist-tag.1
  54. +11 βˆ’1 deps/npm/man/man1/npm-docs.1
  55. +1 βˆ’1 deps/npm/man/man1/npm-doctor.1
  56. +1 βˆ’1 deps/npm/man/man1/npm-edit.1
  57. +1 βˆ’1 deps/npm/man/man1/npm-exec.1
  58. +1 βˆ’1 deps/npm/man/man1/npm-explain.1
  59. +1 βˆ’1 deps/npm/man/man1/npm-explore.1
  60. +1 βˆ’1 deps/npm/man/man1/npm-find-dupes.1
  61. +1 βˆ’1 deps/npm/man/man1/npm-fund.1
  62. +1 βˆ’1 deps/npm/man/man1/npm-help-search.1
  63. +1 βˆ’1 deps/npm/man/man1/npm-help.1
  64. +1 βˆ’1 deps/npm/man/man1/npm-hook.1
  65. +1 βˆ’1 deps/npm/man/man1/npm-init.1
  66. +1 βˆ’1 deps/npm/man/man1/npm-install-ci-test.1
  67. +1 βˆ’1 deps/npm/man/man1/npm-install-test.1
  68. +1 βˆ’1 deps/npm/man/man1/npm-install.1
  69. +1 βˆ’1 deps/npm/man/man1/npm-link.1
  70. +1 βˆ’1 deps/npm/man/man1/npm-logout.1
  71. +2 βˆ’2 deps/npm/man/man1/npm-ls.1
  72. +1 βˆ’1 deps/npm/man/man1/npm-org.1
  73. +1 βˆ’1 deps/npm/man/man1/npm-outdated.1
  74. +1 βˆ’1 deps/npm/man/man1/npm-owner.1
  75. +16 βˆ’5 deps/npm/man/man1/npm-pack.1
  76. +1 βˆ’1 deps/npm/man/man1/npm-ping.1
  77. +1 βˆ’1 deps/npm/man/man1/npm-prefix.1
  78. +1 βˆ’1 deps/npm/man/man1/npm-profile.1
  79. +1 βˆ’1 deps/npm/man/man1/npm-prune.1
  80. +1 βˆ’1 deps/npm/man/man1/npm-publish.1
  81. +1 βˆ’1 deps/npm/man/man1/npm-rebuild.1
  82. +11 βˆ’1 deps/npm/man/man1/npm-repo.1
  83. +1 βˆ’1 deps/npm/man/man1/npm-restart.1
  84. +1 βˆ’1 deps/npm/man/man1/npm-root.1
  85. +1 βˆ’1 deps/npm/man/man1/npm-run-script.1
  86. +1 βˆ’1 deps/npm/man/man1/npm-search.1
  87. +11 βˆ’2 deps/npm/man/man1/npm-set-script.1
  88. +1 βˆ’1 deps/npm/man/man1/npm-shrinkwrap.1
  89. +1 βˆ’1 deps/npm/man/man1/npm-star.1
  90. +1 βˆ’1 deps/npm/man/man1/npm-stars.1
  91. +1 βˆ’1 deps/npm/man/man1/npm-start.1
  92. +1 βˆ’1 deps/npm/man/man1/npm-stop.1
  93. +1 βˆ’1 deps/npm/man/man1/npm-team.1
  94. +1 βˆ’1 deps/npm/man/man1/npm-test.1
  95. +1 βˆ’1 deps/npm/man/man1/npm-token.1
  96. +1 βˆ’1 deps/npm/man/man1/npm-uninstall.1
  97. +1 βˆ’1 deps/npm/man/man1/npm-unpublish.1
  98. +1 βˆ’1 deps/npm/man/man1/npm-unstar.1
  99. +1 βˆ’1 deps/npm/man/man1/npm-update.1
  100. +1 βˆ’1 deps/npm/man/man1/npm-version.1
  101. +2 βˆ’3 deps/npm/man/man1/npm-view.1
  102. +1 βˆ’1 deps/npm/man/man1/npm-whoami.1
  103. +2 βˆ’2 deps/npm/man/man1/npm.1
  104. +1 βˆ’1 deps/npm/man/man1/npx.1
  105. +1 βˆ’1 deps/npm/man/man5/folders.5
  106. +1 βˆ’1 deps/npm/man/man5/install.5
  107. +1 βˆ’1 deps/npm/man/man5/npm-shrinkwrap-json.5
  108. +1 βˆ’1 deps/npm/man/man5/npmrc.5
  109. +1 βˆ’1 deps/npm/man/man5/package-json.5
  110. +1 βˆ’1 deps/npm/man/man5/package-lock-json.5
  111. +6 βˆ’2 deps/npm/man/man7/config.7
  112. +1 βˆ’1 deps/npm/man/man7/developers.7
  113. +1 βˆ’1 deps/npm/man/man7/orgs.7
  114. +1 βˆ’1 deps/npm/man/man7/registry.7
  115. +1 βˆ’1 deps/npm/man/man7/removal.7
  116. +1 βˆ’1 deps/npm/man/man7/scope.7
  117. +1 βˆ’1 deps/npm/man/man7/scripts.7
  118. +1 βˆ’1 deps/npm/man/man7/workspaces.7
  119. +7 βˆ’1 deps/npm/node_modules/@npmcli/arborist/bin/lib/options.js
  120. +93 βˆ’30 deps/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js
  121. +28 βˆ’2 deps/npm/node_modules/@npmcli/arborist/lib/arborist/load-actual.js
  122. +128 βˆ’15 deps/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js
  123. +59 βˆ’10 deps/npm/node_modules/@npmcli/arborist/lib/diff.js
  124. +13 βˆ’7 deps/npm/node_modules/@npmcli/arborist/lib/link.js
  125. +5 βˆ’2 deps/npm/node_modules/@npmcli/arborist/lib/node.js
  126. +9 βˆ’0 deps/npm/node_modules/@npmcli/arborist/lib/printable.js
  127. +46 βˆ’1 deps/npm/node_modules/@npmcli/arborist/lib/tree-check.js
  128. +2 βˆ’2 deps/npm/node_modules/@npmcli/arborist/package.json
  129. +2 βˆ’2 deps/npm/node_modules/@npmcli/config/lib/set-envs.js
  130. +1 βˆ’1 deps/npm/node_modules/@npmcli/config/package.json
  131. +0 βˆ’3 deps/npm/node_modules/json-stringify-nice/.github/FUNDING.yml
  132. +0 βˆ’23 deps/npm/node_modules/json-stringify-nice/.npmignore
  133. +1 βˆ’1 deps/npm/node_modules/json-stringify-nice/index.js
  134. +0 βˆ’3,447 deps/npm/node_modules/json-stringify-nice/package-lock.json
  135. +5 βˆ’2 deps/npm/node_modules/json-stringify-nice/package.json
  136. +0 βˆ’127 deps/npm/node_modules/json-stringify-nice/tap-snapshots/test-basic.js-TAP.test.js
  137. +0 βˆ’68 deps/npm/node_modules/json-stringify-nice/test/basic.js
  138. +3 βˆ’3 deps/npm/package.json
  139. +112 βˆ’0 deps/npm/tap-snapshots/test-lib-dist-tag.js-TAP.test.js
  140. +5 βˆ’1 deps/npm/tap-snapshots/test-lib-utils-config-describe-all.js-TAP.test.js
  141. +182 βˆ’0 deps/npm/tap-snapshots/test-lib-utils-explain-eresolve.js-TAP.test.js
  142. +22 βˆ’1 deps/npm/tap-snapshots/test-lib-utils-npm-usage.js-TAP.test.js
  143. +257 βˆ’0 deps/npm/tap-snapshots/test-lib-view.js-TAP.test.js
  144. +142 βˆ’67 deps/npm/test/fixtures/eresolve-explanations.js
  145. +14 βˆ’0 deps/npm/test/fixtures/mock-npm.js
  146. +166 βˆ’33 deps/npm/test/lib/dist-tag.js
  147. +113 βˆ’35 deps/npm/test/lib/docs.js
  148. +4 βˆ’5 deps/npm/test/lib/load-all-commands.js
  149. +103 βˆ’0 deps/npm/test/lib/pack.js
  150. +233 βˆ’112 deps/npm/test/lib/repo.js
  151. +120 βˆ’116 deps/npm/test/lib/set-script.js
  152. +27 βˆ’1 deps/npm/test/lib/utils/config/definition.js
  153. +126 βˆ’0 deps/npm/test/lib/view.js
  154. +2 βˆ’1 deps/v8/src/objects/value-serializer.cc
  155. +2 βˆ’1 doc/api/addons.md
  156. +29 βˆ’15 doc/api/assert.md
  157. +2 βˆ’2 doc/api/cli.md
  158. +3 βˆ’3 doc/api/crypto.md
  159. +83 βˆ’11 doc/api/timers.md
  160. +6 βˆ’2 lib/_http_client.js
  161. +18 βˆ’5 lib/_http_server.js
  162. +1 βˆ’1 lib/_tls_common.js
  163. +10 βˆ’2 lib/internal/async_hooks.js
  164. +3 βˆ’0 lib/internal/bootstrap/loaders.js
  165. +5 βˆ’2 lib/internal/crypto/dsa.js
  166. +5 βˆ’2 lib/internal/crypto/ec.js
  167. +3 βˆ’3 lib/internal/crypto/random.js
  168. +4 βˆ’0 lib/internal/crypto/rsa.js
  169. +39 βˆ’52 lib/internal/crypto/sig.js
  170. +5 βˆ’1 lib/internal/errors.js
  171. +7 βˆ’2 lib/internal/http.js
  172. +3 βˆ’0 lib/internal/per_context/primordials.js
  173. +18 βˆ’32 lib/internal/perf/observe.js
  174. +1 βˆ’1 lib/internal/socketaddress.js
  175. +5 βˆ’4 lib/internal/util/inspect.js
  176. +4 βˆ’3 node.gypi
  177. +1 βˆ’0 src/api/embed_helpers.cc
  178. +3 βˆ’3 src/crypto/crypto_cipher.cc
  179. +33 βˆ’193 src/crypto/crypto_sig.cc
  180. +1 βˆ’1 src/crypto/crypto_sig.h
  181. +19 βˆ’0 src/env.cc
  182. +2 βˆ’0 src/env.h
  183. +1 βˆ’0 src/node_binding.cc
  184. +46 βˆ’4 src/node_http_parser.cc
  185. +1 βˆ’1 src/node_options.h
  186. +1 βˆ’0 src/node_perf_common.h
  187. +1 βˆ’1 test/js-native-api/test_exception/testFinalizerException.js
  188. +53 βˆ’0 test/parallel/test-async-hooks-fatal-error.js
  189. +33 βˆ’0 test/parallel/test-crypto-async-sign-verify.js
  190. +22 βˆ’0 test/parallel/test-crypto-authenticated.js
  191. +7 βˆ’3 test/parallel/test-crypto-dh-stateless.js
  192. +1 βˆ’1 test/parallel/test-crypto-dh.js
  193. +4 βˆ’2 test/parallel/test-crypto-keygen.js
  194. +7 βˆ’0 test/parallel/test-crypto-random.js
  195. +9 βˆ’5 test/parallel/test-crypto-sign-verify.js
  196. +9 βˆ’0 test/parallel/test-http-many-ended-pipelines.js
  197. +33 βˆ’22 test/parallel/test-http-methods.js
  198. +1 βˆ’1 test/parallel/test-http-parser-timeout-reset.js
  199. +1 βˆ’1 test/parallel/test-http-pipeline-assertionerror-finish.js
  200. +26 βˆ’0 test/parallel/test-http-req-close-robust-from-tampering.js
  201. +1 βˆ’1 test/parallel/test-http-server-destroy-socket-on-client-error.js
  202. +9 βˆ’6 test/parallel/test-http2-client-http1-server.js
  203. +1 βˆ’1 test/parallel/test-macos-app-sandbox.js
  204. +1 βˆ’1 test/parallel/test-readline-async-iterators.js
  205. +7 βˆ’0 test/parallel/test-v8-serdes.js
  206. +1 βˆ’0 test/parallel/test-zlib-unused-weak.js
  207. +7 βˆ’1 test/pummel/test-crypto-dh-keys.js
  208. +1 βˆ’1 test/pummel/test-dh-regr.js
  209. +5 βˆ’0 test/pummel/test-fs-watch-non-recursive.js
  210. +5 βˆ’0 test/pummel/test-hash-seed.js
  211. +6 βˆ’1 test/pummel/test-vm-memleak.js
  212. +3 βˆ’3 test/report/test-report-uv-handles.js
  213. +2 βˆ’2 tools/doc/apilinks.js
  214. +3 βˆ’4 tools/doc/checkLinks.js
  215. +10 βˆ’18 tools/doc/html.js
  216. +0 βˆ’2 tools/doc/json.js
  217. +1 βˆ’2 tools/lint-sh.js
  218. +6 βˆ’3 tools/test.py
  219. +84 βˆ’0 tsconfig.json
  220. +441 βˆ’0 typings/internalBinding.d.ts
  221. +526 βˆ’0 typings/primordials.d.ts
  222. +1 βˆ’1 vcbuild.bat
1 change: 1 addition & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -141,6 +141,7 @@ module.exports = {
code: 80,
ignorePattern: '^// Flags:',
ignoreRegExpLiterals: true,
ignoreTemplateLiterals: true,
ignoreUrls: true,
tabWidth: 2,
}],
2 changes: 2 additions & 0 deletions .github/workflows/coverage-windows.yml
Original file line number Diff line number Diff line change
@@ -44,6 +44,8 @@ jobs:
NODE_V8_COVERAGE: ./coverage/tmp
- name: Report
run: npx c8 report
env:
NODE_OPTIONS: --max-old-space-size=8192
- name: Clean tmp
run: npx rimraf ./coverage/tmp
- name: Upload
2 changes: 2 additions & 0 deletions .github/workflows/test-macos.yml
Original file line number Diff line number Diff line change
@@ -8,6 +8,8 @@ on:
- canary
- v[0-9]+.x-staging
- v[0-9]+.x
paths-ignore:
- 'doc/**'

env:
PYTHON_VERSION: 3.9
43 changes: 41 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@ TEST_CI_ARGS ?=
STAGINGSERVER ?= node-www
LOGLEVEL ?= silent
OSTYPE := $(shell uname -s | tr '[:upper:]' '[:lower:]')
ARCHTYPE := $(shell uname -m | tr '[:upper:]' '[:lower:]')
COVTESTS ?= test-cov
COV_SKIP_TESTS ?= core_line_numbers.js,testFinalizer.js,test_function/test.js
GTEST_FILTER ?= "*"
@@ -477,7 +478,7 @@ JS_SUITES ?= default
NATIVE_SUITES ?= addons js-native-api node-api
# CI_* variables should be kept synchronized with the ones in vcbuild.bat
CI_NATIVE_SUITES ?= $(NATIVE_SUITES) benchmark
CI_JS_SUITES ?= $(JS_SUITES)
CI_JS_SUITES ?= $(JS_SUITES) pummel
ifeq ($(node_use_openssl), false)
CI_DOC := doctool
else
@@ -773,6 +774,7 @@ docclean:

RAWVER=$(shell $(PYTHON) tools/getnodeversion.py)
VERSION=v$(RAWVER)
CHANGELOG=doc/changelogs/CHANGELOG_V$(firstword $(subst ., ,$(RAWVER))).md

# For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or
# "custom". For the nightly and next-nightly case, you need to set DATESTRING
@@ -960,8 +962,27 @@ release-only: check-xz
echo "" >&2 ; \
exit 1 ; \
fi
@if [ "$(RELEASE)" = "0" -o -f "$(CHANGELOG)" ]; then \
exit 0; \
else \
echo "" >&2 ; \
echo "#NODE_VERSION_IS_RELEASE is set to $(RELEASE) but " >&2 ; \
echo "$(CHANGELOG) does not exist." >&2 ; \
echo "" >&2 ; \
exit 1 ; \
fi

$(PKG): release-only
# pkg building is currently only supported on an ARM64 macOS host for
# ease of compiling fat-binaries for both macOS architectures.
ifneq ($(OSTYPE),darwin)
$(warning Invalid OSTYPE)
$(error OSTYPE should be `darwin` currently is $(OSTYPE))
endif
ifneq ($(ARCHTYPE),arm64)
$(warning Invalid ARCHTYPE)
$(error ARCHTYPE should be `arm64` currently is $(ARCHTYPE))
endif
$(RM) -r $(MACOSOUTDIR)
mkdir -p $(MACOSOUTDIR)/installer/productbuild
cat tools/macos-installer/productbuild/distribution.xml.tmpl \
@@ -982,14 +1003,28 @@ $(PKG): release-only
| sed -E "s/\\{npmversion\\}/$(NPMVERSION)/g" \
>$(MACOSOUTDIR)/installer/productbuild/Resources/$$lang/conclusion.html ; \
done
CC_host="cc -arch x86_64" CXX_host="c++ -arch x86_64" \
CC_target="cc -arch x86_64" CXX_target="c++ -arch x86_64" \
CC="cc -arch x86_64" CXX="c++ -arch x86_64" $(PYTHON) ./configure \
--dest-cpu=x86_64 \
--tag=$(TAG) \
--release-urlbase=$(RELEASE_URLBASE) \
$(CONFIG_FLAGS) $(BUILD_RELEASE_FLAGS)
arch -x86_64 $(MAKE) install V=$(V) DESTDIR=$(MACOSOUTDIR)/dist/x64/node
SIGN="$(CODESIGN_CERT)" PKGDIR="$(MACOSOUTDIR)/dist/x64/node/usr/local" sh \
tools/osx-codesign.sh
$(PYTHON) ./configure \
--dest-cpu=x64 \
--dest-cpu=arm64 \
--tag=$(TAG) \
--release-urlbase=$(RELEASE_URLBASE) \
$(CONFIG_FLAGS) $(BUILD_RELEASE_FLAGS)
$(MAKE) install V=$(V) DESTDIR=$(MACOSOUTDIR)/dist/node
SIGN="$(CODESIGN_CERT)" PKGDIR="$(MACOSOUTDIR)/dist/node/usr/local" sh \
tools/osx-codesign.sh
lipo $(MACOSOUTDIR)/dist/x64/node/usr/local/bin/node \
$(MACOSOUTDIR)/dist/node/usr/local/bin/node \
-output $(MACOSOUTDIR)/dist/node/usr/local/bin/node \
-create
mkdir -p $(MACOSOUTDIR)/dist/npm/usr/local/lib/node_modules
mkdir -p $(MACOSOUTDIR)/pkgs
mv $(MACOSOUTDIR)/dist/node/usr/local/lib/node_modules/npm \
@@ -1127,7 +1162,11 @@ $(BINARYTAR): release-only
$(MAKE) install DESTDIR=$(BINARYNAME) V=$(V) PORTABLE=1
cp README.md $(BINARYNAME)
cp LICENSE $(BINARYNAME)
ifeq ("$(wildcard $(CHANGELOG))","")
cp CHANGELOG.md $(BINARYNAME)
else
cp $(CHANGELOG) $(BINARYNAME)/CHANGELOG.md
endif
ifeq ($(OSTYPE),darwin)
SIGN="$(CODESIGN_CERT)" PKGDIR="$(BINARYNAME)" sh tools/osx-codesign.sh
endif
141 changes: 141 additions & 0 deletions benchmark/crypto/oneshot-sign-verify.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
'use strict';

const common = require('../common.js');
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');
const fixtures_keydir = path.resolve(__dirname, '../../test/fixtures/keys/');
const keyFixtures = {
publicKey: fs.readFileSync(`${fixtures_keydir}/ec_p256_public.pem`)
.toString(),
privateKey: fs.readFileSync(`${fixtures_keydir}/ec_p256_private.pem`)
.toString()
};

const data = crypto.randomBytes(256);

let pems;
let keyObjects;

function getKeyObject({ privateKey, publicKey }) {
return {
privateKey: crypto.createPrivateKey(privateKey),
publicKey: crypto.createPublicKey(publicKey)
};
}

const bench = common.createBenchmark(main, {
mode: ['sync', 'async-serial', 'async-parallel'],
keyFormat: ['pem', 'keyObject', 'pem.unique', 'keyObject.unique'],
n: [1e3],
});

function measureSync(n, privateKey, publicKey, keys) {
bench.start();
for (let i = 0; i < n; ++i) {
crypto.verify(
'sha256',
data,
{ key: publicKey || keys[i].publicKey, dsaEncoding: 'ieee-p1363' },
crypto.sign(
'sha256',
data,
{ key: privateKey || keys[i].privateKey, dsaEncoding: 'ieee-p1363' }));
}
bench.end(n);
}

function measureAsyncSerial(n, privateKey, publicKey, keys) {
let remaining = n;
function done() {
if (--remaining === 0)
bench.end(n);
else
one();
}

function one() {
crypto.sign(
'sha256',
data,
{
key: privateKey || keys[n - remaining].privateKey,
dsaEncoding: 'ieee-p1363'
},
(err, signature) => {
crypto.verify(
'sha256',
data,
{
key: publicKey || keys[n - remaining].publicKey,
dsaEncoding: 'ieee-p1363'
},
signature,
done);
});
}
bench.start();
one();
}

function measureAsyncParallel(n, privateKey, publicKey, keys) {
let remaining = n;
function done() {
if (--remaining === 0)
bench.end(n);
}
bench.start();
for (let i = 0; i < n; ++i) {
crypto.sign(
'sha256',
data,
{ key: privateKey || keys[i].privateKey, dsaEncoding: 'ieee-p1363' },
(err, signature) => {
crypto.verify(
'sha256',
data,
{ key: publicKey || keys[i].publicKey, dsaEncoding: 'ieee-p1363' },
signature,
done);
});
}
}

function main({ n, mode, keyFormat }) {
pems ||= [...Buffer.alloc(n)].map(() => ({
privateKey: keyFixtures.privateKey,
publicKey: keyFixtures.publicKey
}));
keyObjects ||= pems.map(getKeyObject);

let privateKey, publicKey, keys;

switch (keyFormat) {
case 'keyObject':
({ publicKey, privateKey } = keyObjects[0]);
break;
case 'pem':
({ publicKey, privateKey } = pems[0]);
break;
case 'pem.unique':
keys = pems;
break;
case 'keyObject.unique':
keys = keyObjects;
break;
default:
throw new Error('not implemented');
}

switch (mode) {
case 'sync':
measureSync(n, privateKey, publicKey, keys);
break;
case 'async-serial':
measureAsyncSerial(n, privateKey, publicKey, keys);
break;
case 'async-parallel':
measureAsyncParallel(n, privateKey, publicKey, keys);
break;
}
}
2 changes: 1 addition & 1 deletion common.gypi
Original file line number Diff line number Diff line change
@@ -36,7 +36,7 @@

# Reset this number to 0 on major V8 upgrades.
# Increment by one for each non-official patch applied to deps/v8.
'v8_embedder_string': '-node.8',
'v8_embedder_string': '-node.9',

##### V8 defaults for Node.js #####

10 changes: 9 additions & 1 deletion deps/llhttp/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# llhttp
[![CI](https://github.com/nodejs/llhttp/workflows/CI/badge.svg)](https://github.com/nodejs/llhttp/actions?query=workflow%3ACI)

Port of [http_parser][0] to [llparse][1].

@@ -31,7 +32,7 @@ So far llhttp outperforms http_parser:

| | input size | bandwidth | reqs/sec | time |
|:----------------|-----------:|-------------:|-----------:|--------:|
| **llhttp** | 8192.00 mb | 1777.24 mb/s | 3583799.39 ops/sec | 4.61 s |
| **llhttp** | 8192.00 mb | 1777.24 mb/s | 3583799.39 req/sec | 4.61 s |
| **http_parser** | 8192.00 mb | 694.66 mb/s | 1406180.33 req/sec | 11.79 s |

llhttp is faster by approximately **156%**.
@@ -92,6 +93,11 @@ if (err == HPE_OK) {
---
### Bindings to other languages
* Python: [pallas/pyllhttp][8]
* Ruby: [metabahn/llhttp][9]
#### LICENSE
This software is licensed under the MIT License.
@@ -125,3 +131,5 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
[5]: https://llvm.org/docs/LangRef.html#call-instruction
[6]: https://clang.llvm.org/
[7]: https://github.com/nodejs/node
[8]: https://github.com/pallas/pyllhttp
[9]: https://github.com/metabahn/llhttp
Loading