mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-19 04:57:52 +00:00
1 line
30 KiB
JSON
1 line
30 KiB
JSON
|
|
{"ast":null,"code":";\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./x64-core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_x64 = C.x64;\n var X64Word = C_x64.Word;\n var C_algo = C.algo;\n\n // Constants tables\n var RHO_OFFSETS = [];\n var PI_INDEXES = [];\n var ROUND_CONSTANTS = [];\n\n // Compute Constants\n (function () {\n // Compute rho offset constants\n var x = 1,\n y = 0;\n for (var t = 0; t < 24; t++) {\n RHO_OFFSETS[x + 5 * y] = (t + 1) * (t + 2) / 2 % 64;\n var newX = y % 5;\n var newY = (2 * x + 3 * y) % 5;\n x = newX;\n y = newY;\n }\n\n // Compute pi index constants\n for (var x = 0; x < 5; x++) {\n for (var y = 0; y < 5; y++) {\n PI_INDEXES[x + 5 * y] = y + (2 * x + 3 * y) % 5 * 5;\n }\n }\n\n // Compute round constants\n var LFSR = 0x01;\n for (var i = 0; i < 24; i++) {\n var roundConstantMsw = 0;\n var roundConstantLsw = 0;\n for (var j = 0; j < 7; j++) {\n if (LFSR & 0x01) {\n var bitPosition = (1 << j) - 1;\n if (bitPosition < 32) {\n roundConstantLsw ^= 1 << bitPosition;\n } else /* if (bitPosition >= 32) */{\n roundConstantMsw ^= 1 << bitPosition - 32;\n }\n }\n\n // Compute next LFSR\n if (LFSR & 0x80) {\n // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n LFSR = LFSR << 1 ^ 0x71;\n } else {\n LFSR <<= 1;\n }\n }\n ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n }\n })();\n\n // Reusable objects for temporary values\n var T = [];\n (function () {\n for (var i = 0; i < 25; i++) {\n T[i] = X64Word.create();\n }\n })();\n\n /**\n * SHA-3 hash algorithm.\n */\n var SHA3 = C_algo.SHA3 = Hasher.extend({\n /**\n * Configuration options.\n *\n * @property {number} outputLength\n * The desired number of bits in the output hash.\n * Only values permitted are: 224, 256, 384, 512.\n * Default: 512\n */\n cfg: Hasher.cfg.extend({\n outputLength: 512\n }),\n _doReset: function () {\n var state = this._state = [];\n for (var i = 0; i < 25; i++) {\n state[i] = new X64Word.init();\n }\n this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n },\n _doProcessBlock: function (M, offset) {\n // Shortcuts\n var state = this._state;\n var nBlockSizeLanes = this.blockSize / 2;\n\n // Absorb\n for (var i = 0; i < nBlockSizeLanes; i++) {\n // Shortcuts\n var M2i = M[offset + 2 * i];\n var M2i1 = M[offset + 2 * i + 1];\n\n // Swap endian\n M2i = (M2i << 8 | M2i >>> 24) & 0x00ff00ff | (M2i << 24 | M2i >>> 8) & 0xff00ff00;\n M2i1 = (M2i1 << 8 | M2i1 >>> 24) & 0x00ff00ff | (M2i1 << 24 | M2i1 >>> 8) & 0xff00ff00;\n\n // Absorb message into state\n var lane = state[i];\n lane.high ^= M2i1;\n lane.low ^= M2i;\n }\n\n // Rounds\n for (var round = 0; round < 24; round++) {\n // Theta\n for (var x = 0; x < 5; x++) {\n // Mix column lanes\n var tMsw = 0,\n tLsw = 0;\n for (var y = 0; y < 5; y++) {\n var lane = state[x + 5 * y];\n tMsw ^= lane.high;\n tLsw ^= lane.low;\n
|