镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Key usages should be an unique set #62899

Description

@ChALkeR
> const k = await crypto.subtle.exportKey('jwk', await crypto.subtle.generateKey({name: "ChaCha20-Poly1305" }, true, ['encrypt']))
> await crypto.subtle.importKey('jwk', k, "ChaCha20-Poly1305", true, ['encrypt', 'encrypt'])
CryptoKey {
  type: 'secret',
  extractable: true,
  algorithm: { name: 'ChaCha20-Poly1305' },
  usages: [ 'encrypt', 'encrypt' ] // duplicated
}
> await crypto.subtle.exportKey('jwk', _)
{
  key_ops: [ 'encrypt', 'encrypt' ], // duplicated
  ext: true,
  alg: 'C20P',
  kty: 'oct',
  k: '...'
}
> const k = await crypto.subtle.exportKey('jwk', await crypto.subtle.generateKey({name: "AES-GCM", length: 256 }, true, ['encrypt']))
undefined
> await crypto.subtle.importKey('jwk', k, {name: "AES-GCM", length: 256 }, true, ['encrypt', 'encrypt'])
CryptoKey {
  type: 'secret',
  extractable: true,
  algorithm: { name: 'AES-GCM', length: 256 },
  usages: [ 'encrypt', 'encrypt' ] // duplicated
}
> await crypto.subtle.exportKey('jwk', _)
{
  key_ops: [ 'encrypt', 'encrypt' ], // duplicated
  ext: true,
  alg: 'A256GCM',
  kty: 'oct',
  k: '...'
}
> k = await crypto.subtle.generateKey({ name: "RSA-OAEP", hash: "SHA-256", modulusLength: 2048, publicExponent: Uint8Array.of(1, 0, 1) }, true, [ 'encrypt', 'decrypt'])
> p = await crypto.subtle.exportKey('jwk', k.publicKey)
> await crypto.subtle.importKey('jwk', p, { name: "RSA-OAEP", hash: "SHA-256" }, true, ['encrypt', 'encrypt'])
CryptoKey {
  type: 'public',
  extractable: true,
  algorithm: {
    name: 'RSA-OAEP',
    modulusLength: 2048,
    publicExponent: [Uint8Array],
    hash: [Object]
  },
  usages: [ 'encrypt', 'encrypt' ] // duplicate
}
> await crypto.subtle.exportKey('jwk', _)
{
  key_ops: [ 'encrypt', 'encrypt' ], // duplicate
  ext: true,
  alg: 'RSA-OAEP-256',
  kty: 'RSA',
  n: '...',
  e: 'AQAB'
}

Chrome deduplicates:

Image

Source:

chacha20_poly1305

https://github.com/nodejs/node/blob/HEAD/lib/internal/crypto/chacha20_poly1305.js#L143

Image

aes

https://github.com/nodejs/node/blob/HEAD/lib/internal/crypto/aes.js#L288

Image

rsa

https://github.com/nodejs/node/blob/HEAD/lib/internal/crypto/rsa.js#L284

Image

Activity

  1. added
    webcryptoIssues and PRs related to the Web Crypto API.
    cryptoIssues and PRs related to the crypto subsystem.
    on Apr 22, 2026
  2. ChALkeR commented on Apr 22, 2026

    @ChALkeR
    MemberAuthor

    I'm actually unsure if this is covered by the spec at all

    All of Chrome, Safari, Firefox deduplicate though

  3. added
    web-standardsIssues and PRs related to web-platform APIs and standards compliance.
    on Apr 22, 2026
  4. self-assigned this
    on Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

cryptoIssues and PRs related to the crypto subsystem.web-standardsIssues and PRs related to web-platform APIs and standards compliance.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