{"version":3,"file":"aes.node.mjs","sources":["../src/aes-ccm.ts","../src/aes-gcm.ts","../src/aes-node.ts"],"sourcesContent":["import {\n  assertBytes,\n  concatBytes,\n  equalBytes,\n  type AeadComponent,\n  type AeadCreateContext,\n  type AeadCreateOpenerParams,\n  type AeadCreateParams,\n  type AeadCreateSealerParams,\n  type AeadTransform,\n  type BlockCipher,\n  type Transform,\n} from '@jscrypto/core';\n\nconst BLOCK_SIZE = 16;\nconst KEY_SIZES = [16, 24, 32] as const;\nconst NONCE_SIZES = [7, 8, 9, 10, 11, 12, 13] as const;\nconst TAG_SIZES = [4, 6, 8, 10, 12, 14, 16] as const;\nconst DEFAULT_TAG_LENGTH = 16;\nconst MIN_NONCE_LENGTH = 7;\nconst MAX_NONCE_LENGTH = 13;\nconst AAD_SHORT_LIMIT = 0xff00;\n\nexport function createAesCcmComponent(): AeadComponent<'AES-CCM'> {\n  return {\n    kind: 'aead',\n    name: 'AES-CCM',\n    keySizes: KEY_SIZES,\n    nonceSizes: NONCE_SIZES,\n    recommendedNonceSize: 12,\n    tagSizes: TAG_SIZES,\n    create(params, context) {\n      return createAesCcmTransform(params, context);\n    },\n  };\n}\n\n/** Exported for focused unit tests; not part of the public package surface. */\nexport function encodeCcmAad(aad: Uint8Array): Uint8Array {\n  return concatBytes(encodeCcmAadLength(aad.length), aad);\n}\n\n/**\n * Encode only the CCM AAD length prefix for a given length.\n * Accepts synthetic lengths so the `0xffff` form (>= 2^32) can be unit-tested\n * without allocating multi-gigabyte AAD buffers.\n */\nexport function encodeCcmAadLength(aadLength: number): Uint8Array {\n  if (aadLength === 0) {\n    return new Uint8Array(0);\n  }\n\n  if (aadLength < AAD_SHORT_LIMIT) {\n    const encoded = new Uint8Array(2);\n    encoded[0] = (aadLength >>> 8) & 0xff;\n    encoded[1] = aadLength & 0xff;\n    return encoded;\n  }\n\n  if (aadLength < 0x100000000) {\n    const encoded = new Uint8Array(6);\n    encoded[0] = 0xff;\n    encoded[1] = 0xfe;\n    encoded[2] = (aadLength >>> 24) & 0xff;\n    encoded[3] = (aadLength >>> 16) & 0xff;\n    encoded[4] = (aadLength >>> 8) & 0xff;\n    encoded[5] = aadLength & 0xff;\n    return encoded;\n  }\n\n  const encoded = new Uint8Array(10);\n  encoded[0] = 0xff;\n  encoded[1] = 0xff;\n  let remaining = aadLength;\n  for (let i = 9; i >= 2; i--) {\n    encoded[i] = remaining % 256;\n    remaining = Math.floor(remaining / 256);\n  }\n  return encoded;\n}\n\n/**\n * Encode an unsigned integer into `byteLength` bytes at `out[offset]`.\n * Used for CCM length and counter fields.\n */\nexport function encodeCcmBinaryLength(\n  value: number,\n  byteLength: number,\n  out: Uint8Array,\n  offset: number,\n): void {\n  let remaining = value;\n  for (let i = byteLength - 1; i >= 0; i--) {\n    out[offset + i] = remaining % 256;\n    remaining = Math.floor(remaining / 256);\n  }\n  if (remaining !== 0) {\n    throw new RangeError('AES-CCM plaintext is too large for the nonce length.');\n  }\n}\n\nfunction createAesCcmTransform(\n  { key }: AeadCreateParams,\n  context: AeadCreateContext,\n): AeadTransform {\n  assertBytes(key, 'AES-CCM key');\n  if (key.length !== 16 && key.length !== 24 && key.length !== 32) {\n    throw new Error('AES key must be 128, 192, or 256 bits.');\n  }\n  const cipher = context.createBlockCipher({ cipher: 'AES', key });\n\n  return {\n    createSealer({ nonce, aad, tagLength }: AeadCreateSealerParams): Transform {\n      const resolvedNonce = requireNonce(nonce);\n      const resolvedAad = resolveAad(aad);\n      const resolvedTagLength = resolveTagLength(tagLength);\n      let pendings: Uint8Array[] = [];\n      let finalized = false;\n\n      return {\n        process(input) {\n          assertNotFinalized(finalized);\n          assertBytes(input, 'AES-CCM input');\n          pendings.push(input);\n          return new Uint8Array(0);\n        },\n\n        finalize(input = new Uint8Array(0)) {\n          assertNotFinalized(finalized);\n          if (input.length !== 0) {\n            this.process(input);\n          }\n          finalized = true;\n          const plaintext = collectPending(pendings);\n          pendings = [];\n          return seal(cipher, plaintext, resolvedNonce, resolvedAad, resolvedTagLength);\n        },\n      };\n    },\n\n    createOpener({ nonce, aad, tag, tagLength }: AeadCreateOpenerParams): Transform {\n      const resolvedNonce = requireNonce(nonce);\n      const resolvedAad = resolveAad(aad);\n      const detachedTag = resolveOptionalTag(tag);\n      const resolvedTagLength = detachedTag\n        ? resolveTagLength(detachedTag.length)\n        : resolveTagLength(tagLength);\n      let pendings: Uint8Array[] = [];\n      let finalized = false;\n\n      return {\n        process(input) {\n          assertNotFinalized(finalized);\n          assertBytes(input, 'AES-CCM input');\n          pendings.push(input);\n          return new Uint8Array(0);\n        },\n\n        finalize(input = new Uint8Array(0)) {\n          assertNotFinalized(finalized);\n          if (input.length !== 0) {\n            this.process(input);\n          }\n          finalized = true;\n          const buffered = collectPending(pendings);\n          pendings = [];\n          return open(\n            cipher,\n            buffered,\n            resolvedNonce,\n            resolvedAad,\n            resolvedTagLength,\n            detachedTag,\n          );\n        },\n      };\n    },\n  };\n}\n\nfunction seal(\n  cipher: BlockCipher,\n  plaintext: Uint8Array,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n  tagLength: number,\n): Uint8Array {\n  const L = 15 - nonce.length;\n  assertPlaintextLength(plaintext.length, L);\n\n  const tag = computeTag(cipher, plaintext, nonce, aad, tagLength, L);\n  const ciphertext = ctrCrypt(cipher, plaintext, nonce, L);\n  const sealed = new Uint8Array(ciphertext.length + tagLength);\n  sealed.set(ciphertext, 0);\n  sealed.set(tag, ciphertext.length);\n  return sealed;\n}\n\nfunction open(\n  cipher: BlockCipher,\n  input: Uint8Array,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n  tagLength: number,\n  detachedTag: Uint8Array | undefined,\n): Uint8Array {\n  const L = 15 - nonce.length;\n  let ciphertext: Uint8Array;\n  let tag: Uint8Array;\n\n  if (detachedTag) {\n    ciphertext = input;\n    tag = detachedTag;\n  } else {\n    if (input.length < tagLength) {\n      throw new Error('AES-CCM ciphertext is shorter than the authentication tag.');\n    }\n    ciphertext = input.subarray(0, input.length - tagLength);\n    tag = input.subarray(input.length - tagLength);\n  }\n\n  assertPlaintextLength(ciphertext.length, L);\n  const plaintext = ctrCrypt(cipher, ciphertext, nonce, L);\n  const expectedTag = computeTag(cipher, plaintext, nonce, aad, tagLength, L);\n  if (!equalBytes(tag, expectedTag)) {\n    plaintext.fill(0);\n    throw new Error('AES-CCM authentication failed.');\n  }\n  return plaintext;\n}\n\nfunction computeTag(\n  cipher: BlockCipher,\n  plaintext: Uint8Array,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n  tagLength: number,\n  L: number,\n): Uint8Array {\n  const mac = new Uint8Array(BLOCK_SIZE);\n  const block = new Uint8Array(BLOCK_SIZE);\n\n  buildB0(block, nonce, plaintext.length, aad.length > 0, tagLength, L);\n  encryptBlock(cipher, block, 0, mac, 0);\n\n  if (aad.length > 0) {\n    const encodedAad = encodeCcmAad(aad);\n    cbcMacBlocks(cipher, mac, encodedAad);\n  }\n\n  if (plaintext.length > 0) {\n    cbcMacBlocks(cipher, mac, plaintext);\n  }\n\n  const s0 = new Uint8Array(BLOCK_SIZE);\n  buildCounterBlock(block, nonce, 0, L);\n  encryptBlock(cipher, block, 0, s0, 0);\n\n  const tag = new Uint8Array(tagLength);\n  for (let i = 0; i < tagLength; i++) {\n    tag[i] = mac[i]! ^ s0[i]!;\n  }\n  return tag;\n}\n\nfunction ctrCrypt(\n  cipher: BlockCipher,\n  input: Uint8Array,\n  nonce: Uint8Array,\n  L: number,\n): Uint8Array {\n  if (input.length === 0) {\n    return new Uint8Array(0);\n  }\n\n  const output = new Uint8Array(input.length);\n  const counterBlock = new Uint8Array(BLOCK_SIZE);\n  const keystream = new Uint8Array(BLOCK_SIZE);\n  let counter = 1;\n  let offset = 0;\n\n  while (offset < input.length) {\n    buildCounterBlock(counterBlock, nonce, counter, L);\n    encryptBlock(cipher, counterBlock, 0, keystream, 0);\n    const n = Math.min(BLOCK_SIZE, input.length - offset);\n    for (let i = 0; i < n; i++) {\n      output[offset + i] = input[offset + i]! ^ keystream[i]!;\n    }\n    offset += n;\n    counter += 1;\n  }\n\n  return output;\n}\n\nfunction cbcMacBlocks(cipher: BlockCipher, mac: Uint8Array, data: Uint8Array): void {\n  const block = new Uint8Array(BLOCK_SIZE);\n  let offset = 0;\n\n  while (offset < data.length) {\n    const n = Math.min(BLOCK_SIZE, data.length - offset);\n    block.fill(0);\n    block.set(data.subarray(offset, offset + n));\n    for (let i = 0; i < BLOCK_SIZE; i++) {\n      block[i]! ^= mac[i]!;\n    }\n    encryptBlock(cipher, block, 0, mac, 0);\n    offset += n;\n  }\n}\n\nfunction buildB0(\n  out: Uint8Array,\n  nonce: Uint8Array,\n  messageLength: number,\n  hasAad: boolean,\n  tagLength: number,\n  L: number,\n): void {\n  out[0] = ((hasAad ? 1 : 0) << 6) | (((tagLength - 2) / 2) << 3) | (L - 1);\n  out.set(nonce, 1);\n  encodeCcmBinaryLength(messageLength, L, out, 1 + nonce.length);\n}\n\nfunction buildCounterBlock(\n  out: Uint8Array,\n  nonce: Uint8Array,\n  counter: number,\n  L: number,\n): void {\n  out.fill(0);\n  out[0] = L - 1;\n  out.set(nonce, 1);\n  encodeCcmBinaryLength(counter, L, out, 1 + nonce.length);\n}\n\nfunction encryptBlock(\n  cipher: BlockCipher,\n  input: Uint8Array,\n  inputOffset: number,\n  output: Uint8Array,\n  outputOffset: number,\n): void {\n  if (cipher.encryptBlock) {\n    cipher.encryptBlock(input, inputOffset, output, outputOffset);\n    return;\n  }\n\n  cipher.encrypt(\n    input.subarray(inputOffset, inputOffset + cipher.blockSize),\n    output.subarray(outputOffset, outputOffset + cipher.blockSize),\n  );\n}\n\nfunction assertPlaintextLength(length: number, L: number): void {\n  let remaining = length;\n  for (let i = 0; i < L; i++) {\n    remaining = Math.floor(remaining / 256);\n  }\n  if (remaining !== 0) {\n    throw new RangeError('AES-CCM plaintext is too large for the nonce length.');\n  }\n}\n\nfunction requireNonce(nonce: Uint8Array | undefined): Uint8Array {\n  if (nonce === undefined) {\n    throw new Error('AES-CCM requires a nonce.');\n  }\n  assertBytes(nonce, 'AES-CCM nonce');\n  if (nonce.length < MIN_NONCE_LENGTH || nonce.length > MAX_NONCE_LENGTH) {\n    throw new RangeError('AES-CCM nonce length must be between 7 and 13 bytes.');\n  }\n  return nonce;\n}\n\nfunction resolveAad(aad: Uint8Array | undefined): Uint8Array {\n  if (aad === undefined) {\n    return new Uint8Array(0);\n  }\n  assertBytes(aad, 'AES-CCM aad');\n  return aad;\n}\n\nfunction resolveOptionalTag(tag: Uint8Array | undefined): Uint8Array | undefined {\n  if (tag === undefined) {\n    return undefined;\n  }\n  assertBytes(tag, 'AES-CCM tag');\n  resolveTagLength(tag.length);\n  return tag;\n}\n\nfunction resolveTagLength(tagLength: number | undefined): number {\n  if (tagLength === undefined) {\n    return DEFAULT_TAG_LENGTH;\n  }\n  if (\n    typeof tagLength !== 'number'\n    || !Number.isInteger(tagLength)\n    || (TAG_SIZES as readonly number[]).indexOf(tagLength) === -1\n  ) {\n    throw new RangeError(\n      'AES-CCM tagLength must be one of 4, 6, 8, 10, 12, 14, or 16 bytes.',\n    );\n  }\n  return tagLength;\n}\n\nfunction collectPending(pendings: readonly Uint8Array[]): Uint8Array {\n  if (pendings.length === 0) {\n    return new Uint8Array(0);\n  }\n  if (pendings.length === 1) {\n    return pendings[0]!;\n  }\n  return concatBytes(...pendings);\n}\n\nfunction assertNotFinalized(finalized: boolean): void {\n  if (finalized) {\n    throw new Error('AES-CCM transform already finalized.');\n  }\n}\n","import {\n  assertBytes,\n  type AeadComponent,\n  type AeadCreateContext,\n  type AeadCreateOpenerParams,\n  type AeadCreateParams,\n  type AeadCreateSealerParams,\n  type AeadTransform,\n  type Transform,\n} from '@jscrypto/core';\n\nconst KEY_SIZES = [16, 24, 32] as const;\nconst TAG_SIZES = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] as const;\nconst DEFAULT_TAG_LENGTH = 16;\nconst MIN_TAG_LENGTH = 4;\nconst MAX_TAG_LENGTH = 16;\n\nexport function createAesGcmComponent(): AeadComponent<'AES-GCM'> {\n  return {\n    kind: 'aead',\n    name: 'AES-GCM',\n    keySizes: KEY_SIZES,\n    recommendedNonceSize: 12,\n    tagSizes: TAG_SIZES,\n    create(params, context) {\n      return createAesGcmTransform(params, context);\n    },\n  };\n}\n\nfunction createAesGcmTransform(\n  { key }: AeadCreateParams,\n  context: AeadCreateContext,\n): AeadTransform {\n  assertBytes(key, 'AES-GCM key');\n\n  return {\n    createSealer({ nonce, aad, tagLength, options }: AeadCreateSealerParams): Transform {\n      return context.createEncryptor(toGcmOptions(key, {\n        nonce: requireNonce(nonce),\n        aad: resolveAad(aad),\n        tagLength: resolveTagLength(tagLength),\n        options,\n      }));\n    },\n\n    createOpener({ nonce, aad, tag, tagLength, options }: AeadCreateOpenerParams): Transform {\n      const detachedTag = resolveOptionalTag(tag);\n      return wrapGcmOpener(context.createDecryptor(toGcmOptions(key, {\n        nonce: requireNonce(nonce),\n        aad: resolveAad(aad),\n        tag: detachedTag,\n        tagLength: detachedTag ? resolveTagLength(detachedTag.length) : resolveTagLength(tagLength),\n        options,\n      })));\n    },\n  };\n}\n\nfunction toGcmOptions(\n  key: Uint8Array,\n  {\n    nonce,\n    aad,\n    tag,\n    tagLength,\n    options,\n  }: {\n    nonce: Uint8Array;\n    aad: Uint8Array;\n    tag?: Uint8Array;\n    tagLength: number;\n    options?: unknown;\n  },\n) {\n  return {\n    ...toRecord(options),\n    cipher: 'AES',\n    mode: 'GCM',\n    key,\n    nonce,\n    aad,\n    tag,\n    tagLength,\n  };\n}\n\nfunction wrapGcmOpener(opener: Transform): Transform {\n  return {\n    process(input) {\n      return opener.process(input);\n    },\n\n    finalize(input) {\n      try {\n        return opener.finalize(input);\n      } catch (error) {\n        if (error instanceof Error && error.message === 'GCM authentication failed.') {\n          throw new Error('AES-GCM authentication failed.');\n        }\n        throw error;\n      }\n    },\n  };\n}\n\nfunction requireNonce(nonce: Uint8Array | undefined): Uint8Array {\n  if (nonce === undefined) {\n    throw new Error('AES-GCM requires a nonce.');\n  }\n  assertBytes(nonce, 'AES-GCM nonce');\n  if (nonce.length === 0) {\n    throw new Error('AES-GCM requires a nonce.');\n  }\n  return nonce;\n}\n\nfunction resolveAad(aad: Uint8Array | undefined): Uint8Array {\n  if (aad === undefined) {\n    return new Uint8Array(0);\n  }\n  assertBytes(aad, 'AES-GCM aad');\n  return aad;\n}\n\nfunction resolveOptionalTag(tag: Uint8Array | undefined): Uint8Array | undefined {\n  if (tag === undefined) {\n    return undefined;\n  }\n  assertBytes(tag, 'AES-GCM tag');\n  return tag;\n}\n\nfunction resolveTagLength(tagLength: number | undefined): number {\n  if (tagLength === undefined) {\n    return DEFAULT_TAG_LENGTH;\n  }\n  if (\n    typeof tagLength !== 'number' ||\n    !Number.isInteger(tagLength) ||\n    tagLength < MIN_TAG_LENGTH ||\n    tagLength > MAX_TAG_LENGTH\n  ) {\n    throw new RangeError('AES-GCM tagLength must be an integer between 4 and 16 bytes.');\n  }\n  return tagLength;\n}\n\nfunction toRecord(options: unknown): Record<string, unknown> {\n  return typeof options === 'object' && options !== null ? options as Record<string, unknown> : {};\n}\n","import type { BlockCipher, CipherComponent, PresetComponent } from '@jscrypto/core';\nimport { createCipheriv, createDecipheriv } from 'node:crypto';\nimport { createAesCcmComponent } from './aes-ccm.js';\nimport { createAesGcmComponent } from './aes-gcm.js';\n\nconst BLOCK_SIZE = 16;\n\nexport const aes: CipherComponent<'AES'> = {\n  kind: 'cipher',\n  name: 'AES',\n  type: 'block',\n  blockSize: BLOCK_SIZE,\n  keySizes: [16, 24, 32],\n  create(key) {\n    return createAesCipher(key);\n  },\n};\n\nexport const aesGcm = createAesGcmComponent();\nexport const aesCcm = createAesCcmComponent();\n\nexport { createAesCcmComponent } from './aes-ccm.js';\n\nexport const aesPreset: PresetComponent<'aes'> = {\n  kind: 'preset',\n  name: 'aes',\n  components() {\n    return [aes, aesGcm, aesCcm];\n  },\n};\n\nexport function createAesCipher(key: Uint8Array): BlockCipher {\n  if (key.length !== 16 && key.length !== 24 && key.length !== 32) {\n    throw new Error('AES key must be 128, 192, or 256 bits.');\n  }\n\n  const algorithm = `aes-${key.length * 8}-ecb`;\n  return {\n    blockSize: BLOCK_SIZE,\n\n    encrypt(input, output) {\n      assertBlocks(input, output);\n      return cryptBlocks(algorithm, key, input, output, true);\n    },\n\n    decrypt(input, output) {\n      assertBlocks(input, output);\n      return cryptBlocks(algorithm, key, input, output, false);\n    },\n  };\n}\n\nfunction assertBlocks(input: Uint8Array, output: Uint8Array): void {\n  if (input.length % BLOCK_SIZE !== 0) {\n    throw new Error('AES input length must be a multiple of 128 bits.');\n  }\n  if (output.length !== input.length) {\n    throw new Error('AES output length must equal input length.');\n  }\n}\n\nfunction cryptBlocks(\n  algorithm: string,\n  key: Uint8Array,\n  input: Uint8Array,\n  output: Uint8Array,\n  encrypt: boolean,\n): Uint8Array {\n  const cipher = encrypt\n    ? createCipheriv(algorithm, key, null)\n    : createDecipheriv(algorithm, key, null);\n  cipher.setAutoPadding(false);\n  const result = cipher.update(input);\n  const final = cipher.final();\n  output.set(result, 0);\n  output.set(final, result.length);\n  return output;\n}\n"],"names":["BLOCK_SIZE","KEY_SIZES","TAG_SIZES","DEFAULT_TAG_LENGTH","requireNonce","resolveAad","resolveTagLength","resolveOptionalTag"],"mappings":"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"}