{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import {\n  assertBytes,\n  concatBytes,\n  type CipherComponent,\n  type PresetComponent,\n  type StreamCipherComponent,\n  type StreamCipherTransformParams,\n  type Transform,\n} from '@jscrypto/core';\nimport {\n  chacha20 as nobleChaCha20,\n  chacha20poly1305 as nobleChaCha20Poly1305,\n  xchacha20 as nobleXChaCha20,\n  xchacha20poly1305 as nobleXChaCha20Poly1305,\n} from '@noble/ciphers/chacha.js';\n\nconst KEY_BYTES = 32;\nconst CHACHA20_NONCE_BYTES = 12;\nconst XCHACHA20_NONCE_BYTES = 24;\nconst TAG_BYTES = 16;\nconst STREAM_BLOCK_BYTES = 64;\nconst MAX_COUNTER = 0xffffffff; // exclusive upper bound, matching @noble/ciphers\n\nexport const chacha20: StreamCipherComponent<'ChaCha20'> = {\n  kind: 'cipher',\n  name: 'ChaCha20',\n  type: 'stream',\n  keySizes: [KEY_BYTES],\n  createEncryptor(params) {\n    return createStreamTransform(params, 'ChaCha20');\n  },\n  createDecryptor(params) {\n    return createStreamTransform(params, 'ChaCha20');\n  },\n};\n\nexport const xchacha20: StreamCipherComponent<'XChaCha20'> = {\n  kind: 'cipher',\n  name: 'XChaCha20',\n  type: 'stream',\n  keySizes: [KEY_BYTES],\n  createEncryptor(params) {\n    return createStreamTransform(params, 'XChaCha20');\n  },\n  createDecryptor(params) {\n    return createStreamTransform(params, 'XChaCha20');\n  },\n};\n\nexport const chacha20Poly1305: StreamCipherComponent<'ChaCha20-Poly1305'> = {\n  kind: 'cipher',\n  name: 'ChaCha20-Poly1305',\n  type: 'stream',\n  keySizes: [KEY_BYTES],\n  createEncryptor(params) {\n    return createAeadEncryptor(params, 'ChaCha20-Poly1305');\n  },\n  createDecryptor(params) {\n    return createAeadDecryptor(params, 'ChaCha20-Poly1305');\n  },\n};\n\nexport const xchacha20Poly1305: StreamCipherComponent<'XChaCha20-Poly1305'> = {\n  kind: 'cipher',\n  name: 'XChaCha20-Poly1305',\n  type: 'stream',\n  keySizes: [KEY_BYTES],\n  createEncryptor(params) {\n    return createAeadEncryptor(params, 'XChaCha20-Poly1305');\n  },\n  createDecryptor(params) {\n    return createAeadDecryptor(params, 'XChaCha20-Poly1305');\n  },\n};\n\nexport const allChaCha20Components: readonly CipherComponent[] = [\n  chacha20,\n  xchacha20,\n  chacha20Poly1305,\n  xchacha20Poly1305,\n];\n\nexport const chacha20Preset: PresetComponent<'chacha20'> = {\n  kind: 'preset',\n  name: 'chacha20',\n  components() {\n    return allChaCha20Components;\n  },\n};\n\ntype StreamAlgorithm = 'ChaCha20' | 'XChaCha20';\ntype AeadAlgorithm = 'ChaCha20-Poly1305' | 'XChaCha20-Poly1305';\n\nfunction createStreamTransform(\n  params: StreamCipherTransformParams,\n  algorithm: StreamAlgorithm,\n): Transform {\n  assertUnsupportedBlockOptions(params.options, algorithm);\n  assertBytes(params.key, `${algorithm} key`);\n  assertKey(params.key, algorithm);\n  const options = asRecord(params.options);\n  const nonce = requireNonce(options, algorithm);\n  let blockCounter = resolveCounter(options.counter, algorithm);\n  let keystream: Uint8Array<ArrayBufferLike> = new Uint8Array(0);\n  let keystreamOffset = 0;\n  let finalized = false;\n\n  const xorChunk = (input: Uint8Array): Uint8Array => {\n    if (input.length === 0) {\n      return new Uint8Array(0);\n    }\n\n    const output = new Uint8Array(input.length);\n    let inputOffset = 0;\n\n    while (inputOffset < input.length) {\n      if (keystreamOffset >= keystream.length) {\n        const remaining = input.length - inputOffset;\n        const generateLength = Math.ceil(remaining / STREAM_BLOCK_BYTES) * STREAM_BLOCK_BYTES;\n        keystream = applyStream(\n          algorithm,\n          params.key,\n          nonce,\n          new Uint8Array(generateLength),\n          blockCounter,\n        );\n        blockCounter += generateLength / STREAM_BLOCK_BYTES;\n        keystreamOffset = 0;\n      }\n\n      const n = Math.min(input.length - inputOffset, keystream.length - keystreamOffset);\n      for (let i = 0; i < n; i++) {\n        output[inputOffset + i] = (input[inputOffset + i] as number) ^ (keystream[keystreamOffset + i] as number);\n      }\n      inputOffset += n;\n      keystreamOffset += n;\n    }\n\n    return output;\n  };\n\n  return {\n    process(input) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      return xorChunk(input);\n    },\n    finalize(input = new Uint8Array(0)) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      finalized = true;\n      const output = input.length === 0 ? new Uint8Array(0) : xorChunk(input);\n      keystream = new Uint8Array(0);\n      keystreamOffset = 0;\n      return output;\n    },\n  };\n}\n\nfunction createAeadEncryptor(\n  params: StreamCipherTransformParams,\n  algorithm: AeadAlgorithm,\n): Transform {\n  assertUnsupportedBlockOptions(params.options, algorithm);\n  assertBytes(params.key, `${algorithm} key`);\n  assertKey(params.key, algorithm);\n  const options = asRecord(params.options);\n  const nonce = requireNonce(options, algorithm);\n  const aad = resolveAad(options.aad, algorithm);\n  const cipher = createNobleAead(algorithm, params.key, nonce, aad);\n\n  let pending: Uint8Array<ArrayBufferLike> = new Uint8Array(0);\n  let finalized = false;\n\n  return {\n    process(input) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      pending = concatBytes(pending, input);\n      return new Uint8Array(0);\n    },\n    finalize(input = new Uint8Array(0)) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      finalized = true;\n      const plaintext = input.length === 0 ? pending : concatBytes(pending, input);\n      pending = new Uint8Array(0);\n      return cipher.encrypt(plaintext);\n    },\n  };\n}\n\nfunction createAeadDecryptor(\n  params: StreamCipherTransformParams,\n  algorithm: AeadAlgorithm,\n): Transform {\n  assertUnsupportedBlockOptions(params.options, algorithm);\n  assertBytes(params.key, `${algorithm} key`);\n  assertKey(params.key, algorithm);\n  const options = asRecord(params.options);\n  const nonce = requireNonce(options, algorithm);\n  const aad = resolveAad(options.aad, algorithm);\n  const detachedTag = resolveOptionalTag(options.tag, algorithm);\n  const cipher = createNobleAead(algorithm, params.key, nonce, aad);\n\n  let pending: Uint8Array<ArrayBufferLike> = new Uint8Array(0);\n  let finalized = false;\n\n  return {\n    process(input) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      // Buffer ciphertext until finalize so plaintext is never released before authentication.\n      pending = concatBytes(pending, input);\n      return new Uint8Array(0);\n    },\n    finalize(input = new Uint8Array(0)) {\n      assertNotFinalized(finalized);\n      assertBytes(input, `${algorithm} input`);\n      finalized = true;\n      const data = input.length === 0 ? pending : concatBytes(pending, input);\n      pending = new Uint8Array(0);\n      const sealed = resolveSealedInput(data, detachedTag, algorithm);\n      try {\n        return cipher.decrypt(sealed);\n      } catch {\n        throw new Error(`${algorithm} authentication failed.`);\n      }\n    },\n  };\n}\n\nfunction applyStream(\n  algorithm: StreamAlgorithm,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  data: Uint8Array,\n  counter: number,\n): Uint8Array {\n  if (algorithm === 'ChaCha20') {\n    return nobleChaCha20(key, nonce, data, undefined, counter);\n  }\n  return nobleXChaCha20(key, nonce, data, undefined, counter);\n}\n\nfunction createNobleAead(\n  algorithm: AeadAlgorithm,\n  key: Uint8Array,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n) {\n  if (algorithm === 'ChaCha20-Poly1305') {\n    return nobleChaCha20Poly1305(key, nonce, aad);\n  }\n  return nobleXChaCha20Poly1305(key, nonce, aad);\n}\n\nfunction resolveSealedInput(\n  ciphertext: Uint8Array,\n  tag: Uint8Array | undefined,\n  algorithm: AeadAlgorithm,\n): Uint8Array {\n  if (tag === undefined) {\n    if (ciphertext.length < TAG_BYTES) {\n      throw new Error(`${algorithm} ciphertext must include a 128-bit authentication tag.`);\n    }\n    return ciphertext;\n  }\n  assertTag(tag, algorithm);\n  return concatBytes(ciphertext, tag);\n}\n\nfunction requireNonce(options: Record<string, unknown>, algorithm: StreamAlgorithm | AeadAlgorithm): Uint8Array {\n  const nonce = options.nonce;\n  if (nonce === undefined) {\n    throw new Error(`${algorithm} requires a nonce.`);\n  }\n  assertBytes(nonce, `${algorithm} nonce`);\n  assertNonce(nonce, algorithm);\n  return nonce;\n}\n\nfunction resolveOptionalTag(tag: unknown, algorithm: AeadAlgorithm): Uint8Array | undefined {\n  if (tag === undefined) {\n    return undefined;\n  }\n  assertBytes(tag, `${algorithm} tag`);\n  assertTag(tag, algorithm);\n  return tag;\n}\n\nfunction resolveAad(aad: unknown, algorithm: AeadAlgorithm): Uint8Array {\n  if (aad === undefined) {\n    return new Uint8Array(0);\n  }\n  assertBytes(aad, `${algorithm} aad`);\n  return aad;\n}\n\nfunction resolveCounter(counter: unknown, algorithm: StreamAlgorithm): number {\n  if (counter === undefined) {\n    return 0;\n  }\n  if (typeof counter !== 'number' || !Number.isInteger(counter) || counter < 0 || counter >= MAX_COUNTER) {\n    throw new RangeError(`${algorithm} counter must be a 32-bit unsigned integer.`);\n  }\n  return counter;\n}\n\nfunction assertKey(key: Uint8Array, algorithm: string): void {\n  if (key.length !== KEY_BYTES) {\n    throw new Error(`${algorithm} key must be 256 bits.`);\n  }\n}\n\nfunction assertNonce(nonce: Uint8Array, algorithm: StreamAlgorithm | AeadAlgorithm): void {\n  if (algorithm === 'ChaCha20' || algorithm === 'ChaCha20-Poly1305') {\n    if (nonce.length !== CHACHA20_NONCE_BYTES) {\n      throw new Error(`${algorithm} nonce must be 96 bits.`);\n    }\n    return;\n  }\n  if (nonce.length !== XCHACHA20_NONCE_BYTES) {\n    throw new Error(`${algorithm} nonce must be 192 bits.`);\n  }\n}\n\nfunction assertTag(tag: Uint8Array, algorithm: AeadAlgorithm): void {\n  if (tag.length !== TAG_BYTES) {\n    throw new Error(`${algorithm} tag must be 128 bits.`);\n  }\n}\n\nfunction assertUnsupportedBlockOptions(options: unknown, algorithm: string): void {\n  const record = asRecord(options);\n  if (Object.prototype.hasOwnProperty.call(record, 'mode') && record.mode !== undefined) {\n    throw new Error(`${algorithm} does not support mode.`);\n  }\n  if (Object.prototype.hasOwnProperty.call(record, 'padding') && record.padding !== undefined) {\n    throw new Error(`${algorithm} does not support padding.`);\n  }\n}\n\nfunction asRecord(options: unknown): Record<string, unknown> {\n  if (typeof options === 'object' && options !== null) {\n    return options as Record<string, unknown>;\n  }\n  return {};\n}\n\nfunction assertNotFinalized(finalized: boolean): void {\n  if (finalized) {\n    throw new Error('Transform is already finalized.');\n  }\n}\n"],"names":["nobleChaCha20","nobleXChaCha20","nobleChaCha20Poly1305","nobleXChaCha20Poly1305"],"mappings":"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"}