@etherna/sdk-js
Version:
Etherna SDKs for operations on the network
1 lines • 16.3 kB
Source Map (JSON)
{"version":3,"file":"sha256-DdF6k5k3.mjs","sources":["../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/esm/_md.js","../node_modules/.pnpm/@noble+hashes@1.4.0/node_modules/@noble/hashes/esm/sha256.js"],"sourcesContent":["import { exists, output } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Choice: a ? b : c\nexport const Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nexport const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n exists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n exists(this);\n output(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_md.js.map","import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ 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// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends HashMD {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 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 // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map"],"names":["setBigUint64","view","byteOffset","value","isLE","_32n","_u32_max","wh","wl","h","l","Chi","a","b","c","Maj","HashMD","Hash","blockLen","outputLen","padOffset","createView","data","exists","buffer","toBytes","len","pos","take","dataView","out","output","i","oview","outLen","state","res","to","length","finished","destroyed","SHA256_K","SHA256_IV","SHA256_W","SHA256","A","B","C","D","E","F","G","H","offset","W15","W2","s0","rotr","s1","sigma1","T1","T2","sha256","wrapConstructor"],"mappings":"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","x_google_ignoreList":[0,1]}