crypto-es
Version:
A cryptography algorithms library compatible with ES6 and TypeScript
1 lines • 6.37 kB
Source Map (JSON)
{"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: number[] = [];\nconst K: number[] = [];\n\n// Compute constants\nconst 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\n return true;\n};\n\nconst getFractionalBits = (n: number): number => ((n - (n | 0)) * 0x100000000) | 0;\n\nlet n = 2;\nlet nPrime = 0;\nwhile (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\n nPrime += 1;\n }\n\n n += 1;\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 = CryptoJS.SHA256('message');\n * const hash = CryptoJS.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 = CryptoJS.HmacSHA256(message, key);\n * ```\n */\nexport const HmacSHA256: HMACHashFn = Hasher._createHmacHelper(SHA256Algo);"],"mappings":"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"}