{"version":3,"file":"sha256.cjs","names":[],"sources":["../../src/anubis/sha256.ts"],"sourcesContent":["// Pure-JS SHA-256 (FIPS 180-4), portable across Node, browsers, ServiceWorkers\n// and React Native. `node:crypto` is deliberately avoided: Metro (RN/Expo)\n// cannot resolve Node core modules, so importing it would break the entire\n// library on RN. WebCrypto is async and unusable in the synchronous PoW loop.\n\n// prettier-ignore\nconst K = new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\nconst rotr = (x: number, n: number): number => (x >>> n) | (x << (32 - n));\n\nconst HEX = '0123456789abcdef';\n\n/** SHA-256 digest of `text` (UTF-8) as 32 raw bytes. */\nexport const sha256 = (text: string): Uint8Array => {\n  const bytes = new TextEncoder().encode(text);\n  const length = bytes.length;\n\n  // Pad: append 0x80, then zeros, then the 64-bit big-endian bit length.\n  const withOne = length + 1;\n  const padZeros = (56 - (withOne % 64) + 64) % 64;\n  const total = withOne + padZeros + 8;\n  const message = new Uint8Array(total);\n  message.set(bytes);\n  message[length] = 0x80;\n\n  const bitLengthHi = Math.floor(length / 0x20000000); // length * 8 / 2^32\n  const bitLengthLo = (length * 8) >>> 0;\n  message[total - 8] = (bitLengthHi >>> 24) & 0xff;\n  message[total - 7] = (bitLengthHi >>> 16) & 0xff;\n  message[total - 6] = (bitLengthHi >>> 8) & 0xff;\n  message[total - 5] = bitLengthHi & 0xff;\n  message[total - 4] = (bitLengthLo >>> 24) & 0xff;\n  message[total - 3] = (bitLengthLo >>> 16) & 0xff;\n  message[total - 2] = (bitLengthLo >>> 8) & 0xff;\n  message[total - 1] = bitLengthLo & 0xff;\n\n  let h0 = 0x6a09e667;\n  let h1 = 0xbb67ae85;\n  let h2 = 0x3c6ef372;\n  let h3 = 0xa54ff53a;\n  let h4 = 0x510e527f;\n  let h5 = 0x9b05688c;\n  let h6 = 0x1f83d9ab;\n  let h7 = 0x5be0cd19;\n\n  const w = new Uint32Array(64);\n\n  for (let offset = 0; offset < total; offset += 64) {\n    for (let i = 0; i < 16; i++) {\n      const j = offset + i * 4;\n      w[i] = (message[j] << 24) | (message[j + 1] << 16) | (message[j + 2] << 8) | message[j + 3];\n    }\n    for (let i = 16; i < 64; i++) {\n      const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n      const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n      w[i] = (w[i - 16] + s0 + w[i - 7] + s1) | 0;\n    }\n\n    let a = h0;\n    let b = h1;\n    let c = h2;\n    let d = h3;\n    let e = h4;\n    let f = h5;\n    let g = h6;\n    let h = h7;\n\n    for (let i = 0; i < 64; i++) {\n      const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n      const ch = (e & f) ^ (~e & g);\n      const t1 = (h + S1 + ch + K[i] + w[i]) | 0;\n      const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n      const maj = (a & b) ^ (a & c) ^ (b & c);\n      const t2 = (S0 + maj) | 0;\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    h0 = (h0 + a) | 0;\n    h1 = (h1 + b) | 0;\n    h2 = (h2 + c) | 0;\n    h3 = (h3 + d) | 0;\n    h4 = (h4 + e) | 0;\n    h5 = (h5 + f) | 0;\n    h6 = (h6 + g) | 0;\n    h7 = (h7 + h) | 0;\n  }\n\n  const digest = new Uint8Array(32);\n  const words = [h0, h1, h2, h3, h4, h5, h6, h7];\n  for (let i = 0; i < 8; i++) {\n    const v = words[i];\n    digest[i * 4] = (v >>> 24) & 0xff;\n    digest[i * 4 + 1] = (v >>> 16) & 0xff;\n    digest[i * 4 + 2] = (v >>> 8) & 0xff;\n    digest[i * 4 + 3] = v & 0xff;\n  }\n  return digest;\n};\n\nexport const toHex = (bytes: Uint8Array): string => {\n  let hex = '';\n  for (let i = 0; i < bytes.length; i++) {\n    hex += HEX[bytes[i] >> 4] + HEX[bytes[i] & 0x0f];\n  }\n  return hex;\n};\n"],"mappings":"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"}