{"version":3,"file":"sha256.mjs","names":["_H: number[]","_K: number[]","n","W: number[]","SHA256: HashFn","HmacSHA256: HMACHashFn"],"sources":["../src/sha256.ts"],"sourcesContent":["import {\n  WordArray,\n  Hasher,\n  Hasher32,\n  HashFn,\n  HMACHashFn,\n} from './core';\n\n// Initialization and round constants tables\nconst { H, K } = /* @__PURE__ */ (() => {\n  const _H: number[] = [];\n  const _K: number[] = [];\n  \n  // Compute constants\n  const isPrime = (n: number): boolean => {\n    const sqrtN = Math.sqrt(n);\n    for (let factor = 2; factor <= sqrtN; factor += 1) {\n      if (!(n % factor)) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  const getFractionalBits = (n: number): number => ((n - (n | 0)) * 0x100000000) | 0;\n\n  let n = 2;\n  let nPrime = 0;\n  while (nPrime < 64) {\n    if (isPrime(n)) {\n      if (nPrime < 8) {\n        _H[nPrime] = getFractionalBits(n ** (1 / 2));\n      }\n      _K[nPrime] = getFractionalBits(n ** (1 / 3));\n      nPrime += 1;\n    }\n    n += 1;\n  }\n  \n  return { H: _H, K: _K };\n})();\n\n// Reusable object\nconst W: number[] = [];\n\n/**\n * SHA-256 hash algorithm.\n */\nexport class SHA256Algo extends Hasher32 {\n  _doReset(): void {\n    this._hash = new WordArray(H.slice(0));\n  }\n\n  _doProcessBlock(M: number[], offset: number): void {\n    // Shortcut\n    const _H = this._hash.words;\n\n    // Working variables\n    let a = _H[0];\n    let b = _H[1];\n    let c = _H[2];\n    let d = _H[3];\n    let e = _H[4];\n    let f = _H[5];\n    let g = _H[6];\n    let h = _H[7];\n\n    // Computation\n    for (let i = 0; i < 64; i += 1) {\n      if (i < 16) {\n        W[i] = M[offset + i] | 0;\n      } else {\n        const gamma0x = W[i - 15];\n        const gamma0 = ((gamma0x << 25) | (gamma0x >>> 7))\n          ^ ((gamma0x << 14) | (gamma0x >>> 18))\n          ^ (gamma0x >>> 3);\n\n        const gamma1x = W[i - 2];\n        const gamma1 = ((gamma1x << 15) | (gamma1x >>> 17))\n          ^ ((gamma1x << 13) | (gamma1x >>> 19))\n          ^ (gamma1x >>> 10);\n\n        W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n      }\n\n      const ch = (e & f) ^ (~e & g);\n      const maj = (a & b) ^ (a & c) ^ (b & c);\n\n      const sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n      const sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n      const t1 = h + sigma1 + ch + K[i] + W[i];\n      const t2 = sigma0 + maj;\n\n      h = g;\n      g = f;\n      f = e;\n      e = (d + t1) | 0;\n      d = c;\n      c = b;\n      b = a;\n      a = (t1 + t2) | 0;\n    }\n\n    // Intermediate hash value\n    _H[0] = (_H[0] + a) | 0;\n    _H[1] = (_H[1] + b) | 0;\n    _H[2] = (_H[2] + c) | 0;\n    _H[3] = (_H[3] + d) | 0;\n    _H[4] = (_H[4] + e) | 0;\n    _H[5] = (_H[5] + f) | 0;\n    _H[6] = (_H[6] + g) | 0;\n    _H[7] = (_H[7] + h) | 0;\n  }\n\n  _doFinalize(): WordArray {\n    // Shortcuts\n    const data = this._data;\n    const dataWords = data.words;\n\n    const nBitsTotal = this._nDataBytes * 8;\n    const nBitsLeft = data.sigBytes * 8;\n\n    // Add padding\n    dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - (nBitsLeft % 32));\n    dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n    dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n    data.sigBytes = dataWords.length * 4;\n\n    // Hash final blocks\n    this._process();\n\n    // Return final computed hash\n    return this._hash;\n  }\n\n  clone(): this {\n    const clone = super.clone.call(this);\n    clone._hash = this._hash.clone();\n\n    return clone;\n  }\n}\n\n/**\n * Shortcut function to the hasher's object interface.\n *\n * @param message - The message to hash.\n * @returns The hash.\n *\n * @example\n * ```js\n * const hash = SHA256('message');\n * const hash = SHA256(wordArray);\n * ```\n */\nexport const SHA256: HashFn = Hasher._createHelper(SHA256Algo);\n\n/**\n * Shortcut function to the HMAC's object interface.\n *\n * @param message - The message to hash.\n * @param key - The secret key.\n * @returns The HMAC.\n *\n * @example\n * ```js\n * const hmac = HmacSHA256(message, key);\n * ```\n */\nexport const HmacSHA256: HMACHashFn = Hasher._createHmacHelper(SHA256Algo);"],"mappings":"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"}