Skip to content

crypto: use names for asymmetric key algorithms - #65966

Merged
nodejs-github-bot merged 1 commit into
nodejs:mainfrom
panva:nid-cleanup
Sep 17, 2026
Merged

nodejs-github-bot merged 1 commit into
nodejs:mainfrom
panva:nid-cleanup

Conversation

@panva

@panva panva commented Sep 10, 2026

Copy link
Copy Markdown
Member

Provider-backed keys can have no numeric OpenSSL ID. Identify and construct asymmetric keys by algorithm name, replacing the custom PQC name-to-NID substitution with provider-aware matching in ncrypto.

Centralize known algorithm names, public key-type names, capabilities, and backend compatibility in ncrypto. Use named key generation jobs and remove asymmetric EVP_PKEY constants from the internal JavaScript binding.

Assisted-by: Codex

Provider-backed keys can have no numeric OpenSSL ID. Identify and
construct asymmetric keys by algorithm name, replacing the custom PQC
name-to-NID substitution with provider-aware matching in ncrypto.

Centralize known algorithm names, public key-type names, capabilities,
and backend compatibility in ncrypto. Use named key generation jobs and
remove asymmetric EVP_PKEY constants from the internal JavaScript
binding.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/crypto
  • @nodejs/performance
  • @nodejs/security-wg

@nodejs-github-bot nodejs-github-bot added lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run. labels Sep 10, 2026
@panva

panva commented Sep 10, 2026

Copy link
Copy Markdown
Member Author

Benchmark GHA (crypto / keyobject): https://github.com/nodejs/node/actions/runs/34348821454

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                                                              confidence improvement accuracy (*)    (**)   (***)
crypto/create-keyobject.js n=1000 keyFormat='der-pkcs8' keyType='ec'                                                                         -1.19 %       ±8.48% ±11.18% ±14.34%
crypto/create-keyobject.js n=1000 keyFormat='der-pkcs8' keyType='ed25519'                                                                    -0.05 %       ±6.85%  ±9.04% ±11.59%
crypto/create-keyobject.js n=1000 keyFormat='der-pkcs8' keyType='ml-dsa-44'                                                                  -1.42 %       ±6.44%  ±8.49% ±10.89%
crypto/create-keyobject.js n=1000 keyFormat='der-pkcs8' keyType='rsa'                                                                        -0.10 %       ±8.34% ±10.99% ±14.11%
crypto/create-keyobject.js n=1000 keyFormat='der-spki' keyType='ec'                                                                           0.20 %       ±9.14% ±12.04% ±15.45%
crypto/create-keyobject.js n=1000 keyFormat='der-spki' keyType='ed25519'                                                                      1.05 %       ±8.84% ±11.65% ±14.95%
crypto/create-keyobject.js n=1000 keyFormat='der-spki' keyType='ml-dsa-44'                                                                    0.49 %      ±10.07% ±13.28% ±17.04%
crypto/create-keyobject.js n=1000 keyFormat='der-spki' keyType='rsa'                                                                          3.08 %       ±9.22% ±12.15% ±15.59%
crypto/create-keyobject.js n=1000 keyFormat='jwk-private' keyType='ec'                                                                       -0.47 %       ±6.90%  ±9.10% ±11.68%
crypto/create-keyobject.js n=1000 keyFormat='jwk-private' keyType='ed25519'                                                                   1.59 %       ±6.46%  ±8.52% ±10.93%
crypto/create-keyobject.js n=1000 keyFormat='jwk-private' keyType='ml-dsa-44'                                                                -2.82 %       ±5.88%  ±7.75%  ±9.94%
crypto/create-keyobject.js n=1000 keyFormat='jwk-private' keyType='rsa'                                                                       0.66 %       ±6.70%  ±8.83% ±11.33%
crypto/create-keyobject.js n=1000 keyFormat='jwk-public' keyType='ec'                                                                         0.29 %       ±7.61% ±10.03% ±12.87%
crypto/create-keyobject.js n=1000 keyFormat='jwk-public' keyType='ed25519'                                                                   -0.11 %       ±8.39% ±11.06% ±14.19%
crypto/create-keyobject.js n=1000 keyFormat='jwk-public' keyType='ml-dsa-44'                                                                 -3.46 %       ±8.91% ±11.74% ±15.07%
crypto/create-keyobject.js n=1000 keyFormat='jwk-public' keyType='rsa'                                                                        0.77 %       ±8.06% ±10.62% ±13.63%
crypto/create-keyobject.js n=1000 keyFormat='pkcs8' keyType='ec'                                                                              0.70 %       ±8.97% ±11.82% ±15.17%
crypto/create-keyobject.js n=1000 keyFormat='pkcs8' keyType='ed25519'                                                                         1.30 %       ±6.71%  ±8.85% ±11.35%
crypto/create-keyobject.js n=1000 keyFormat='pkcs8' keyType='ml-dsa-44'                                                                       0.85 %       ±6.67%  ±8.80% ±11.29%
crypto/create-keyobject.js n=1000 keyFormat='pkcs8' keyType='rsa'                                                                            -0.32 %       ±7.70% ±10.15% ±13.03%
crypto/create-keyobject.js n=1000 keyFormat='raw-private' keyType='ec'                                                                        2.27 %       ±7.14%  ±9.41% ±12.08%
crypto/create-keyobject.js n=1000 keyFormat='raw-private' keyType='ed25519'                                                                  -0.07 %       ±6.36%  ±8.38% ±10.75%
crypto/create-keyobject.js n=1000 keyFormat='raw-public' keyType='ec'                                                                         2.84 %       ±7.81% ±10.29% ±13.20%
crypto/create-keyobject.js n=1000 keyFormat='raw-public' keyType='ed25519'                                                                    2.83 %       ±8.59% ±11.33% ±14.53%
crypto/create-keyobject.js n=1000 keyFormat='raw-public' keyType='ml-dsa-44'                                                                 -1.07 %       ±9.68% ±12.76% ±16.37%
crypto/create-keyobject.js n=1000 keyFormat='raw-seed' keyType='ml-dsa-44'                                                                    0.96 %       ±6.13%  ±8.08% ±10.37%
crypto/create-keyobject.js n=1000 keyFormat='spki' keyType='ec'                                                                               2.45 %       ±9.53% ±12.56% ±16.12%
crypto/create-keyobject.js n=1000 keyFormat='spki' keyType='ed25519'                                                                          0.59 %       ±8.94% ±11.79% ±15.13%
crypto/create-keyobject.js n=1000 keyFormat='spki' keyType='ml-dsa-44'                                                                        1.66 %       ±8.82% ±11.62% ±14.91%
crypto/create-keyobject.js n=1000 keyFormat='spki' keyType='rsa'                                                                             -0.12 %       ±8.67% ±11.42% ±14.66%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ed25519'                                   -0.99 %       ±8.56% ±11.29% ±14.48%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ed448'                                     -1.39 %       ±8.59% ±11.32% ±14.53%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ml-dsa-44'                                 -0.18 %       ±8.47% ±11.16% ±14.32%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ml-dsa-87'                                 -1.22 %       ±8.57% ±11.29% ±14.49%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ml-kem-1024'                               -1.07 %       ±8.44% ±11.13% ±14.28%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='ml-kem-768'                                 0.32 %       ±8.39% ±11.06% ±14.19%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='p-256'                                     -0.08 %       ±7.81% ±10.30% ±13.21%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='p-384'                                     -2.42 %      ±13.61% ±17.94% ±23.01%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='p-521'                                     -1.87 %      ±12.91% ±17.02% ±21.84%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='rsa-multiprime'                            -0.60 %       ±8.08% ±10.65% ±13.67%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='rsa-pss'                                   -0.37 %       ±7.68% ±10.12% ±12.99%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='rsa'                                       -0.36 %       ±7.86% ±10.36% ±13.30%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='slh-dsa-sha2-128s'                          0.45 %       ±8.46% ±11.15% ±14.30%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='slh-dsa-shake-256s'                        -0.37 %       ±8.64% ±11.39% ±14.62%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='x25519'                                    -1.90 %       ±8.48% ±11.18% ±14.35%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='export' keyType='x448'                                      -0.07 %       ±8.77% ±11.56% ±14.84%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ed25519'                                   -0.86 %       ±7.35%  ±9.69% ±12.43%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ed448'                                     -1.02 %      ±15.31% ±20.18% ±25.89%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ml-dsa-44'                                  0.14 %       ±6.87%  ±9.05% ±11.61%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ml-dsa-87'                                 -0.97 %       ±6.39%  ±8.43% ±10.81%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ml-kem-1024'                               -0.74 %       ±7.67% ±10.11% ±12.97%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='ml-kem-768'                                -0.64 %       ±7.98% ±10.51% ±13.49%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='p-256'                                     -0.47 %       ±9.39% ±12.38% ±15.89%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='p-384'                                     -1.14 %       ±7.81% ±10.29% ±13.21%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='p-521'                                     -0.47 %       ±7.45%  ±9.82% ±12.60%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='rsa-multiprime'                             0.14 %       ±9.22% ±12.15% ±15.59%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='rsa-pss'                                   -1.17 %       ±8.91% ±11.75% ±15.08%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='rsa'                                       -0.47 %       ±9.05% ±11.93% ±15.30%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='slh-dsa-sha2-128s'                         -1.16 %       ±9.36% ±12.34% ±15.84%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='slh-dsa-shake-256s'                         0.01 %       ±9.30% ±12.26% ±15.73%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='x25519'                                    -0.95 %       ±7.28%  ±9.60% ±12.32%
crypto/keyobject-serialization.js n=10000 type='private' format='der' operation='import' keyType='x448'                                      -4.32 %      ±15.19% ±20.03% ±25.70%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ed25519'                                   -1.03 %       ±7.87% ±10.38% ±13.32%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ed448'                                      1.81 %       ±7.78% ±10.25% ±13.16%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ml-dsa-44'                                  1.07 %       ±7.60% ±10.02% ±12.86%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ml-dsa-87'                                 -2.16 %       ±7.45%  ±9.83% ±12.61%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ml-kem-1024'                               -0.35 %       ±6.03%  ±7.95% ±10.21%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='ml-kem-768'                                -0.83 %       ±6.23%  ±8.22% ±10.54%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='p-256'                                     -1.64 %       ±5.57%  ±7.35%  ±9.43%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='p-384'                                     -3.02 %      ±18.05% ±23.79% ±30.53%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='p-521'                                      0.19 %      ±16.39% ±21.60% ±27.71%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='rsa-multiprime'                            -0.69 %       ±5.04%  ±6.64%  ±8.52%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='rsa'                                        0.71 %       ±4.76%  ±6.28%  ±8.06%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='slh-dsa-sha2-128s'                         -0.22 %       ±7.78% ±10.25% ±13.15%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='slh-dsa-shake-256s'                        -7.58 %       ±7.62% ±10.05% ±12.90%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='x25519'                                     0.19 %       ±7.84% ±10.34% ±13.26%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='export' keyType='x448'                                      -1.76 %       ±7.67% ±10.11% ±12.97%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ed25519'                                   -1.06 %       ±6.74%  ±8.89% ±11.40%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ed448'                                     -0.53 %      ±15.55% ±20.49% ±26.30%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ml-dsa-44'                                 -0.97 %       ±6.69%  ±8.82% ±11.31%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ml-dsa-87'                                 -1.20 %       ±6.22%  ±8.20% ±10.52%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ml-kem-1024'                               -0.75 %       ±6.39%  ±8.43% ±10.81%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='ml-kem-768'                                -2.10 %       ±6.68%  ±8.81% ±11.30%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='p-256'                                     -0.68 %       ±7.56%  ±9.97% ±12.79%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='p-384'                                      0.85 %      ±11.17% ±14.72% ±18.89%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='p-521'                                      0.11 %      ±18.80% ±24.79% ±31.80%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='rsa-multiprime'                             0.74 %       ±7.90% ±10.41% ±13.36%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='rsa'                                        1.20 %       ±7.44%  ±9.81% ±12.58%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='slh-dsa-sha2-128s'                         -7.03 %       ±8.31% ±10.95% ±14.06%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='slh-dsa-shake-256s'                        -5.22 %       ±8.40% ±11.07% ±14.20%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='x25519'                                    -0.94 %       ±6.80%  ±8.96% ±11.49%
crypto/keyobject-serialization.js n=10000 type='private' format='jwk' operation='import' keyType='x448'                                      -2.27 %      ±15.46% ±20.38% ±26.16%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ed25519'                                   -1.09 %       ±8.43% ±11.11% ±14.26%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ed448'                                     -1.87 %       ±8.40% ±11.08% ±14.21%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ml-dsa-44'                                  0.90 %       ±8.44% ±11.12% ±14.27%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ml-dsa-87'                                 -0.98 %       ±8.27% ±10.90% ±13.99%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ml-kem-1024'                               -0.22 %       ±8.16% ±10.75% ±13.80%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='ml-kem-768'                                 0.97 %       ±8.33% ±10.98% ±14.09%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='p-256'                                     -1.11 %       ±7.59% ±10.00% ±12.84%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='p-384'                                     -0.98 %      ±13.71% ±18.07% ±23.19%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='p-521'                                      0.18 %      ±12.92% ±17.03% ±21.86%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='rsa-multiprime'                            -1.63 %       ±7.40%  ±9.75% ±12.52%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='rsa-pss'                                    0.37 %       ±7.12%  ±9.39% ±12.05%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='rsa'                                        0.49 %       ±7.40%  ±9.76% ±12.52%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='slh-dsa-sha2-128s'                          0.88 %       ±8.28% ±10.92% ±14.01%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='slh-dsa-shake-256s'                        -1.60 %       ±8.41% ±11.09% ±14.23%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='x25519'                                    -1.58 %       ±8.33% ±10.97% ±14.08%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='export' keyType='x448'                                      -0.82 %       ±8.29% ±10.93% ±14.03%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ed25519'                                   -1.09 %       ±7.17%  ±9.45% ±12.13%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ed448'                                     -0.88 %      ±14.86% ±19.59% ±25.14%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ml-dsa-44'                                  0.30 %       ±7.09%  ±9.35% ±12.00%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ml-dsa-87'                                 -0.07 %       ±6.57%  ±8.66% ±11.11%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ml-kem-1024'                               -0.47 %       ±7.76% ±10.23% ±13.12%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='ml-kem-768'                                 0.72 %       ±8.33% ±10.98% ±14.08%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='p-256'                                     -1.70 %       ±9.25% ±12.19% ±15.65%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='p-384'                                     -3.23 %       ±8.21% ±10.83% ±13.89%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='p-521'                                     -0.90 %       ±8.00% ±10.54% ±13.52%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='rsa-multiprime'                            -0.96 %       ±8.78% ±11.57% ±14.85%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='rsa-pss'                                   -1.56 %       ±8.45% ±11.14% ±14.30%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='rsa'                                        0.32 %       ±8.68% ±11.44% ±14.67%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='slh-dsa-sha2-128s'                         -0.61 %       ±9.18% ±12.10% ±15.53%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='slh-dsa-shake-256s'                         0.27 %       ±9.30% ±12.26% ±15.73%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='x25519'                                    -0.63 %       ±7.13%  ±9.40% ±12.06%
crypto/keyobject-serialization.js n=10000 type='private' format='pem' operation='import' keyType='x448'                                       0.12 %      ±14.99% ±19.76% ±25.36%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='ed25519'                           -3.44 %       ±8.27% ±10.90% ±13.98%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='ed448'                             -2.17 %       ±8.75% ±11.53% ±14.79%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='p-256'                             -2.70 %       ±6.05%  ±7.97% ±10.23%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='p-384'                             -2.87 %      ±16.46% ±21.70% ±27.84%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='p-521'                             -0.86 %      ±14.57% ±19.20% ±24.64%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='slh-dsa-sha2-128s'                 -2.72 %       ±8.11% ±10.69% ±13.72%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='slh-dsa-shake-256s'                -4.46 %       ±8.32% ±10.97% ±14.08%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='x25519'                            -5.00 %       ±8.24% ±10.86% ±13.94%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='export' keyType='x448'                              -4.38 %       ±8.56% ±11.28% ±14.48%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='ed25519'                           -0.32 %       ±6.76%  ±8.91% ±11.43%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='ed448'                             -0.89 %      ±15.71% ±20.70% ±26.56%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='p-256'                              2.34 %       ±8.18% ±10.79% ±13.84%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='p-384'                              2.12 %      ±14.29% ±18.83% ±24.17%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='p-521'                              0.98 %      ±20.55% ±27.08% ±34.75%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='slh-dsa-sha2-128s'                  7.89 %       ±9.34% ±12.31% ±15.80%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='slh-dsa-shake-256s'        ***     47.14 %      ±11.49% ±15.15% ±19.44%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='x25519'                            -0.26 %       ±6.70%  ±8.83% ±11.33%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-private' operation='import' keyType='x448'                              -2.09 %      ±15.70% ±20.70% ±26.56%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='export' keyType='ml-dsa-44'                            -2.34 %       ±8.94% ±11.78% ±15.11%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='export' keyType='ml-dsa-87'                            -5.08 %       ±8.88% ±11.71% ±15.03%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='export' keyType='ml-kem-1024'                          -0.15 %       ±9.75% ±12.86% ±16.50%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='export' keyType='ml-kem-768'                           -2.27 %       ±9.44% ±12.45% ±15.97%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='import' keyType='ml-dsa-44'                             0.01 %       ±6.58%  ±8.68% ±11.13%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='import' keyType='ml-dsa-87'                            -0.50 %       ±6.28%  ±8.27% ±10.61%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='import' keyType='ml-kem-1024'                           0.26 %       ±6.46%  ±8.51% ±10.92%
crypto/keyobject-serialization.js n=10000 type='private' format='raw-seed' operation='import' keyType='ml-kem-768'                           -1.00 %       ±6.92%  ±9.13% ±11.71%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ed25519'                                    -2.10 %       ±8.40% ±11.08% ±14.21%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ed448'                                      -1.74 %       ±8.63% ±11.37% ±14.59%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ml-dsa-44'                                  -0.61 %       ±8.51% ±11.22% ±14.39%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ml-dsa-87'                                  -1.01 %       ±8.51% ±11.21% ±14.39%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ml-kem-1024'                                 0.38 %       ±8.31% ±10.96% ±14.06%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='ml-kem-768'                                  0.43 %       ±8.31% ±10.95% ±14.05%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='p-256'                                      -1.33 %       ±7.02%  ±9.25% ±11.87%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='p-384'                                      -1.95 %      ±15.91% ±20.97% ±26.91%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='p-521'                                      -1.65 %      ±14.38% ±18.96% ±24.33%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='rsa-multiprime'                             -1.34 %       ±8.33% ±10.98% ±14.10%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='rsa-pss'                                    -0.72 %       ±8.14% ±10.73% ±13.76%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='rsa'                                        -0.58 %       ±8.20% ±10.81% ±13.87%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='slh-dsa-sha2-128s'                           0.23 %       ±8.41% ±11.09% ±14.23%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='slh-dsa-shake-256s'                         -1.18 %       ±8.45% ±11.13% ±14.28%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='x25519'                                     -2.01 %       ±8.56% ±11.28% ±14.47%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='export' keyType='x448'                                       -1.58 %       ±8.60% ±11.34% ±14.55%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ed25519'                                    -0.62 %       ±9.11% ±12.00% ±15.40%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ed448'                                       0.39 %       ±9.41% ±12.41% ±15.92%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ml-dsa-44'                                   1.24 %       ±9.85% ±12.99% ±16.67%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ml-dsa-87'                                  -1.91 %       ±9.73% ±12.82% ±16.45%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ml-kem-1024'                                -0.54 %       ±7.85% ±10.34% ±13.27%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='ml-kem-768'                                 -0.71 %       ±8.52% ±11.23% ±14.40%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='p-256'                                      -1.06 %       ±9.52% ±12.54% ±16.09%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='p-384'                                      -2.59 %       ±7.87% ±10.38% ±13.32%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='p-521'                                      -0.57 %       ±7.72% ±10.17% ±13.05%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='rsa-multiprime'                              1.40 %       ±9.68% ±12.76% ±16.37%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='rsa-pss'                                    -0.76 %       ±9.27% ±12.21% ±15.67%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='rsa'                                         0.22 %       ±9.38% ±12.36% ±15.86%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='slh-dsa-sha2-128s'                          -1.22 %       ±9.18% ±12.10% ±15.52%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='slh-dsa-shake-256s'                         -1.04 %       ±9.29% ±12.25% ±15.71%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='x25519'                                     -1.53 %       ±9.20% ±12.13% ±15.57%
crypto/keyobject-serialization.js n=10000 type='public' format='der' operation='import' keyType='x448'                                       -2.67 %       ±9.48% ±12.50% ±16.04%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ed25519'                                    -2.67 %       ±7.69% ±10.13% ±13.00%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ed448'                                      -2.91 %       ±7.34%  ±9.68% ±12.41%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ml-dsa-44'                                  -5.24 %       ±7.41%  ±9.77% ±12.54%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ml-dsa-87'                            *     -7.88 %       ±7.23%  ±9.54% ±12.24%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ml-kem-1024'                                -2.62 %       ±5.51%  ±7.26%  ±9.32%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='ml-kem-768'                                 -4.15 %       ±6.02%  ±7.94% ±10.19%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='p-256'                                      -1.98 %       ±5.79%  ±7.63%  ±9.79%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='p-384'                                      -3.13 %      ±18.14% ±23.91% ±30.68%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='p-521'                                      -0.78 %      ±16.50% ±21.75% ±27.91%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='rsa-multiprime'                             -0.21 %       ±4.71%  ±6.21%  ±7.97%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='rsa'                                        -1.35 %       ±4.57%  ±6.02%  ±7.72%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='slh-dsa-sha2-128s'                          -6.93 %       ±7.38%  ±9.72% ±12.48%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='slh-dsa-shake-256s'                 ***    -12.90 %       ±7.56%  ±9.96% ±12.78%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='x25519'                                     -0.88 %       ±7.76% ±10.22% ±13.12%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='export' keyType='x448'                                       -6.48 %       ±7.36%  ±9.70% ±12.45%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ed25519'                                    -2.04 %       ±8.53% ±11.25% ±14.43%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ed448'                                      -1.22 %       ±8.47% ±11.16% ±14.32%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ml-dsa-44'                                  -4.89 %       ±8.96% ±11.81% ±15.15%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ml-dsa-87'                                  -3.63 %       ±7.99% ±10.53% ±13.51%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ml-kem-1024'                                -3.82 %       ±7.17%  ±9.46% ±12.13%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='ml-kem-768'                                 -5.92 %       ±7.63% ±10.05% ±12.90%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='p-256'                                      -0.99 %       ±8.52% ±11.22% ±14.40%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='p-384'                                      -2.74 %      ±10.32% ±13.61% ±17.46%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='p-521'                                      -2.34 %       ±8.66% ±11.42% ±14.65%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='rsa-multiprime'                             -1.35 %       ±8.66% ±11.41% ±14.64%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='rsa'                                         1.25 %       ±8.52% ±11.24% ±14.42%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='slh-dsa-sha2-128s'                    *     -8.85 %       ±8.36% ±11.02% ±14.14%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='slh-dsa-shake-256s'                         -7.03 %       ±8.28% ±10.91% ±14.00%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='x25519'                                     -2.01 %       ±8.80% ±11.59% ±14.88%
crypto/keyobject-serialization.js n=10000 type='public' format='jwk' operation='import' keyType='x448'                                       -3.20 %       ±8.70% ±11.47% ±14.72%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ed25519'                                    -2.11 %       ±8.93% ±11.77% ±15.11%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ed448'                                      -2.46 %       ±8.83% ±11.63% ±14.93%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ml-dsa-44'                                  -0.84 %       ±8.58% ±11.31% ±14.51%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ml-dsa-87'                                  -1.29 %       ±8.55% ±11.27% ±14.46%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ml-kem-1024'                                -0.31 %       ±7.65% ±10.09% ±12.94%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='ml-kem-768'                                 -0.76 %       ±8.01% ±10.55% ±13.54%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='p-256'                                      -0.32 %       ±8.08% ±10.64% ±13.66%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='p-384'                                      -2.17 %      ±13.80% ±18.19% ±23.35%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='p-521'                                       0.64 %      ±12.32% ±16.25% ±20.85%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='rsa-multiprime'                             -1.27 %       ±8.97% ±11.82% ±15.17%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='rsa-pss'                                    -1.73 %       ±8.76% ±11.54% ±14.81%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='rsa'                                        -0.59 %       ±8.75% ±11.53% ±14.79%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='slh-dsa-sha2-128s'                           0.31 %       ±8.90% ±11.74% ±15.06%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='slh-dsa-shake-256s'                         -0.64 %       ±9.01% ±11.88% ±15.24%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='x25519'                                     -1.50 %       ±8.98% ±11.83% ±15.18%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='export' keyType='x448'                                       -1.16 %       ±8.96% ±11.81% ±15.15%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ed25519'                                    -3.10 %       ±9.39% ±12.38% ±15.89%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ed448'                                      -1.61 %       ±9.31% ±12.27% ±15.74%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ml-dsa-44'                                  -0.84 %       ±8.98% ±11.83% ±15.18%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ml-dsa-87'                                  -1.57 %       ±8.54% ±11.25% ±14.44%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ml-kem-1024'                                -1.46 %       ±7.84% ±10.34% ±13.26%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='ml-kem-768'                                 -0.13 %       ±8.50% ±11.21% ±14.38%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='p-256'                                      -1.45 %       ±9.76% ±12.86% ±16.50%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='p-384'                                      -2.69 %       ±8.33% ±10.98% ±14.09%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='p-521'                                       0.23 %       ±8.00% ±10.54% ±13.53%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='rsa-multiprime'                             -0.97 %       ±9.37% ±12.35% ±15.84%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='rsa-pss'                                    -1.61 %       ±9.33% ±12.30% ±15.78%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='rsa'                                        -0.72 %       ±9.39% ±12.38% ±15.89%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='slh-dsa-sha2-128s'                          -0.68 %       ±9.46% ±12.47% ±16.00%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='slh-dsa-shake-256s'                         -0.83 %       ±9.36% ±12.34% ±15.83%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='x25519'                                     -1.10 %       ±9.31% ±12.27% ±15.75%
crypto/keyobject-serialization.js n=10000 type='public' format='pem' operation='import' keyType='x448'                                       -2.17 %       ±9.55% ±12.59% ±16.16%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ed25519'                             -1.95 %       ±8.47% ±11.16% ±14.32%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ed448'                               -3.46 %       ±8.59% ±11.33% ±14.53%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ml-dsa-44'                           -2.87 %      ±11.53% ±15.20% ±19.51%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ml-dsa-87'                           -5.67 %      ±13.60% ±17.92% ±23.00%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ml-kem-1024'                         -1.55 %       ±7.90% ±10.41% ±13.36%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='ml-kem-768'                          -2.39 %       ±7.09%  ±9.35% ±12.00%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='p-256'                               -1.81 %       ±5.52%  ±7.28%  ±9.34%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='p-384'                               -3.58 %      ±18.22% ±24.01% ±30.81%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='p-521'                               -1.08 %      ±16.65% ±21.94% ±28.16%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='slh-dsa-sha2-128s'                   -3.28 %       ±8.39% ±11.06% ±14.19%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='slh-dsa-shake-256s'                  -4.00 %       ±8.47% ±11.17% ±14.33%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='x25519'                              -5.40 %       ±8.38% ±11.04% ±14.17%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='export' keyType='x448'                                -2.26 %       ±8.84% ±11.65% ±14.95%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ed25519'                              3.61 %       ±8.95% ±11.80% ±15.15%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ed448'                                2.98 %       ±9.03% ±11.91% ±15.28%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ml-dsa-44'                           -1.50 %       ±9.30% ±12.26% ±15.73%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ml-dsa-87'                           -0.39 %       ±9.71% ±12.80% ±16.43%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ml-kem-1024'                          0.82 %       ±7.68% ±10.13% ±13.00%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='ml-kem-768'                          -0.34 %       ±7.85% ±10.35% ±13.28%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='p-256'                                2.55 %       ±8.52% ±11.24% ±14.42%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='p-384'                               -0.03 %      ±10.44% ±13.76% ±17.65%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='p-521'                                1.41 %       ±8.68% ±11.45% ±14.69%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='slh-dsa-sha2-128s'                    9.21 %       ±9.43% ±12.42% ±15.94%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='slh-dsa-shake-256s'          ***     51.61 %      ±11.82% ±15.58% ±20.00%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='x25519'                               2.29 %       ±8.85% ±11.66% ±14.96%
crypto/keyobject-serialization.js n=10000 type='public' format='raw-public' operation='import' keyType='x448'                                 1.97 %       ±8.93% ±11.77% ±15.10%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 270 comparisons, you can thus
expect the following amount of false-positive results:
  13.50 false positives, when considering a   5% risk acceptance (*, **, ***),
  2.70 false positives, when considering a   1% risk acceptance (**, ***),
  0.27 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / oneshot-sign.js): https://github.com/nodejs/node/actions/runs/34348824410

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                                     confidence improvement accuracy (*)    (**)   (***)
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async-parallel' keyType='ec'                                     0.15 %       ±9.48% ±12.50% ±16.04%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async-parallel' keyType='ed25519'                               -0.57 %       ±7.35%  ±9.68% ±12.42%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async-parallel' keyType='ml-dsa-44'                             -0.28 %       ±7.70% ±10.15% ±13.02%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async-parallel' keyType='rsa'                                   -1.61 %       ±5.37%  ±7.08%  ±9.09%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async' keyType='ec'                                             -2.18 %       ±8.09% ±10.67% ±13.69%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async' keyType='ed25519'                                        -0.43 %       ±6.89%  ±9.08% ±11.65%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async' keyType='ml-dsa-44'                                       0.46 %       ±6.27%  ±8.26% ±10.61%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='async' keyType='rsa'                                            -1.29 %       ±3.11%  ±4.10%  ±5.26%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='sync' keyType='ec'                                              -2.23 %       ±8.28% ±10.91% ±14.00%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='sync' keyType='ed25519'                                         -2.03 %       ±7.03%  ±9.26% ±11.88%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='sync' keyType='ml-dsa-44'                                       -0.02 %       ±5.82%  ±7.67%  ±9.85%
crypto/oneshot-sign.js n=1000 keyFormat='der' mode='sync' keyType='rsa'                                             -0.44 %       ±2.65%  ±3.49%  ±4.48%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ec'                                    -0.87 %       ±7.20%  ±9.49% ±12.17%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ed25519'                               -1.59 %       ±7.43%  ±9.80% ±12.57%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ml-dsa-44'                             -0.92 %       ±7.65% ±10.08% ±12.94%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='rsa'                                   -0.52 %       ±5.18%  ±6.82%  ±8.76%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async' keyType='ec'                                             -1.62 %       ±7.41%  ±9.76% ±12.53%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async' keyType='ed25519'                                        -0.67 %       ±6.86%  ±9.05% ±11.61%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async' keyType='ml-dsa-44'                                      -1.34 %       ±6.21%  ±8.19% ±10.51%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='async' keyType='rsa'                                            -1.29 %       ±3.23%  ±4.25%  ±5.46%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='sync' keyType='ec'                                              -1.20 %       ±7.15%  ±9.42% ±12.09%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='sync' keyType='ed25519'                                         -2.04 %       ±6.87%  ±9.06% ±11.62%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='sync' keyType='ml-dsa-44'                                       -0.25 %       ±5.62%  ±7.40%  ±9.50%
crypto/oneshot-sign.js n=1000 keyFormat='jwk' mode='sync' keyType='rsa'                                             -0.32 %       ±2.76%  ±3.63%  ±4.66%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ec'                       -1.11 %       ±7.22%  ±9.52% ±12.21%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ed25519'                  -0.63 %       ±8.43% ±11.12% ±14.26%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ml-dsa-44'                -1.85 %       ±7.32%  ±9.65% ±12.38%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='rsa'                      -0.47 %       ±5.61%  ±7.40%  ±9.49%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ec'                              -1.12 %       ±7.74% ±10.20% ±13.08%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ed25519'                         -0.20 %       ±8.60% ±11.33% ±14.54%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ml-dsa-44'                        0.24 %       ±7.53%  ±9.93% ±12.74%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='rsa'                              0.28 %       ±6.18%  ±8.14% ±10.45%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async' keyType='ec'                                       -1.43 %       ±7.80% ±10.28% ±13.19%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async' keyType='ed25519'                                  -0.27 %       ±7.97% ±10.50% ±13.47%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async' keyType='ml-dsa-44'                                -0.80 %       ±6.14%  ±8.09% ±10.38%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='async' keyType='rsa'                                      -1.44 %       ±2.92%  ±3.85%  ±4.94%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='sync' keyType='ec'                                        -1.99 %       ±6.28%  ±8.27% ±10.62%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='sync' keyType='ed25519'                                   -0.77 %       ±6.66%  ±8.78% ±11.27%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='sync' keyType='ml-dsa-44'                                  0.35 %       ±5.64%  ±7.43%  ±9.54%
crypto/oneshot-sign.js n=1000 keyFormat='keyObject' mode='sync' keyType='rsa'                                       -0.60 %       ±2.89%  ±3.81%  ±4.89%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ec'                                    -2.49 %       ±9.55% ±12.59% ±16.15%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ed25519'                               -0.49 %       ±6.80%  ±8.96% ±11.50%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ml-dsa-44'                              0.28 %       ±8.06% ±10.63% ±13.63%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async-parallel' keyType='rsa'                                   -0.93 %       ±5.28%  ±6.96%  ±8.93%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async' keyType='ec'                                             -0.91 %       ±8.19% ±10.79% ±13.85%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async' keyType='ed25519'                                        -0.61 %       ±6.96%  ±9.17% ±11.77%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async' keyType='ml-dsa-44'                                      -0.32 %       ±6.40%  ±8.44% ±10.82%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='async' keyType='rsa'                                            -0.26 %       ±3.41%  ±4.49%  ±5.76%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='sync' keyType='ec'                                              -1.73 %       ±8.36% ±11.01% ±14.13%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='sync' keyType='ed25519'                                         -0.93 %       ±6.63%  ±8.74% ±11.21%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='sync' keyType='ml-dsa-44'                                       -0.85 %       ±5.86%  ±7.73%  ±9.92%
crypto/oneshot-sign.js n=1000 keyFormat='pem' mode='sync' keyType='rsa'                                             -0.11 %       ±2.83%  ±3.72%  ±4.78%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='async-parallel' keyType='ec'                             0.55 %       ±8.54% ±11.26% ±14.45%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='async-parallel' keyType='ed25519'                        0.07 %       ±7.42%  ±9.78% ±12.55%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='async' keyType='ec'                                      1.65 %       ±7.88% ±10.39% ±13.33%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='async' keyType='ed25519'                                -0.50 %       ±6.91%  ±9.11% ±11.69%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='sync' keyType='ec'                                      -0.25 %       ±7.31%  ±9.64% ±12.37%
crypto/oneshot-sign.js n=1000 keyFormat='raw-private' mode='sync' keyType='ed25519'                                 -1.17 %       ±6.56%  ±8.65% ±11.10%
crypto/oneshot-sign.js n=1000 keyFormat='raw-seed' mode='async-parallel' keyType='ml-dsa-44'                         0.78 %       ±7.51%  ±9.90% ±12.70%
crypto/oneshot-sign.js n=1000 keyFormat='raw-seed' mode='async' keyType='ml-dsa-44'                                 -0.15 %       ±6.23%  ±8.21% ±10.53%
crypto/oneshot-sign.js n=1000 keyFormat='raw-seed' mode='sync' keyType='ml-dsa-44'                                  -0.21 %       ±5.77%  ±7.61%  ±9.76%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 61 comparisons, you can thus
expect the following amount of false-positive results:
  3.05 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.61 false positives, when considering a   1% risk acceptance (**, ***),
  0.06 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / oneshot-verify.js): https://github.com/nodejs/node/actions/runs/34348827543

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                                       confidence improvement accuracy (*)    (**)   (***)
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async-parallel' keyType='ec'                                    -1.12 %       ±9.65% ±12.72% ±16.32%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async-parallel' keyType='ed25519'                                0.81 %      ±10.42% ±13.74% ±17.63%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async-parallel' keyType='ml-dsa-44'                              1.07 %       ±9.09% ±11.98% ±15.37%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async-parallel' keyType='rsa'                                    0.85 %      ±11.62% ±15.32% ±19.66%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async' keyType='ec'                                             -0.64 %       ±7.16%  ±9.44% ±12.12%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async' keyType='ed25519'                                         0.27 %       ±6.77%  ±8.92% ±11.45%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async' keyType='ml-dsa-44'                                       0.51 %       ±8.19% ±10.80% ±13.86%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='async' keyType='rsa'                                            -0.78 %       ±8.24% ±10.87% ±13.94%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='sync' keyType='ec'                                               0.51 %       ±5.36%  ±7.06%  ±9.06%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='sync' keyType='ed25519'                                         -1.11 %       ±5.81%  ±7.65%  ±9.82%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='sync' keyType='ml-dsa-44'                                       -0.67 %       ±7.43%  ±9.79% ±12.56%
crypto/oneshot-verify.js n=1000 keyFormat='der' mode='sync' keyType='rsa'                                             -1.07 %       ±6.92%  ±9.12% ±11.70%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ec'                                     1.23 %       ±9.83% ±12.96% ±16.62%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ed25519'                               -2.39 %       ±9.63% ±12.70% ±16.29%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='ml-dsa-44'                             -0.52 %       ±8.84% ±11.65% ±14.95%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async-parallel' keyType='rsa'                                    0.10 %      ±11.64% ±15.35% ±19.69%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async' keyType='ec'                                             -0.67 %       ±7.02%  ±9.25% ±11.87%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async' keyType='ed25519'                                         0.65 %       ±6.82%  ±8.99% ±11.53%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async' keyType='ml-dsa-44'                                      -0.43 %       ±7.93% ±10.46% ±13.42%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='async' keyType='rsa'                                             0.25 %       ±8.08% ±10.65% ±13.67%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='sync' keyType='ec'                                              -0.50 %       ±4.89%  ±6.44%  ±8.26%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='sync' keyType='ed25519'                                          0.13 %       ±5.86%  ±7.73%  ±9.92%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='sync' keyType='ml-dsa-44'                                       -0.70 %       ±7.12%  ±9.38% ±12.04%
crypto/oneshot-verify.js n=1000 keyFormat='jwk' mode='sync' keyType='rsa'                                             -0.98 %       ±6.07%  ±8.00% ±10.26%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ec'                       -0.33 %       ±6.42%  ±8.46% ±10.86%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ed25519'                  -0.18 %       ±9.53% ±12.56% ±16.12%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='ml-dsa-44'                -1.17 %       ±8.13% ±10.71% ±13.75%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject.unique' mode='async-parallel' keyType='rsa'                      -0.53 %       ±8.97% ±11.83% ±15.18%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ec'                               1.25 %       ±6.34%  ±8.35% ±10.72%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ed25519'                          0.26 %       ±9.56% ±12.61% ±16.18%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='ml-dsa-44'                        0.83 %       ±8.23% ±10.85% ±13.92%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async-parallel' keyType='rsa'                              0.09 %       ±8.90% ±11.73% ±15.06%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async' keyType='ec'                                       -1.10 %       ±6.49%  ±8.56% ±10.98%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async' keyType='ed25519'                                  -0.44 %       ±6.75%  ±8.90% ±11.41%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async' keyType='ml-dsa-44'                                 1.31 %       ±7.68% ±10.12% ±12.99%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='async' keyType='rsa'                                      -1.27 %       ±7.74% ±10.21% ±13.09%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='sync' keyType='ec'                                        -0.90 %       ±3.51%  ±4.62%  ±5.93%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='sync' keyType='ed25519'                                   -0.19 %       ±5.69%  ±7.50%  ±9.62%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='sync' keyType='ml-dsa-44'                                  0.38 %       ±6.85%  ±9.03% ±11.59%
crypto/oneshot-verify.js n=1000 keyFormat='keyObject' mode='sync' keyType='rsa'                                       -0.50 %       ±5.37%  ±7.08%  ±9.08%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ec'                                    -3.39 %      ±10.17% ±13.41% ±17.20%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ed25519'                               -0.27 %      ±10.81% ±14.25% ±18.28%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async-parallel' keyType='ml-dsa-44'                             -0.27 %       ±9.36% ±12.33% ±15.83%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async-parallel' keyType='rsa'                                   -0.50 %      ±10.77% ±14.20% ±18.22%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async' keyType='ec'                                             -0.46 %       ±7.15%  ±9.42% ±12.09%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async' keyType='ed25519'                                         0.98 %       ±6.92%  ±9.13% ±11.71%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async' keyType='ml-dsa-44'                                       2.08 %       ±8.12% ±10.71% ±13.74%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='async' keyType='rsa'                                             1.11 %       ±8.29% ±10.92% ±14.01%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='sync' keyType='ec'                                               0.26 %       ±5.30%  ±6.98%  ±8.96%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='sync' keyType='ed25519'                                         -0.26 %       ±6.04%  ±7.97% ±10.22%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='sync' keyType='ml-dsa-44'                                        1.03 %       ±7.54%  ±9.93% ±12.75%
crypto/oneshot-verify.js n=1000 keyFormat='pem' mode='sync' keyType='rsa'                                              0.28 %       ±7.25%  ±9.56% ±12.27%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async-parallel' keyType='ec'                              0.98 %       ±9.68% ±12.75% ±16.37%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async-parallel' keyType='ed25519'                        -1.70 %       ±9.20% ±12.12% ±15.56%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async-parallel' keyType='ml-dsa-44'                      -1.57 %       ±8.77% ±11.56% ±14.83%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async' keyType='ec'                                       0.94 %       ±7.12%  ±9.38% ±12.03%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async' keyType='ed25519'                                 -0.36 %       ±6.83%  ±9.01% ±11.56%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='async' keyType='ml-dsa-44'                                0.20 %       ±7.98% ±10.51% ±13.49%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='sync' keyType='ec'                                        0.09 %       ±4.74%  ±6.25%  ±8.02%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='sync' keyType='ed25519'                                   0.20 %       ±5.76%  ±7.60%  ±9.75%
crypto/oneshot-verify.js n=1000 keyFormat='raw-public' mode='sync' keyType='ml-dsa-44'                                 0.63 %       ±7.35%  ±9.69% ±12.43%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 61 comparisons, you can thus
expect the following amount of false-positive results:
  3.05 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.61 false positives, when considering a   1% risk acceptance (**, ***),
  0.06 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / webcrypto-sign.js): https://github.com/nodejs/node/actions/runs/34348830291

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                              confidence improvement accuracy (*)    (**)   (***)
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='parallel' keyType='ec'                               -3.25 %       ±6.50%  ±8.56% ±10.99%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='parallel' keyType='ed25519'                          -1.05 %       ±7.44%  ±9.81% ±12.58%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='parallel' keyType='ml-dsa-44'                         0.51 %       ±7.70% ±10.15% ±13.03%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='parallel' keyType='rsa-pss'                          -0.61 %       ±6.54%  ±8.63% ±11.07%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='parallel' keyType='rsassa-pkcs1-v1_5'                -1.13 %       ±6.82%  ±8.98% ±11.53%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='serial' keyType='ec'                                 -1.09 %       ±7.62% ±10.05% ±12.89%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='serial' keyType='ed25519'                            -0.01 %       ±6.73%  ±8.87% ±11.39%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='serial' keyType='ml-dsa-44'                          -0.29 %       ±6.04%  ±7.97% ±10.22%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='serial' keyType='rsa-pss'                             0.33 %       ±2.94%  ±3.88%  ±4.98%
crypto/webcrypto-sign.js n=1000 keyReuse='shared' mode='serial' keyType='rsassa-pkcs1-v1_5'                  -1.38 %       ±2.86%  ±3.77%  ±4.84%
crypto/webcrypto-sign.js n=1000 keyReuse='unique' mode='parallel' keyType='ec'                               -2.80 %       ±6.38%  ±8.41% ±10.79%
crypto/webcrypto-sign.js n=1000 keyReuse='unique' mode='parallel' keyType='ed25519'                           1.25 %       ±7.13%  ±9.40% ±12.06%
crypto/webcrypto-sign.js n=1000 keyReuse='unique' mode='parallel' keyType='ml-dsa-44'                         2.14 %       ±7.91% ±10.42% ±13.38%
crypto/webcrypto-sign.js n=1000 keyReuse='unique' mode='parallel' keyType='rsa-pss'                           0.54 %       ±5.64%  ±7.44%  ±9.54%
crypto/webcrypto-sign.js n=1000 keyReuse='unique' mode='parallel' keyType='rsassa-pkcs1-v1_5'                -2.17 %       ±5.79%  ±7.63%  ±9.79%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 15 comparisons, you can thus
expect the following amount of false-positive results:
  0.75 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.15 false positives, when considering a   1% risk acceptance (**, ***),
  0.01 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / webcrypto-verify.js): https://github.com/nodejs/node/actions/runs/34348833659

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                                                confidence improvement accuracy (*)    (**)   (***)
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='parallel' keyType='ec'                                0.64 %       ±9.46% ±12.47% ±16.00%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='parallel' keyType='ed25519'                          -1.10 %      ±10.08% ±13.29% ±17.06%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='parallel' keyType='ml-dsa-44'                         0.56 %       ±8.19% ±10.79% ±13.84%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='parallel' keyType='rsa-pss'                           2.56 %      ±11.33% ±14.94% ±19.17%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='parallel' keyType='rsassa-pkcs1-v1_5'                 0.83 %      ±10.85% ±14.30% ±18.34%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='serial' keyType='ec'                                  0.01 %       ±7.75% ±10.21% ±13.10%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='serial' keyType='ed25519'                             0.10 %       ±8.08% ±10.65% ±13.67%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='serial' keyType='ml-dsa-44'                          -0.00 %       ±8.71% ±11.48% ±14.72%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='serial' keyType='rsa-pss'                            -0.63 %       ±9.42% ±12.41% ±15.93%
crypto/webcrypto-verify.js n=1000 keyReuse='shared' mode='serial' keyType='rsassa-pkcs1-v1_5'                  -1.08 %       ±9.43% ±12.43% ±15.95%
crypto/webcrypto-verify.js n=1000 keyReuse='unique' mode='parallel' keyType='ec'                               -2.58 %       ±9.46% ±12.47% ±16.00%
crypto/webcrypto-verify.js n=1000 keyReuse='unique' mode='parallel' keyType='ed25519'                          -0.71 %      ±10.17% ±13.40% ±17.19%
crypto/webcrypto-verify.js n=1000 keyReuse='unique' mode='parallel' keyType='ml-dsa-44'                         0.28 %       ±7.97% ±10.50% ±13.47%
crypto/webcrypto-verify.js n=1000 keyReuse='unique' mode='parallel' keyType='rsa-pss'                           1.50 %      ±10.12% ±13.34% ±17.12%
crypto/webcrypto-verify.js n=1000 keyReuse='unique' mode='parallel' keyType='rsassa-pkcs1-v1_5'                -0.83 %       ±9.53% ±12.57% ±16.12%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 15 comparisons, you can thus
expect the following amount of false-positive results:
  0.75 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.15 false positives, when considering a   1% risk acceptance (**, ***),
  0.01 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / keygen.js): https://github.com/nodejs/node/actions/runs/34348840314

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                         confidence improvement accuracy (*)    (**)   (***)
crypto/keygen.js n=100 method='dsaAsync'                 1.60 %       ±6.95%  ±9.16% ±11.75%
crypto/keygen.js n=100 method='dsaSync'                  0.92 %       ±2.96%  ±3.90%  ±5.00%
crypto/keygen.js n=100 method='rsaAsync'                -0.88 %       ±9.51% ±12.54% ±16.09%
crypto/keygen.js n=100 method='rsaSync'                 -1.34 %       ±4.31%  ±5.68%  ±7.29%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 4 comparisons, you can thus
expect the following amount of false-positive results:
  0.20 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.04 false positives, when considering a   1% risk acceptance (**, ***),
  0.00 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (crypto / rsa-encrypt-decrypt-throughput.js): https://github.com/nodejs/node/actions/runs/34348843444

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                                                    confidence improvement accuracy (*)   (**)  (***)
crypto/rsa-encrypt-decrypt-throughput.js len=16 keylen='2048' n=500                 0.38 %       ±4.41% ±5.81% ±7.46%
crypto/rsa-encrypt-decrypt-throughput.js len=16 keylen='4096' n=500                 0.90 %       ±3.54% ±4.67% ±5.99%
crypto/rsa-encrypt-decrypt-throughput.js len=32 keylen='2048' n=500                 1.09 %       ±4.26% ±5.62% ±7.21%
crypto/rsa-encrypt-decrypt-throughput.js len=32 keylen='4096' n=500                 0.40 %       ±3.60% ±4.75% ±6.09%
crypto/rsa-encrypt-decrypt-throughput.js len=64 keylen='2048' n=500                 0.80 %       ±4.27% ±5.63% ±7.23%
crypto/rsa-encrypt-decrypt-throughput.js len=64 keylen='4096' n=500                -0.28 %       ±3.60% ±4.74% ±6.08%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 6 comparisons, you can thus
expect the following amount of false-positive results:
  0.30 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.06 false positives, when considering a   1% risk acceptance (**, ***),
  0.01 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


Benchmark GHA (tls / tls-connect.js): https://github.com/nodejs/node/actions/runs/34348846429

Results

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.

Benchmark results:

                                        confidence improvement accuracy (*)   (**)   (***)
tls/tls-connect.js dur=5 concurrency=1                  0.64 %       ±6.33% ±8.34% ±10.71%
tls/tls-connect.js dur=5 concurrency=10                -0.30 %       ±6.09% ±8.02% ±10.29%

Be aware that when doing many comparisons the risk of a false-positive
result increases. In this case, there are 2 comparisons, you can thus
expect the following amount of false-positive results:
  0.10 false positives, when considering a   5% risk acceptance (*, **, ***),
  0.02 false positives, when considering a   1% risk acceptance (**, ***),
  0.00 false positives, when considering a 0.1% risk acceptance (***)

[!WARNING]
Do not take GHA benchmark results as face value, always confirm them
using a dedicated machine, e.g. Jenkins CI.


@codecov

codecov Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 85.95318% with 42 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.21%. Comparing base (313b834) to head (4308fdf).
⚠️ Report is 111 commits behind head on main.

Files with missing lines Patch % Lines
src/crypto/crypto_keys.cc 88.55% 2 Missing and 17 partials ⚠️
src/crypto/crypto_ec.cc 42.85% 5 Missing and 7 partials ⚠️
src/crypto/crypto_sig.cc 75.00% 0 Missing and 4 partials ⚠️
src/crypto/crypto_common.cc 80.00% 0 Missing and 3 partials ⚠️
src/crypto/crypto_keygen.cc 77.77% 0 Missing and 2 partials ⚠️
src/crypto/crypto_keygen.h 50.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #65966      +/-   ##
==========================================
- Coverage   92.41%   90.21%   -2.21%     
==========================================
  Files         417      771     +354     
  Lines      189029   265161   +76132     
  Branches    28953    50392   +21439     
==========================================
+ Hits       174685   239203   +64518     
- Misses      14011    16977    +2966     
- Partials      333     8981    +8648     
Files with missing lines Coverage Δ
lib/internal/crypto/cfrg.js 95.69% <100.00%> (-0.22%) ⬇️
lib/internal/crypto/kem_hybrids.js 98.38% <100.00%> (+<0.01%) ⬆️
lib/internal/crypto/keygen.js 92.94% <100.00%> (-0.56%) ⬇️
lib/internal/crypto/ml_dsa.js 97.29% <100.00%> (-0.10%) ⬇️
lib/internal/crypto/ml_kem.js 95.19% <100.00%> (-0.17%) ⬇️
lib/internal/crypto/util.js 97.39% <100.00%> (+0.80%) ⬆️
src/crypto/crypto_context.cc 71.66% <100.00%> (ø)
src/crypto/crypto_dh.cc 65.68% <100.00%> (ø)
src/crypto/crypto_dsa.cc 81.25% <100.00%> (ø)
src/crypto/crypto_ec.h 44.44% <100.00%> (ø)
... and 10 more

... and 467 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.

@panva
panva requested review from jasnell and removed request for jasnell September 11, 2026 08:06
@panva

panva commented Sep 15, 2026

Copy link
Copy Markdown
Member Author

@jasnell please take a look, this is a step towards moving more things to the openssl provider model

Comment thread deps/ncrypto/ncrypto.h
static EVPKeyCtxPointer New(const EVPKeyPointer& key);
static EVPKeyCtxPointer NewFromID(int id);
static EVPKeyCtxPointer NewFromName(const char* name);
static EVPKeyCtxPointer NewFromAlgorithm(const KeyAlgorithm& algorithm);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I'm +1 on the change overall, removing the current NID apis means anyone else using ncrypto will be forced to transition immediately to the new api. I'd prefer to deprecate first for a short time before removing them to give some flexibility in the transition if possible.

@panva panva Sep 15, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC all ncrypto consumers use BoringSSL which has its own compatibility branch here. We have not established any intent to maintain ncrypto API compatibility, right now it is merely a snapshot of node's own ncrypto state.

@panva panva Sep 15, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+ restoring the APIs in nodejs/ncrypto can be done as part of resolving the sync workflow, I don't see why we should subject maintainers of node's crypto with the burden of maintaining compatibility modes for other runtimes.

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

@panva
panva requested a review from jasnell September 17, 2026 06:33

@jasnell jasnell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM So long as the update into ncrypto either gates these or waits on downstream consumers to be able to update. I'd still prefer the parallel api approach (either with deprecated apis or IFDEF gates)

@panva panva added author ready PRs with CI started, the required approvals, and no outstanding review comments. commit-queue PRs queued for automated landing through the Commit Queue. labels Sep 17, 2026
@nodejs-github-bot nodejs-github-bot added the lacks-second-approval Commit Queue PRs awaiting a second collaborator approval or completion of the required wait. label Sep 17, 2026
@nodejs-github-bot
nodejs-github-bot merged commit 1a3712d into nodejs:main Sep 17, 2026
96 of 97 checks passed
@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Landed in 1a3712d

@nodejs-github-bot nodejs-github-bot removed commit-queue PRs queued for automated landing through the Commit Queue. lacks-second-approval Commit Queue PRs awaiting a second collaborator approval or completion of the required wait. labels Sep 17, 2026
@panva
panva deleted the nid-cleanup branch September 17, 2026 20:33
aduh95 pushed a commit that referenced this pull request Sep 18, 2026
Provider-backed keys can have no numeric OpenSSL ID. Identify and
construct asymmetric keys by algorithm name, replacing the custom PQC
name-to-NID substitution with provider-aware matching in ncrypto.

Centralize known algorithm names, public key-type names, capabilities,
and backend compatibility in ncrypto. Use named key generation jobs and
remove asymmetric EVP_PKEY constants from the internal JavaScript
binding.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
Assisted-by: Codex
PR-URL: #65966
Reviewed-By: James M Snell <jasnell@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

author ready PRs with CI started, the required approvals, and no outstanding review comments. lib / src Issues and PRs involving general changes in the lib/ or src/ directories. needs-ci PRs that need a full CI run.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants