Skip to content

Accepting CryptoKey in node:crypto APIs #55293

Description

@panva

The following APIs accept a CryptoKey instance and process the operation despite the restrictions put forth on the CryptoKey instance (e.g. algorithm, usages, extractable)

  • KeyObject.from (ignores extractable)
  • crypto.publicDecrypt
  • crypto.publicEncrypt
  • crypto.privateDecrypt
  • crypto.privateEncrypt
  • crypto.sign
  • crypto.verify
  • Sign.sign
  • Verify.verify
  • Cipher.final
  • Decipher.final
  • Hmac.digest

This list is according to the docs, but i suspect it's possible that hkdf and pbkdf2 allow this too.

This issue is to discuss a way forward to deal with this issues.

KeyObject.from

#37240 attempted to do something about KeyObject.from but i think the outcome would not solve the issues above.

I believe that converting key representations is not an issue so long as the more restrictive key representation's properties are upheld.

We can take a drastic stance and deprecate / in due time remove KeyObject.from entirely, or make KeyObject.from respect the extractable property and duly document that once the key is converted the CryptoKey restrictions are not upheld anymore. I'd much rather see the latter.

Another possible approach would be to disable KeyObject.export on keys that came from non-extractable CryptoKey.

APIs accepting CryptoKey but ignoring its parameters.

We could deprecate the use of CryptoKey in these APIs entirely or emulate WebCryptoAPI behaviour and check the CryptoKey usages and algorithm slots, either way this would be a doc-only deprecation at first, then --pending-deprecation, runtime deprecation, throw behaviour at the end.

Activity

  1. panva commented on Oct 6, 2024

    @panva
    MemberAuthor

    cc @nodejs/crypto

  2. panva commented on Oct 6, 2024

    @panva
    MemberAuthor

    My preferred state is to have a way to convert KeyObject <> CryptoKey both ways (KeyObject.from (while respecting extractable) and #55262) but not have node:crypto APIs accept CryptoKey and not have SubtleCrypto accept KeyObject (already not possible).

    This is even with my jose author/maintainer hat on. I don't make use of CryptoKey in node:crypto APIs. I do make use of KeyObject.from, but before KeyObject.from conversion I do check the CryptoKey properties and the resulting KeyObject is never returned to the user.

  3. added
    cryptoIssues and PRs related to the crypto subsystem.
    discussIssues opened for discussion and feedback.
    webcryptoIssues and PRs related to the Web Crypto API.
    never-staleIssues and PRs exempt from automated stale handling.
    on Oct 6, 2024
  4. 12 remaining items

  5. added a commit that references this issue on Jun 15, 2026
    dae9839
  6. added a commit that references this issue on Jun 17, 2026
    4d09c04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    cryptoIssues and PRs related to the crypto subsystem.deprecationsIssues and PRs related to deprecations.discussIssues opened for discussion and feedback.never-staleIssues and PRs exempt from automated stale handling.webcryptoIssues and PRs related to the Web Crypto API.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions