{"version":3,"file":"index.cjs","sources":["../src/cbc.ts","../src/cfb.ts","../src/ctr.ts","../src/ecb.ts","../src/gcm.ts","../src/ofb.ts","../src/preset.ts"],"sourcesContent":["import {\n  assertBlockMultiple as assertCoreBlockMultiple,\n  assertIv,\n  type BlockCipher,\n  type ModeComponent,\n  type PresetComponent,\n  type Transform,\n} from '@jscrypto/core';\n\nexport const cbc: ModeComponent<'CBC'> = {\n  kind: 'mode',\n  name: 'CBC',\n  requiresPadding: true,\n  getIvSize: (cipher) => cipher.blockSize,\n  createEncryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CBC');\n    return createCbcEncryptor(cipher, iv, getMutableInput(options));\n  },\n  createDecryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CBC');\n    return createCbcDecryptor(cipher, iv, getMutableInput(options));\n  },\n};\n\nexport const cbcPreset: PresetComponent<'cbc'> = {\n  kind: 'preset',\n  name: 'cbc',\n  components() {\n    return [cbc];\n  },\n};\n\nfunction createCbcEncryptor(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  let previous = iv;\n\n  return {\n    process(input) {\n      assertBlockMultiple(cipher.blockSize, input);\n      const output = mutableInput ? input : new Uint8Array(input.length);\n\n      for (let offset = 0; offset < input.length; offset += cipher.blockSize) {\n        for (let index = 0; index < cipher.blockSize; index++) {\n          output[offset + index] = input[offset + index] ^ previous[index];\n        }\n        if (cipher.encryptBlock) {\n          cipher.encryptBlock(output, offset, output, offset);\n        } else {\n          const encrypted = output.subarray(offset, offset + cipher.blockSize);\n          cipher.encrypt(encrypted, encrypted);\n        }\n        previous = output.subarray(offset, offset + cipher.blockSize);\n      }\n\n      return output;\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction createCbcDecryptor(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  let previous = iv.slice();\n  let current = new Uint8Array(cipher.blockSize);\n\n  return {\n    process(input) {\n      assertBlockMultiple(cipher.blockSize, input);\n      const output = mutableInput ? input : new Uint8Array(input.length);\n\n      for (let offset = 0; offset < input.length; offset += cipher.blockSize) {\n        current.set(input.subarray(offset, offset + cipher.blockSize));\n        if (cipher.decryptBlock) {\n          cipher.decryptBlock(input, offset, output, offset);\n        } else {\n          cipher.decrypt(\n            input.subarray(offset, offset + cipher.blockSize),\n            output.subarray(offset, offset + cipher.blockSize),\n          );\n        }\n        for (let index = 0; index < cipher.blockSize; index++) {\n          output[offset + index] ^= previous[index];\n        }\n        const nextPrevious = previous;\n        previous = current;\n        current = nextPrevious;\n      }\n\n      return output;\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction assertBlockMultiple(blockSize: number, input: Uint8Array): void {\n  assertCoreBlockMultiple(input, blockSize, 'CBC');\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n","import { assertIv, type BlockCipher, type ModeComponent, type PresetComponent, type Transform } from '@jscrypto/core';\n\nexport const cfb: ModeComponent<'CFB'> = {\n  kind: 'mode',\n  name: 'CFB',\n  requiresPadding: false,\n  getIvSize: (cipher) => cipher.blockSize,\n  createEncryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CFB');\n    return createCfbEncryptor(cipher, iv, getMutableInput(options));\n  },\n  createDecryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CFB');\n    return createCfbDecryptor(cipher, iv, getMutableInput(options));\n  },\n};\n\nexport const cfbPreset: PresetComponent<'cfb'> = {\n  kind: 'preset',\n  name: 'cfb',\n  components() {\n    return [cfb];\n  },\n};\n\nfunction createCfbEncryptor(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  return createCfbTransform(cipher, iv, true, mutableInput);\n}\n\nfunction createCfbDecryptor(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  return createCfbTransform(cipher, iv, false, mutableInput);\n}\n\nfunction createCfbTransform(cipher: BlockCipher, iv: Uint8Array, encrypting: boolean, mutableInput: boolean): Transform {\n  let feedback: Uint8Array = iv.slice();\n  let nextFeedback: Uint8Array = new Uint8Array(cipher.blockSize);\n  let keystream: Uint8Array = new Uint8Array(cipher.blockSize);\n  let position = 0;\n\n  return {\n    process(input) {\n      const output = mutableInput ? input : new Uint8Array(input.length);\n      let offset = 0;\n\n      if (position === 0) {\n        for (; offset + cipher.blockSize <= input.length; offset += cipher.blockSize) {\n          encryptFeedback(cipher, feedback, keystream);\n          for (let index = 0; index < cipher.blockSize; index++) {\n            const inputByte = input[offset + index];\n            const outputByte = inputByte ^ keystream[index];\n            output[offset + index] = outputByte;\n            nextFeedback[index] = encrypting ? outputByte : inputByte;\n          }\n          const previousFeedback = feedback;\n          feedback = nextFeedback;\n          nextFeedback = previousFeedback;\n        }\n      }\n\n      for (let i = offset; i < input.length; i++) {\n        if (position === 0) {\n          encryptFeedback(cipher, feedback, keystream);\n        }\n\n        const inputByte = input[i];\n        const outputByte = inputByte ^ keystream[position];\n        output[i] = outputByte;\n        nextFeedback[position] = encrypting ? outputByte : inputByte;\n        position++;\n\n        if (position === cipher.blockSize) {\n          const previousFeedback = feedback;\n          feedback = nextFeedback;\n          nextFeedback = previousFeedback;\n          position = 0;\n        }\n      }\n\n      return output;\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction encryptFeedback(cipher: BlockCipher, feedback: Uint8Array, keystream: Uint8Array): void {\n  if (cipher.encryptBlock) {\n    cipher.encryptBlock(feedback, 0, keystream, 0);\n  } else {\n    cipher.encrypt(feedback, keystream);\n  }\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n","import { assertIv, type BlockCipher, type ModeComponent, type PresetComponent, type Transform } from '@jscrypto/core';\n\nexport const ctr: ModeComponent<'CTR'> = {\n  kind: 'mode',\n  name: 'CTR',\n  requiresPadding: false,\n  getIvSize: (cipher) => cipher.blockSize,\n  createEncryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CTR');\n    return createCtrTransform(cipher, iv, getMutableInput(options));\n  },\n  createDecryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'CTR');\n    return createCtrTransform(cipher, iv, getMutableInput(options));\n  },\n};\n\nexport const ctrPreset: PresetComponent<'ctr'> = {\n  kind: 'preset',\n  name: 'ctr',\n  components() {\n    return [ctr];\n  },\n};\n\nfunction createCtrTransform(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  const counter = iv.slice();\n  let keystream: Uint8Array = new Uint8Array(cipher.blockSize);\n  let position = cipher.blockSize;\n\n  return {\n    process(input) {\n      const output = mutableInput ? input : new Uint8Array(input.length);\n      let offset = 0;\n\n      if (position === cipher.blockSize) {\n        for (; offset + cipher.blockSize <= input.length; offset += cipher.blockSize) {\n          encryptCounter(cipher, counter, keystream);\n          incrementCounter(counter);\n          for (let index = 0; index < cipher.blockSize; index++) {\n            output[offset + index] = input[offset + index] ^ keystream[index];\n          }\n        }\n      }\n\n      for (let i = offset; i < input.length; i++) {\n        if (position === cipher.blockSize) {\n          encryptCounter(cipher, counter, keystream);\n          incrementCounter(counter);\n          position = 0;\n        }\n\n        output[i] = input[i] ^ keystream[position];\n        position++;\n      }\n\n      return output;\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction encryptCounter(cipher: BlockCipher, counter: Uint8Array, keystream: Uint8Array): void {\n  if (cipher.encryptBlock) {\n    cipher.encryptBlock(counter, 0, keystream, 0);\n  } else {\n    cipher.encrypt(counter, keystream);\n  }\n}\n\nfunction incrementCounter(counter: Uint8Array): void {\n  for (let i = counter.length - 1; i >= 0; i--) {\n    counter[i] = (counter[i] + 1) & 0xff;\n    if (counter[i] !== 0) {\n      return;\n    }\n  }\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n","import { assertBlockMultiple as assertCoreBlockMultiple, type BlockCipher, type ModeComponent, type PresetComponent, type Transform } from '@jscrypto/core';\n\nexport const ecb: ModeComponent<'ECB'> = {\n  kind: 'mode',\n  name: 'ECB',\n  requiresPadding: true,\n  getIvSize: () => 0,\n  createEncryptor({ cipher, options }) {\n    return createEcbEncryptor(cipher, getMutableInput(options));\n  },\n  createDecryptor({ cipher, options }) {\n    return createEcbDecryptor(cipher, getMutableInput(options));\n  },\n};\n\nexport const ecbPreset: PresetComponent<'ecb'> = {\n  kind: 'preset',\n  name: 'ecb',\n  components() {\n    return [ecb];\n  },\n};\n\nfunction createEcbEncryptor(cipher: BlockCipher, mutableInput: boolean): Transform {\n  return {\n    process(input) {\n      assertBlockMultiple(cipher.blockSize, input);\n      const output = mutableInput ? input : new Uint8Array(input.length);\n      return cipher.encrypt(input, output);\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction createEcbDecryptor(cipher: BlockCipher, mutableInput: boolean): Transform {\n  return {\n    process(input) {\n      assertBlockMultiple(cipher.blockSize, input);\n      const output = mutableInput ? input : new Uint8Array(input.length);\n      return cipher.decrypt(input, output);\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction assertBlockMultiple(blockSize: number, input: Uint8Array): void {\n  assertCoreBlockMultiple(input, blockSize, 'ECB');\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n","import {\n  assertBytes,\n  concatBytes,\n  equalBytes,\n  type BlockCipher,\n  type ModeComponent,\n  type PresetComponent,\n  type Transform,\n} from '@jscrypto/core';\n\nexport const gcm: ModeComponent<'GCM'> = {\n  kind: 'mode',\n  name: 'GCM',\n  requiresPadding: false,\n  getIvSize: () => 0,\n  createEncryptor({ cipher, iv, options }) {\n    return createGcmEncryptor(cipher, getNonce(iv, options), getAad(options), getTagLength(options), getMutableInput(options));\n  },\n  createDecryptor({ cipher, iv, options }) {\n    return createGcmDecryptor(cipher, getNonce(iv, options), getAad(options), getTagLength(options), getTag(options), getMutableInput(options));\n  },\n};\n\nexport const gcmPreset: PresetComponent<'gcm'> = {\n  kind: 'preset',\n  name: 'gcm',\n  components() {\n    return [gcm];\n  },\n};\n\nconst BLOCK_SIZE = 16;\nconst DEFAULT_TAG_LENGTH = 16;\nconst R_WORD = 0xe1000000;\nconst GHASH_WINDOW_BITS = 8;\n\nfunction createGcmEncryptor(\n  cipher: BlockCipher,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n  tagLength: number,\n  mutableInput: boolean,\n): Transform {\n  assertGcmCipher(cipher);\n  const auth = createGhash(encryptRawBlock(cipher, new Uint8Array(BLOCK_SIZE)));\n  auth.updateFinal(aad);\n\n  const j0 = createInitialCounter(auth.h, nonce);\n  const tagMask = encryptRawBlock(cipher, j0);\n  const counter = j0.slice();\n  incrementCounter(counter);\n  const xor = createCounterXor(cipher, counter);\n\n  let ciphertextLength = 0;\n  let pendingPlaintext = new Uint8Array(0);\n\n  function encryptPlaintext(input: Uint8Array, final = false, output?: Uint8Array): Uint8Array {\n    if (input.length === 0) {\n      return new Uint8Array(0);\n    }\n    const ciphertext = xor(input, output);\n    if (final) {\n      auth.updateFinal(ciphertext);\n    } else {\n      auth.update(ciphertext);\n    }\n    ciphertextLength += ciphertext.length;\n    return ciphertext;\n  }\n\n  return {\n    process(input) {\n      if (pendingPlaintext.length) {\n        input = concatBytes(pendingPlaintext, input);\n      }\n      const fullLength = input.length - (input.length % BLOCK_SIZE);\n      pendingPlaintext = fullLength === input.length ? new Uint8Array(0) : input.slice(fullLength);\n      if (!fullLength) {\n        return new Uint8Array(0);\n      }\n      const fullInput = pendingPlaintext.length ? input.subarray(0, fullLength) : input;\n      return encryptPlaintext(fullInput, false, mutableInput ? fullInput : undefined);\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      const ciphertext = input.length === 0 ? new Uint8Array(0) : this.process(input);\n      const finalCiphertext = encryptPlaintext(pendingPlaintext, true, mutableInput ? pendingPlaintext : undefined);\n      pendingPlaintext = new Uint8Array(0);\n      const tag = createTag(auth, tagMask, aad.length, ciphertextLength, tagLength);\n      return concatBytes(ciphertext, finalCiphertext, tag);\n    },\n  };\n}\n\nfunction createGcmDecryptor(\n  cipher: BlockCipher,\n  nonce: Uint8Array,\n  aad: Uint8Array,\n  tagLength: number,\n  detachedTag?: Uint8Array,\n  mutableInput = false,\n): Transform {\n  assertGcmCipher(cipher);\n  const h = encryptRawBlock(cipher, new Uint8Array(BLOCK_SIZE));\n  const j0 = createInitialCounter(h, nonce);\n  const tagMask = encryptRawBlock(cipher, j0);\n  let pendings: Uint8Array<ArrayBufferLike>[] = [];\n\n  return {\n    process(input) {\n      pendings.push(input);\n      return new Uint8Array(0);\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      if (input.length !== 0) {\n        this.process(input);\n      }\n\n      const pending = pendings.length === 0\n        ? new Uint8Array(0)\n        : pendings.length === 1\n          ? pendings[0]\n          : concatBytes(...pendings);\n      let ciphertext = pending;\n      let tag = detachedTag;\n      if (!tag) {\n        if (pending.length < tagLength) {\n          throw new Error('GCM ciphertext must include an authentication tag.');\n        }\n        ciphertext = pending.subarray(0, pending.length - tagLength);\n        tag = pending.subarray(pending.length - tagLength);\n      }\n\n      const auth = createGhash(h);\n      auth.updateFinal(aad);\n      auth.updateFinal(ciphertext);\n      const expectedTag = createTag(auth, tagMask, aad.length, ciphertext.length, tagLength);\n      if (!equalBytes(expectedTag, tag)) {\n        throw new Error('GCM authentication failed.');\n      }\n\n      const counter = j0.slice();\n      incrementCounter(counter);\n      const plaintext = createCounterXor(cipher, counter)(ciphertext, mutableInput ? ciphertext : undefined);\n      pendings = [];\n      return plaintext;\n    },\n  };\n}\n\ninterface Ghash {\n  readonly h: Uint8Array;\n  update(input: Uint8Array): void;\n  updateFinal(input: Uint8Array): void;\n  digest(aadLength: number, ciphertextLength: number): Uint8Array;\n}\n\nfunction createGhash(h: Uint8Array): Ghash {\n  const table = createGhashTable(blockToWords(h), GHASH_WINDOW_BITS);\n  const windowSize = 1 << GHASH_WINDOW_BITS;\n  let state = createZeroWords();\n\n  function updateWords(w0: number, w1: number, w2: number, w3: number): void {\n    state = multiplyGf128Window([\n      (state[0] ^ w0) >>> 0,\n      (state[1] ^ w1) >>> 0,\n      (state[2] ^ w2) >>> 0,\n      (state[3] ^ w3) >>> 0,\n    ], table, windowSize);\n  }\n\n  function updateBlock(input: Uint8Array, offset: number): void {\n    updateWords(\n      readUint32BE(input, offset),\n      readUint32BE(input, offset + 4),\n      readUint32BE(input, offset + 8),\n      readUint32BE(input, offset + 12),\n    );\n  }\n\n  function updatePartialBlock(input: Uint8Array): void {\n    updateWords(\n      readUint32BEPadded(input, 0),\n      readUint32BEPadded(input, 4),\n      readUint32BEPadded(input, 8),\n      readUint32BEPadded(input, 12),\n    );\n  }\n\n  return {\n    h,\n\n    update(input) {\n      for (let offset = 0; offset < input.length; offset += BLOCK_SIZE) {\n        updateBlock(input, offset);\n      }\n    },\n\n    updateFinal(input) {\n      const fullLength = input.length - (input.length % BLOCK_SIZE);\n      for (let offset = 0; offset < fullLength; offset += BLOCK_SIZE) {\n        updateBlock(input, offset);\n      }\n      if (fullLength !== input.length) {\n        updatePartialBlock(input.subarray(fullLength));\n      }\n    },\n\n    digest(aadLength, ciphertextLength) {\n      updateBlock(createLengthBlock(aadLength, ciphertextLength), 0);\n      return wordsToBlock(state);\n    },\n  };\n}\n\nfunction createInitialCounter(h: Uint8Array, nonce: Uint8Array): Uint8Array {\n  if (nonce.length === 0) {\n    throw new Error('GCM mode requires a nonce.');\n  }\n\n  if (nonce.length === 12) {\n    const j0 = new Uint8Array(BLOCK_SIZE);\n    j0.set(nonce);\n    j0[15] = 1;\n    return j0;\n  }\n\n  const auth = createGhash(h);\n  auth.updateFinal(nonce);\n  return auth.digest(0, nonce.length);\n}\n\nfunction createCounterXor(cipher: BlockCipher, counter: Uint8Array): (input: Uint8Array, output?: Uint8Array) => Uint8Array {\n  return (input, target) => {\n    const output = target ?? new Uint8Array(input.length);\n    if (input.length !== 0) {\n      const blocks = Math.ceil(input.length / BLOCK_SIZE);\n      const keystream = new Uint8Array(blocks * BLOCK_SIZE);\n      for (let offset = 0; offset < keystream.length; offset += BLOCK_SIZE) {\n        keystream.set(counter, offset);\n        incrementCounter(counter);\n      }\n\n      cipher.encrypt(keystream, keystream);\n      for (let i = 0; i < input.length; i++) {\n        output[i] = input[i] ^ keystream[i];\n      }\n    }\n\n    return output;\n  };\n}\n\nfunction encryptRawBlock(cipher: BlockCipher, input: Uint8Array): Uint8Array {\n  const output = new Uint8Array(BLOCK_SIZE);\n  return cipher.encrypt(input, output);\n}\n\nfunction createTag(auth: Ghash, tagMask: Uint8Array, aadLength: number, ciphertextLength: number, tagLength: number): Uint8Array {\n  const tag = auth.digest(aadLength, ciphertextLength);\n  for (let i = 0; i < tag.length; i++) {\n    tag[i] ^= tagMask[i];\n  }\n  return tag.subarray(0, tagLength);\n}\n\ntype Words128 = [number, number, number, number];\n\nfunction createZeroWords(): Words128 {\n  return [0, 0, 0, 0];\n}\n\n// Adapted from @noble/ciphers' GHASH window-table approach (MIT).\nfunction createGhashTable(h: Words128, windowBits: number): Uint32Array {\n  const windowSize = 1 << windowBits;\n  const windows = 128 / windowBits;\n  const doubled: Words128[] = [];\n  const value: Words128 = [h[0], h[1], h[2], h[3]];\n\n  for (let bit = 0; bit < 128; bit++) {\n    doubled.push([value[0], value[1], value[2], value[3]]);\n    shiftRightAndReduce(value);\n  }\n\n  const table = new Uint32Array(windows * windowSize * 4);\n  for (let window = 0; window < windows; window++) {\n    for (let selector = 0; selector < windowSize; selector++) {\n      const item = createZeroWords();\n      for (let bit = 0; bit < windowBits; bit++) {\n        if (((selector >>> (windowBits - bit - 1)) & 1) !== 0) {\n          xorWordsInPlace(item, doubled[(window * windowBits) + bit]);\n        }\n      }\n      const offset = ((window * windowSize) + selector) * 4;\n      table[offset] = item[0];\n      table[offset + 1] = item[1];\n      table[offset + 2] = item[2];\n      table[offset + 3] = item[3];\n    }\n  }\n  return table;\n}\n\nfunction multiplyGf128Window(input: Words128, table: Uint32Array, windowSize: number): Words128 {\n  const output = createZeroWords();\n  const mask = windowSize - 1;\n  const windows = 128 / GHASH_WINDOW_BITS;\n\n  for (let window = 0; window < windows; window++) {\n    const bitOffset = window * GHASH_WINDOW_BITS;\n    const word = bitOffset >>> 5;\n    const shift = 32 - GHASH_WINDOW_BITS - (bitOffset & 31);\n    const selector = (input[word] >>> shift) & mask;\n    if (selector !== 0) {\n      const tableOffset = ((window * windowSize) + selector) * 4;\n      output[0] = (output[0] ^ table[tableOffset]) >>> 0;\n      output[1] = (output[1] ^ table[tableOffset + 1]) >>> 0;\n      output[2] = (output[2] ^ table[tableOffset + 2]) >>> 0;\n      output[3] = (output[3] ^ table[tableOffset + 3]) >>> 0;\n    }\n  }\n  return output;\n}\n\nfunction shiftRightAndReduce(words: Words128): void {\n  const lsb = words[3] & 1;\n  words[3] = ((words[3] >>> 1) | ((words[2] & 1) << 31)) >>> 0;\n  words[2] = ((words[2] >>> 1) | ((words[1] & 1) << 31)) >>> 0;\n  words[1] = ((words[1] >>> 1) | ((words[0] & 1) << 31)) >>> 0;\n  words[0] >>>= 1;\n  if (lsb) {\n    words[0] = (words[0] ^ R_WORD) >>> 0;\n  }\n}\n\nfunction xorWordsInPlace(left: Words128, right: Words128): void {\n  left[0] = (left[0] ^ right[0]) >>> 0;\n  left[1] = (left[1] ^ right[1]) >>> 0;\n  left[2] = (left[2] ^ right[2]) >>> 0;\n  left[3] = (left[3] ^ right[3]) >>> 0;\n}\n\nfunction incrementCounter(counter: Uint8Array): void {\n  const value = (\n    (((counter[12] << 24) >>> 0) |\n    (counter[13] << 16) |\n    (counter[14] << 8) |\n    counter[15]) + 1\n  ) >>> 0;\n  counter[12] = value >>> 24;\n  counter[13] = value >>> 16;\n  counter[14] = value >>> 8;\n  counter[15] = value;\n}\n\nfunction createLengthBlock(aadLength: number, ciphertextLength: number): Uint8Array {\n  const output = new Uint8Array(BLOCK_SIZE);\n  writeBitLength64BE(aadLength, output, 0);\n  writeBitLength64BE(ciphertextLength, output, 8);\n  return output;\n}\n\nfunction writeBitLength64BE(byteLength: number, output: Uint8Array, offset: number): void {\n  const high = Math.floor(byteLength / 0x20000000);\n  const low = (byteLength % 0x20000000) * 8;\n  writeUint32BE(high, output, offset);\n  writeUint32BE(low, output, offset + 4);\n}\n\nfunction blockToWords(input: Uint8Array): Words128 {\n  return [\n    readUint32BE(input, 0),\n    readUint32BE(input, 4),\n    readUint32BE(input, 8),\n    readUint32BE(input, 12),\n  ];\n}\n\nfunction wordsToBlock(words: Words128): Uint8Array {\n  const output = new Uint8Array(BLOCK_SIZE);\n  writeUint32BE(words[0], output, 0);\n  writeUint32BE(words[1], output, 4);\n  writeUint32BE(words[2], output, 8);\n  writeUint32BE(words[3], output, 12);\n  return output;\n}\n\nfunction readUint32BE(input: Uint8Array, offset: number): number {\n  return (\n    ((input[offset] << 24) >>> 0) |\n    (input[offset + 1] << 16) |\n    (input[offset + 2] << 8) |\n    input[offset + 3]\n  ) >>> 0;\n}\n\nfunction readUint32BEPadded(input: Uint8Array, offset: number): number {\n  return (\n    (((input[offset] ?? 0) << 24) >>> 0) |\n    ((input[offset + 1] ?? 0) << 16) |\n    ((input[offset + 2] ?? 0) << 8) |\n    (input[offset + 3] ?? 0)\n  ) >>> 0;\n}\n\nfunction writeUint32BE(value: number, output: Uint8Array, offset: number): void {\n  output[offset] = value >>> 24;\n  output[offset + 1] = value >>> 16;\n  output[offset + 2] = value >>> 8;\n  output[offset + 3] = value;\n}\n\nfunction getNonce(iv: Uint8Array | undefined, options: unknown): Uint8Array {\n  const nonce = getOptions(options).nonce;\n  if (nonce !== undefined) {\n    assertBytes(nonce, 'GCM nonce');\n    if (iv !== undefined) {\n      throw new Error('GCM mode accepts either iv or nonce, not both.');\n    }\n    return nonce;\n  }\n\n  if (!iv) {\n    throw new Error('GCM mode requires an IV/nonce.');\n  }\n  return iv;\n}\n\nfunction getAad(options: unknown): Uint8Array {\n  const aad = getOptions(options).aad;\n  if (aad === undefined) {\n    return new Uint8Array(0);\n  }\n  assertBytes(aad, 'GCM aad');\n  return aad;\n}\n\nfunction getTag(options: unknown): Uint8Array | undefined {\n  const tag = getOptions(options).tag;\n  if (tag === undefined) {\n    return undefined;\n  }\n  assertBytes(tag, 'GCM tag');\n  return tag;\n}\n\nfunction getTagLength(options: unknown): number {\n  const tag = getTag(options);\n  if (tag) {\n    return tag.length;\n  }\n\n  const tagLength = getOptions(options).tagLength;\n  if (tagLength === undefined) {\n    return DEFAULT_TAG_LENGTH;\n  }\n  if (typeof tagLength !== 'number' || !Number.isInteger(tagLength) || tagLength < 4 || tagLength > BLOCK_SIZE) {\n    throw new RangeError('GCM tagLength must be an integer between 4 and 16 bytes.');\n  }\n  return tagLength;\n}\n\nfunction getOptions(options: unknown): Record<string, unknown> {\n  return typeof options === 'object' && options !== null ? options as Record<string, unknown> : {};\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n\nfunction assertGcmCipher(cipher: BlockCipher): void {\n  if (cipher.blockSize !== BLOCK_SIZE) {\n    throw new Error('GCM mode requires a 128-bit block cipher.');\n  }\n}\n","import { assertIv, type BlockCipher, type ModeComponent, type PresetComponent, type Transform } from '@jscrypto/core';\n\nexport const ofb: ModeComponent<'OFB'> = {\n  kind: 'mode',\n  name: 'OFB',\n  requiresPadding: false,\n  getIvSize: (cipher) => cipher.blockSize,\n  createEncryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'OFB');\n    return createOfbTransform(cipher, iv, getMutableInput(options));\n  },\n  createDecryptor({ cipher, iv, options }) {\n    assertIv(cipher.blockSize, iv, 'OFB');\n    return createOfbTransform(cipher, iv, getMutableInput(options));\n  },\n};\n\nexport const ofbPreset: PresetComponent<'ofb'> = {\n  kind: 'preset',\n  name: 'ofb',\n  components() {\n    return [ofb];\n  },\n};\n\nfunction createOfbTransform(cipher: BlockCipher, iv: Uint8Array, mutableInput: boolean): Transform {\n  let feedback: Uint8Array = iv.slice();\n  let keystream: Uint8Array = new Uint8Array(cipher.blockSize);\n  let position = cipher.blockSize;\n\n  return {\n    process(input) {\n      const output = mutableInput ? input : new Uint8Array(input.length);\n      let offset = 0;\n\n      if (position === cipher.blockSize) {\n        for (; offset + cipher.blockSize <= input.length; offset += cipher.blockSize) {\n          encryptFeedback(cipher, feedback, keystream);\n          feedback.set(keystream);\n          for (let index = 0; index < cipher.blockSize; index++) {\n            output[offset + index] = input[offset + index] ^ keystream[index];\n          }\n        }\n      }\n\n      for (let i = offset; i < input.length; i++) {\n        if (position === cipher.blockSize) {\n          encryptFeedback(cipher, feedback, keystream);\n          feedback.set(keystream);\n          position = 0;\n        }\n\n        output[i] = input[i] ^ keystream[position];\n        position++;\n      }\n\n      return output;\n    },\n\n    finalize(input = new Uint8Array(0)) {\n      return input.length === 0 ? new Uint8Array(0) : this.process(input);\n    },\n  };\n}\n\nfunction encryptFeedback(cipher: BlockCipher, feedback: Uint8Array, keystream: Uint8Array): void {\n  if (cipher.encryptBlock) {\n    cipher.encryptBlock(feedback, 0, keystream, 0);\n  } else {\n    cipher.encrypt(feedback, keystream);\n  }\n}\n\nfunction getMutableInput(options: unknown): boolean {\n  if (typeof options !== 'object' || options === null) {\n    return false;\n  }\n  return 'mutableInput' in options && options.mutableInput === true;\n}\n","import type { PresetComponent } from '@jscrypto/core';\nimport { cbcPreset } from './cbc.js';\nimport { cfbPreset } from './cfb.js';\nimport { ctrPreset } from './ctr.js';\nimport { ecbPreset } from './ecb.js';\nimport { gcmPreset } from './gcm.js';\nimport { ofbPreset } from './ofb.js';\n\nexport function modesPreset(): PresetComponent<'modes'> {\n  return {\n    kind: 'preset',\n    name: 'modes',\n    components() {\n      return [cbcPreset, cfbPreset, ctrPreset, ecbPreset, gcmPreset, ofbPreset];\n    },\n  };\n}\n"],"names":["assertIv","getMutableInput","assertBlockMultiple","assertCoreBlockMultiple","encryptFeedback","incrementCounter","concatBytes","equalBytes","assertBytes"],"mappings":"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"}