{"version":3,"file":"speck.mjs","sources":["../../../node_modules/js-speck/dist/index.mjs","../src/speck.ts"],"sourcesContent":["/*!\n * js-speck v0.1.0\n * Copyright 2026 Chen, Yi-Cyuan\n * Released under the MIT license\n */\n\n// src/bytes.ts\nvar HAS_TYPED_ARRAY = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\" && typeof Uint32Array !== \"undefined\";\nvar ByteArrayClass = HAS_TYPED_ARRAY ? Uint8Array : Array;\nvar WordArrayClass = HAS_TYPED_ARRAY ? Uint32Array : Array;\nvar INPUT_ERROR = \"input is invalid type\";\nvar isArray = !Array.isArray ? function(obj) {\n  return Object.prototype.toString.call(obj) === \"[object Array]\";\n} : Array.isArray;\nfunction toByteArray(input) {\n  const type = typeof input;\n  if (type !== \"object\" || input === null) {\n    throw new Error(INPUT_ERROR);\n  }\n  if (HAS_TYPED_ARRAY) {\n    if (input instanceof Uint8Array) {\n      return input;\n    }\n    if (input instanceof ArrayBuffer) {\n      return new Uint8Array(input);\n    }\n  }\n  if (!isArray(input)) {\n    throw new Error(INPUT_ERROR);\n  }\n  return input;\n}\nfunction assertByteLength(input, length, name) {\n  if (input.length !== length) {\n    throw new RangeError(`${name} must be ${length} bytes.`);\n  }\n}\nfunction toWordLE(bytes, wordBytes) {\n  var words = new WordArrayClass(bytes.length / wordBytes);\n  for (var i = 0; i < words.length; ++i) {\n    var offset = i * wordBytes;\n    var value = 0;\n    for (var j = 0; j < wordBytes; ++j) {\n      value += bytes[offset + j] * Math.pow(2, j * 8);\n    }\n    words[i] = value >>> 0;\n  }\n  return words;\n}\nfunction fromWordLE(words, wordBytes) {\n  var bytes = new ByteArrayClass(words.length * wordBytes);\n  for (var i = 0; i < words.length; ++i) {\n    var offset = i * wordBytes;\n    var value = words[i];\n    for (var j = 0; j < wordBytes; ++j) {\n      bytes[offset + j] = Math.floor(value / Math.pow(2, j * 8)) & 255;\n    }\n  }\n  return bytes;\n}\n\n// src/speck.ts\nfunction createMask(wordBits) {\n  return wordBits === 32 ? 4294967295 : (1 << wordBits) - 1;\n}\nfunction normalize(value, mask, wordBits) {\n  return wordBits === 32 ? value >>> 0 : value & mask;\n}\nfunction rotr(value, shift, wordBits, mask) {\n  return normalize(value >>> shift | value << wordBits - shift, mask, wordBits);\n}\nfunction rotl(value, shift, wordBits, mask) {\n  return normalize(value << shift | value >>> wordBits - shift, mask, wordBits);\n}\nfunction createSpeckVariant(config) {\n  const wordBytes = config.wordBits / 8;\n  const blockBytes = wordBytes * 2;\n  const keyByteLength = wordBytes * config.keyWords;\n  const mask = createMask(config.wordBits);\n  function round(x, y, key) {\n    x = normalize(rotr(x, config.alpha, config.wordBits, mask) + y, mask, config.wordBits);\n    x = normalize(x ^ key, mask, config.wordBits);\n    y = normalize(rotl(y, config.beta, config.wordBits, mask) ^ x, mask, config.wordBits);\n    return [x, y];\n  }\n  function inverseRound(x, y, key) {\n    y = rotr(normalize(y ^ x, mask, config.wordBits), config.beta, config.wordBits, mask);\n    x = rotl(normalize((x ^ key) - y, mask, config.wordBits), config.alpha, config.wordBits, mask);\n    return [x, y];\n  }\n  function assertBlockMultiple(bytes, name) {\n    if (bytes.length % blockBytes !== 0) {\n      throw new RangeError(`${name} length must be a multiple of ${blockBytes} bytes.`);\n    }\n  }\n  function assertWordLength(words, length, name) {\n    if (words.length !== length) {\n      throw new RangeError(`${name} must contain ${length} words.`);\n    }\n  }\n  function assertWordBlockMultiple(words, name) {\n    if (words.length % 2 !== 0) {\n      throw new RangeError(`${name} length must be a multiple of 2 words.`);\n    }\n  }\n  function assertRoundKeysAndDataWords(roundKeys, dataWords) {\n    if (roundKeys.length !== config.rounds) {\n      throw new RangeError(`Round keys must contain ${config.rounds} words.`);\n    }\n    assertWordBlockMultiple(dataWords, \"Data\");\n  }\n  function toWords(key, data) {\n    const keyBytes = toByteArray(key);\n    assertByteLength(keyBytes, keyByteLength, \"Key\");\n    const dataBytes = toByteArray(data);\n    assertBlockMultiple(dataBytes, \"Data\");\n    return [toWordLE(keyBytes, wordBytes), toWordLE(dataBytes, wordBytes)];\n  }\n  function expandKey11(keyWords) {\n    assertWordLength(keyWords, config.keyWords, \"Key\");\n    const l = new WordArrayClass(config.rounds + config.keyWords - 2);\n    const roundKeys = new WordArrayClass(config.rounds);\n    roundKeys[0] = keyWords[0];\n    for (let i = 1; i < config.keyWords; ++i) {\n      l[i - 1] = keyWords[i];\n    }\n    for (let i = 0; i < config.rounds - 1; ++i) {\n      const result = round(l[i], roundKeys[i], i);\n      l[i + config.keyWords - 1] = result[0];\n      roundKeys[i + 1] = result[1];\n    }\n    return roundKeys;\n  }\n  function encrypt11(key, data) {\n    const [keyWords, dataWords] = toWords(key, data);\n    return fromWordLE(encryptWords11(keyWords, dataWords), wordBytes);\n  }\n  function encryptWords11(keyWords, dataWords) {\n    return encryptWordsWithRoundKey11(expandKey11(keyWords), dataWords);\n  }\n  function encryptWordsWithRoundKey11(roundKeys, dataWords) {\n    assertRoundKeysAndDataWords(roundKeys, dataWords);\n    const result = new WordArrayClass(dataWords.length);\n    for (let i = 0; i < dataWords.length; i += 2) {\n      let y = dataWords[i];\n      let x = dataWords[i + 1];\n      for (let j = 0; j < config.rounds; ++j) {\n        const r = round(x, y, roundKeys[j]);\n        x = r[0];\n        y = r[1];\n      }\n      result[i] = y;\n      result[i + 1] = x;\n    }\n    return result;\n  }\n  function decrypt11(key, data) {\n    const [keyWords, dataWords] = toWords(key, data);\n    return fromWordLE(decryptWords11(keyWords, dataWords), wordBytes);\n  }\n  function decryptWords11(keyWords, dataWords) {\n    return decryptWordsWithRoundKey11(expandKey11(keyWords), dataWords);\n  }\n  function decryptWordsWithRoundKey11(roundKeys, dataWords) {\n    assertRoundKeysAndDataWords(roundKeys, dataWords);\n    const result = new WordArrayClass(dataWords.length);\n    for (let i = 0; i < dataWords.length; i += 2) {\n      let y = dataWords[i];\n      let x = dataWords[i + 1];\n      for (let j = config.rounds - 1; j >= 0; --j) {\n        const r = inverseRound(x, y, roundKeys[j]);\n        x = r[0];\n        y = r[1];\n      }\n      result[i] = y;\n      result[i + 1] = x;\n    }\n    return result;\n  }\n  return {\n    blockBytes,\n    keyBytes: keyByteLength,\n    rounds: config.rounds,\n    expandKey: expandKey11,\n    encrypt: encrypt11,\n    decrypt: decrypt11,\n    encryptWords: encryptWords11,\n    decryptWords: decryptWords11,\n    encryptWordsWithRoundKey: encryptWordsWithRoundKey11,\n    decryptWordsWithRoundKey: decryptWordsWithRoundKey11\n  };\n}\n\n// src/speck32-64.ts\nvar speck32_64Block = createSpeckVariant({\n  name: \"Speck32/64\",\n  wordBits: 16,\n  keyWords: 4,\n  rounds: 22,\n  alpha: 7,\n  beta: 2\n});\nvar {\n  expandKey,\n  encrypt,\n  decrypt,\n  encryptWords,\n  decryptWords,\n  encryptWordsWithRoundKey,\n  decryptWordsWithRoundKey\n} = speck32_64Block;\n\n// src/speck48-72.ts\nvar speck48_72Block = createSpeckVariant({\n  name: \"Speck48/72\",\n  wordBits: 24,\n  keyWords: 3,\n  rounds: 22,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey2,\n  encrypt: encrypt2,\n  decrypt: decrypt2,\n  encryptWords: encryptWords2,\n  decryptWords: decryptWords2,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey2,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey2\n} = speck48_72Block;\n\n// src/speck48-96.ts\nvar speck48_96Block = createSpeckVariant({\n  name: \"Speck48/96\",\n  wordBits: 24,\n  keyWords: 4,\n  rounds: 23,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey3,\n  encrypt: encrypt3,\n  decrypt: decrypt3,\n  encryptWords: encryptWords3,\n  decryptWords: decryptWords3,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey3,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey3\n} = speck48_96Block;\n\n// src/speck64-96.ts\nvar speck64_96Block = createSpeckVariant({\n  name: \"Speck64/96\",\n  wordBits: 32,\n  keyWords: 3,\n  rounds: 26,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey4,\n  encrypt: encrypt4,\n  decrypt: decrypt4,\n  encryptWords: encryptWords4,\n  decryptWords: decryptWords4,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey4,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey4\n} = speck64_96Block;\n\n// src/speck64-128.ts\nvar speck64_128Block = createSpeckVariant({\n  name: \"Speck64/128\",\n  wordBits: 32,\n  keyWords: 4,\n  rounds: 27,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey5,\n  encrypt: encrypt5,\n  decrypt: decrypt5,\n  encryptWords: encryptWords5,\n  decryptWords: decryptWords5,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey5,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey5\n} = speck64_128Block;\n\n// src/speck-long.ts\nfunction addLong(aLo, aHi, bLo, bHi, highMask) {\n  const lo = aLo + bLo >>> 0;\n  const hi = (aHi + bHi + (lo < aLo >>> 0 ? 1 : 0) & highMask) >>> 0;\n  return [lo, hi];\n}\nfunction subLong(aLo, aHi, bLo, bHi, highMask) {\n  const lo = aLo - bLo >>> 0;\n  const hi = (aHi - bHi - (aLo >>> 0 < bLo >>> 0 ? 1 : 0) & highMask) >>> 0;\n  return [lo, hi];\n}\nfunction rotlLong(lo, hi, shift, highBits, highMask) {\n  return [\n    (lo << shift | hi >>> highBits - shift) >>> 0,\n    ((hi << shift | lo >>> 32 - shift) & highMask) >>> 0\n  ];\n}\nfunction rotrLong(lo, hi, shift, highBits, highMask) {\n  const shiftMask = (1 << shift) - 1;\n  return [\n    (lo >>> shift | (hi & shiftMask) << 32 - shift) >>> 0,\n    ((hi >>> shift | (lo & shiftMask) << highBits - shift) & highMask) >>> 0\n  ];\n}\nfunction toLongWordPairsLE(bytes, wordBytes) {\n  const lanesPerWord = 2;\n  const words = new WordArrayClass(bytes.length / wordBytes * lanesPerWord);\n  for (let i = 0; i < words.length; i += lanesPerWord) {\n    const offset = i / lanesPerWord * wordBytes;\n    words[i] = (bytes[offset] | bytes[offset + 1] << 8 | bytes[offset + 2] << 16 | bytes[offset + 3] << 24) >>> 0;\n    let high = 0;\n    for (let j = 4; j < wordBytes; ++j) {\n      high |= bytes[offset + j] << (j - 4) * 8;\n    }\n    words[i + 1] = high >>> 0;\n  }\n  return words;\n}\nfunction fromLongWordPairsLE(words, wordBytes) {\n  const lanesPerWord = 2;\n  const bytes = new ByteArrayClass(words.length / lanesPerWord * wordBytes);\n  for (let i = 0; i < words.length; i += lanesPerWord) {\n    const lo = words[i];\n    const hi = words[i + 1];\n    const offset = i / lanesPerWord * wordBytes;\n    bytes[offset] = lo & 255;\n    bytes[offset + 1] = lo >>> 8 & 255;\n    bytes[offset + 2] = lo >>> 16 & 255;\n    bytes[offset + 3] = lo >>> 24 & 255;\n    for (let j = 4; j < wordBytes; ++j) {\n      bytes[offset + j] = hi >>> (j - 4) * 8 & 255;\n    }\n  }\n  return bytes;\n}\nfunction createSpeckLongVariant(config) {\n  const lanesPerWord = 2;\n  const wordBytes = config.wordBits / 8;\n  const highBits = config.wordBits - 32;\n  const highMask = config.wordBits === 64 ? 4294967295 : (1 << highBits) - 1;\n  const blockBytes = wordBytes * 2;\n  const keyByteLength = wordBytes * config.keyWords;\n  const keyLaneLength = config.keyWords * lanesPerWord;\n  const roundKeyLaneLength = config.rounds * lanesPerWord;\n  function round(xLo, xHi, yLo, yHi, keyLo, keyHi) {\n    let rotated = rotrLong(xLo, xHi, config.alpha, highBits, highMask);\n    rotated = addLong(rotated[0], rotated[1], yLo, yHi, highMask);\n    xLo = (rotated[0] ^ keyLo) >>> 0;\n    xHi = ((rotated[1] ^ keyHi) & highMask) >>> 0;\n    rotated = rotlLong(yLo, yHi, config.beta, highBits, highMask);\n    yLo = (rotated[0] ^ xLo) >>> 0;\n    yHi = ((rotated[1] ^ xHi) & highMask) >>> 0;\n    return [xLo, xHi, yLo, yHi];\n  }\n  function inverseRound(xLo, xHi, yLo, yHi, keyLo, keyHi) {\n    let rotated = rotrLong((yLo ^ xLo) >>> 0, ((yHi ^ xHi) & highMask) >>> 0, config.beta, highBits, highMask);\n    yLo = rotated[0];\n    yHi = rotated[1];\n    const subtracted = subLong((xLo ^ keyLo) >>> 0, ((xHi ^ keyHi) & highMask) >>> 0, yLo, yHi, highMask);\n    rotated = rotlLong(subtracted[0], subtracted[1], config.alpha, highBits, highMask);\n    xLo = rotated[0];\n    xHi = rotated[1];\n    return [xLo, xHi, yLo, yHi];\n  }\n  function assertBlockMultiple(bytes, name) {\n    if (bytes.length % blockBytes !== 0) {\n      throw new RangeError(`${name} length must be a multiple of ${blockBytes} bytes.`);\n    }\n  }\n  function assertLaneLength(words, length, name) {\n    if (words.length !== length) {\n      throw new RangeError(`${name} must contain ${length} 32-bit lanes.`);\n    }\n  }\n  function assertLaneBlockMultiple(words, name) {\n    if (words.length % 4 !== 0) {\n      throw new RangeError(`${name} length must be a multiple of 4 32-bit lanes.`);\n    }\n  }\n  function assertRoundKeysAndDataWords(roundKeys, dataWords) {\n    if (roundKeys.length !== roundKeyLaneLength) {\n      throw new RangeError(`Round keys must contain ${roundKeyLaneLength} 32-bit lanes.`);\n    }\n    assertLaneBlockMultiple(dataWords, \"Data\");\n  }\n  function toWords(key, data) {\n    const keyBytes = toByteArray(key);\n    assertByteLength(keyBytes, keyByteLength, \"Key\");\n    const dataBytes = toByteArray(data);\n    assertBlockMultiple(dataBytes, \"Data\");\n    return [toLongWordPairsLE(keyBytes, wordBytes), toLongWordPairsLE(dataBytes, wordBytes)];\n  }\n  function expandKey11(keyWords) {\n    assertLaneLength(keyWords, keyLaneLength, \"Key\");\n    const l = new WordArrayClass((config.rounds + config.keyWords - 2) * lanesPerWord);\n    const roundKeys = new WordArrayClass(roundKeyLaneLength);\n    roundKeys[0] = keyWords[0];\n    roundKeys[1] = keyWords[1];\n    for (let i = 1; i < config.keyWords; ++i) {\n      const target = (i - 1) * lanesPerWord;\n      const source = i * lanesPerWord;\n      l[target] = keyWords[source];\n      l[target + 1] = keyWords[source + 1];\n    }\n    for (let i = 0; i < config.rounds - 1; ++i) {\n      const lOffset = i * lanesPerWord;\n      const keyOffset = i * lanesPerWord;\n      const result = round(l[lOffset], l[lOffset + 1], roundKeys[keyOffset], roundKeys[keyOffset + 1], i, 0);\n      const nextLOffset = (i + config.keyWords - 1) * lanesPerWord;\n      const nextKeyOffset = (i + 1) * lanesPerWord;\n      l[nextLOffset] = result[0];\n      l[nextLOffset + 1] = result[1];\n      roundKeys[nextKeyOffset] = result[2];\n      roundKeys[nextKeyOffset + 1] = result[3];\n    }\n    return roundKeys;\n  }\n  function encrypt11(key, data) {\n    const [keyWords, dataWords] = toWords(key, data);\n    return fromLongWordPairsLE(encryptWords11(keyWords, dataWords), wordBytes);\n  }\n  function encryptWords11(keyWords, dataWords) {\n    return encryptWordsWithRoundKey11(expandKey11(keyWords), dataWords);\n  }\n  function encryptWordsWithRoundKey11(roundKeys, dataWords) {\n    assertRoundKeysAndDataWords(roundKeys, dataWords);\n    const result = new WordArrayClass(dataWords.length);\n    for (let i = 0; i < dataWords.length; i += 4) {\n      let yLo = dataWords[i];\n      let yHi = dataWords[i + 1];\n      let xLo = dataWords[i + 2];\n      let xHi = dataWords[i + 3];\n      for (let j = 0; j < config.rounds; ++j) {\n        const keyOffset = j * lanesPerWord;\n        const r = round(xLo, xHi, yLo, yHi, roundKeys[keyOffset], roundKeys[keyOffset + 1]);\n        xLo = r[0];\n        xHi = r[1];\n        yLo = r[2];\n        yHi = r[3];\n      }\n      result[i] = yLo;\n      result[i + 1] = yHi;\n      result[i + 2] = xLo;\n      result[i + 3] = xHi;\n    }\n    return result;\n  }\n  function decrypt11(key, data) {\n    const [keyWords, dataWords] = toWords(key, data);\n    return fromLongWordPairsLE(decryptWords11(keyWords, dataWords), wordBytes);\n  }\n  function decryptWords11(keyWords, dataWords) {\n    return decryptWordsWithRoundKey11(expandKey11(keyWords), dataWords);\n  }\n  function decryptWordsWithRoundKey11(roundKeys, dataWords) {\n    assertRoundKeysAndDataWords(roundKeys, dataWords);\n    const result = new WordArrayClass(dataWords.length);\n    for (let i = 0; i < dataWords.length; i += 4) {\n      let yLo = dataWords[i];\n      let yHi = dataWords[i + 1];\n      let xLo = dataWords[i + 2];\n      let xHi = dataWords[i + 3];\n      for (let j = config.rounds - 1; j >= 0; --j) {\n        const keyOffset = j * lanesPerWord;\n        const r = inverseRound(xLo, xHi, yLo, yHi, roundKeys[keyOffset], roundKeys[keyOffset + 1]);\n        xLo = r[0];\n        xHi = r[1];\n        yLo = r[2];\n        yHi = r[3];\n      }\n      result[i] = yLo;\n      result[i + 1] = yHi;\n      result[i + 2] = xLo;\n      result[i + 3] = xHi;\n    }\n    return result;\n  }\n  return {\n    blockBytes,\n    keyBytes: keyByteLength,\n    rounds: config.rounds,\n    expandKey: expandKey11,\n    encrypt: encrypt11,\n    decrypt: decrypt11,\n    encryptWords: encryptWords11,\n    decryptWords: decryptWords11,\n    encryptWordsWithRoundKey: encryptWordsWithRoundKey11,\n    decryptWordsWithRoundKey: decryptWordsWithRoundKey11\n  };\n}\n\n// src/speck96-96.ts\nvar speck96_96Block = createSpeckLongVariant({\n  wordBits: 48,\n  keyWords: 2,\n  rounds: 28,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey6,\n  encrypt: encrypt6,\n  decrypt: decrypt6,\n  encryptWords: encryptWords6,\n  decryptWords: decryptWords6,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey6,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey6\n} = speck96_96Block;\n\n// src/speck96-144.ts\nvar speck96_144Block = createSpeckLongVariant({\n  wordBits: 48,\n  keyWords: 3,\n  rounds: 29,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey7,\n  encrypt: encrypt7,\n  decrypt: decrypt7,\n  encryptWords: encryptWords7,\n  decryptWords: decryptWords7,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey7,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey7\n} = speck96_144Block;\n\n// src/speck128-128.ts\nvar speck128_128Block = createSpeckLongVariant({\n  wordBits: 64,\n  keyWords: 2,\n  rounds: 32,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey8,\n  encrypt: encrypt8,\n  decrypt: decrypt8,\n  encryptWords: encryptWords8,\n  decryptWords: decryptWords8,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey8,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey8\n} = speck128_128Block;\n\n// src/speck128-192.ts\nvar speck128_192Block = createSpeckLongVariant({\n  wordBits: 64,\n  keyWords: 3,\n  rounds: 33,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey9,\n  encrypt: encrypt9,\n  decrypt: decrypt9,\n  encryptWords: encryptWords9,\n  decryptWords: decryptWords9,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey9,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey9\n} = speck128_192Block;\n\n// src/speck128-256.ts\nvar speck128_256Block = createSpeckLongVariant({\n  wordBits: 64,\n  keyWords: 4,\n  rounds: 34,\n  alpha: 8,\n  beta: 3\n});\nvar {\n  expandKey: expandKey10,\n  encrypt: encrypt10,\n  decrypt: decrypt10,\n  encryptWords: encryptWords10,\n  decryptWords: decryptWords10,\n  encryptWordsWithRoundKey: encryptWordsWithRoundKey10,\n  decryptWordsWithRoundKey: decryptWordsWithRoundKey10\n} = speck128_256Block;\n\n// src/index.ts\nvar speck32_64 = speck32_64Block;\nvar speck48_72 = speck48_72Block;\nvar speck48_96 = speck48_96Block;\nvar speck64_96 = speck64_96Block;\nvar speck64_128 = speck64_128Block;\nvar speck96_96 = speck96_96Block;\nvar speck96_144 = speck96_144Block;\nvar speck128_128 = speck128_128Block;\nvar speck128_192 = speck128_192Block;\nvar speck128_256 = speck128_256Block;\nexport {\n  decrypt8 as decryptSpeck128_128,\n  decryptWords8 as decryptSpeck128_128Words,\n  decryptWordsWithRoundKey8 as decryptSpeck128_128WordsWithRoundKey,\n  decrypt9 as decryptSpeck128_192,\n  decryptWords9 as decryptSpeck128_192Words,\n  decryptWordsWithRoundKey9 as decryptSpeck128_192WordsWithRoundKey,\n  decrypt10 as decryptSpeck128_256,\n  decryptWords10 as decryptSpeck128_256Words,\n  decryptWordsWithRoundKey10 as decryptSpeck128_256WordsWithRoundKey,\n  decrypt as decryptSpeck32_64,\n  decryptWords as decryptSpeck32_64Words,\n  decryptWordsWithRoundKey as decryptSpeck32_64WordsWithRoundKey,\n  decrypt2 as decryptSpeck48_72,\n  decryptWords2 as decryptSpeck48_72Words,\n  decryptWordsWithRoundKey2 as decryptSpeck48_72WordsWithRoundKey,\n  decrypt3 as decryptSpeck48_96,\n  decryptWords3 as decryptSpeck48_96Words,\n  decryptWordsWithRoundKey3 as decryptSpeck48_96WordsWithRoundKey,\n  decrypt5 as decryptSpeck64_128,\n  decryptWords5 as decryptSpeck64_128Words,\n  decryptWordsWithRoundKey5 as decryptSpeck64_128WordsWithRoundKey,\n  decrypt4 as decryptSpeck64_96,\n  decryptWords4 as decryptSpeck64_96Words,\n  decryptWordsWithRoundKey4 as decryptSpeck64_96WordsWithRoundKey,\n  decrypt7 as decryptSpeck96_144,\n  decryptWords7 as decryptSpeck96_144Words,\n  decryptWordsWithRoundKey7 as decryptSpeck96_144WordsWithRoundKey,\n  decrypt6 as decryptSpeck96_96,\n  decryptWords6 as decryptSpeck96_96Words,\n  decryptWordsWithRoundKey6 as decryptSpeck96_96WordsWithRoundKey,\n  encrypt8 as encryptSpeck128_128,\n  encryptWords8 as encryptSpeck128_128Words,\n  encryptWordsWithRoundKey8 as encryptSpeck128_128WordsWithRoundKey,\n  encrypt9 as encryptSpeck128_192,\n  encryptWords9 as encryptSpeck128_192Words,\n  encryptWordsWithRoundKey9 as encryptSpeck128_192WordsWithRoundKey,\n  encrypt10 as encryptSpeck128_256,\n  encryptWords10 as encryptSpeck128_256Words,\n  encryptWordsWithRoundKey10 as encryptSpeck128_256WordsWithRoundKey,\n  encrypt as encryptSpeck32_64,\n  encryptWords as encryptSpeck32_64Words,\n  encryptWordsWithRoundKey as encryptSpeck32_64WordsWithRoundKey,\n  encrypt2 as encryptSpeck48_72,\n  encryptWords2 as encryptSpeck48_72Words,\n  encryptWordsWithRoundKey2 as encryptSpeck48_72WordsWithRoundKey,\n  encrypt3 as encryptSpeck48_96,\n  encryptWords3 as encryptSpeck48_96Words,\n  encryptWordsWithRoundKey3 as encryptSpeck48_96WordsWithRoundKey,\n  encrypt5 as encryptSpeck64_128,\n  encryptWords5 as encryptSpeck64_128Words,\n  encryptWordsWithRoundKey5 as encryptSpeck64_128WordsWithRoundKey,\n  encrypt4 as encryptSpeck64_96,\n  encryptWords4 as encryptSpeck64_96Words,\n  encryptWordsWithRoundKey4 as encryptSpeck64_96WordsWithRoundKey,\n  encrypt7 as encryptSpeck96_144,\n  encryptWords7 as encryptSpeck96_144Words,\n  encryptWordsWithRoundKey7 as encryptSpeck96_144WordsWithRoundKey,\n  encrypt6 as encryptSpeck96_96,\n  encryptWords6 as encryptSpeck96_96Words,\n  encryptWordsWithRoundKey6 as encryptSpeck96_96WordsWithRoundKey,\n  expandKey8 as expandSpeck128_128Key,\n  expandKey9 as expandSpeck128_192Key,\n  expandKey10 as expandSpeck128_256Key,\n  expandKey as expandSpeck32_64Key,\n  expandKey2 as expandSpeck48_72Key,\n  expandKey3 as expandSpeck48_96Key,\n  expandKey5 as expandSpeck64_128Key,\n  expandKey4 as expandSpeck64_96Key,\n  expandKey7 as expandSpeck96_144Key,\n  expandKey6 as expandSpeck96_96Key,\n  speck128_128,\n  speck128_192,\n  speck128_256,\n  speck32_64,\n  speck48_72,\n  speck48_96,\n  speck64_128,\n  speck64_96,\n  speck96_144,\n  speck96_96\n};\n//# sourceMappingURL=index.mjs.map\n","import type { BlockCipher, CipherComponent, PresetComponent } from '@jscrypto/core';\nimport {\n  speck128_128 as speck128_128Impl,\n  speck128_192 as speck128_192Impl,\n  speck128_256 as speck128_256Impl,\n  speck32_64 as speck32_64Impl,\n  speck48_72 as speck48_72Impl,\n  speck48_96 as speck48_96Impl,\n  speck64_96 as speck64_96Impl,\n  speck64_128 as speck64_128Impl,\n  speck96_96 as speck96_96Impl,\n  speck96_144 as speck96_144Impl,\n} from 'js-speck';\n\nexport type SpeckVariantName =\n  | '32-64'\n  | '48-72'\n  | '48-96'\n  | '64-96'\n  | '64-128'\n  | '96-96'\n  | '96-144'\n  | '128-128'\n  | '128-192'\n  | '128-256';\n\ntype SpeckImpl = {\n  readonly blockBytes: number;\n  readonly keyBytes: number;\n  encrypt(key: Uint8Array, data: Uint8Array): ArrayLike<number>;\n  decrypt(key: Uint8Array, data: Uint8Array): ArrayLike<number>;\n};\n\nconst variants: Record<SpeckVariantName, SpeckImpl> = {\n  '32-64': speck32_64Impl,\n  '48-72': speck48_72Impl,\n  '48-96': speck48_96Impl,\n  '64-96': speck64_96Impl,\n  '64-128': speck64_128Impl,\n  '96-96': speck96_96Impl,\n  '96-144': speck96_144Impl,\n  '128-128': speck128_128Impl,\n  '128-192': speck128_192Impl,\n  '128-256': speck128_256Impl,\n};\n\nexport function createSpeckCipher(variant: SpeckVariantName, key: Uint8Array): BlockCipher {\n  if (!variant) {\n    throw new Error('SPECK variant is required.');\n  }\n\n  const impl = variants[variant];\n  if (!impl) {\n    throw new Error(`Unknown SPECK variant: ${String(variant)}.`);\n  }\n\n  if (key.length !== impl.keyBytes) {\n    throw new Error(`SPECK ${variant} key must be ${impl.keyBytes * 8} bits.`);\n  }\n\n  const blockSize = impl.blockBytes;\n\n  return {\n    blockSize,\n\n    encryptBlock(input, inputOffset, output, outputOffset) {\n      transformBlock(impl, key, input, inputOffset, output, outputOffset, true);\n    },\n\n    decryptBlock(input, inputOffset, output, outputOffset) {\n      transformBlock(impl, key, input, inputOffset, output, outputOffset, false);\n    },\n\n    encrypt(input, output) {\n      return transformBlocks(impl, key, input, output, true);\n    },\n\n    decrypt(input, output) {\n      return transformBlocks(impl, key, input, output, false);\n    },\n  };\n}\n\nfunction createComponent<Name extends string>(\n  name: Name,\n  variant: SpeckVariantName,\n): CipherComponent<Name> {\n  const impl = variants[variant];\n  return {\n    kind: 'cipher',\n    name,\n    type: 'block',\n    blockSize: impl.blockBytes,\n    keySizes: [impl.keyBytes],\n    create(key) {\n      return createSpeckCipher(variant, key);\n    },\n  };\n}\n\nexport const speck32_64 = createComponent('SPECK32/64', '32-64');\nexport const speck48_72 = createComponent('SPECK48/72', '48-72');\nexport const speck48_96 = createComponent('SPECK48/96', '48-96');\nexport const speck64_96 = createComponent('SPECK64/96', '64-96');\nexport const speck64_128 = createComponent('SPECK64/128', '64-128');\nexport const speck96_96 = createComponent('SPECK96/96', '96-96');\nexport const speck96_144 = createComponent('SPECK96/144', '96-144');\nexport const speck128_128 = createComponent('SPECK128/128', '128-128');\nexport const speck128_192 = createComponent('SPECK128/192', '128-192');\nexport const speck128_256 = createComponent('SPECK128/256', '128-256');\n\nexport const allSpeckComponents: readonly CipherComponent[] = [\n  speck32_64,\n  speck48_72,\n  speck48_96,\n  speck64_96,\n  speck64_128,\n  speck96_96,\n  speck96_144,\n  speck128_128,\n  speck128_192,\n  speck128_256,\n];\n\nexport const speckPreset: PresetComponent<'speck'> = {\n  kind: 'preset',\n  name: 'speck',\n  components() {\n    return allSpeckComponents;\n  },\n};\n\nfunction transformBlocks(\n  impl: SpeckImpl,\n  key: Uint8Array,\n  input: Uint8Array,\n  output: Uint8Array,\n  encrypting: boolean,\n): Uint8Array {\n  assertBlocks(input, output, impl.blockBytes);\n  for (let offset = 0; offset < input.length; offset += impl.blockBytes) {\n    transformBlock(impl, key, input, offset, output, offset, encrypting);\n  }\n  return output;\n}\n\nfunction transformBlock(\n  impl: SpeckImpl,\n  key: Uint8Array,\n  input: Uint8Array,\n  inputOffset: number,\n  output: Uint8Array,\n  outputOffset: number,\n  encrypting: boolean,\n): void {\n  const block = input.subarray(inputOffset, inputOffset + impl.blockBytes);\n  if (block.length !== impl.blockBytes) {\n    throw new Error(`SPECK block must be ${impl.blockBytes * 8} bits.`);\n  }\n  const transformed = encrypting ? impl.encrypt(key, block) : impl.decrypt(key, block);\n  output.set(transformed, outputOffset);\n}\n\nfunction assertBlocks(input: Uint8Array, output: Uint8Array, blockSize: number): void {\n  if (input.length % blockSize !== 0) {\n    throw new Error(`SPECK input length must be a multiple of ${blockSize * 8} bits.`);\n  }\n  if (output.length !== input.length) {\n    throw new Error('SPECK output length must equal input length.');\n  }\n}\n"],"names":["speck32_64","speck48_72","speck48_96","speck64_96","speck64_128","speck96_96","speck96_144","speck128_128","speck128_192","speck128_256","speck32_64Impl","speck48_72Impl","speck48_96Impl","speck64_96Impl","speck64_128Impl","speck96_96Impl","speck96_144Impl","speck128_128Impl","speck128_192Impl","speck128_256Impl"],"mappings":"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","x_google_ignoreList":[0]}