js-sha3

hashing

此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.gf.qytechs.cn/scripts/453122/1105332/js-sha3.js

  1. /**
  2. * [js-sha3]{@link https://github.com/emn178/js-sha3}
  3. *
  4. * @version 0.8.0
  5. * @author Chen, Yi-Cyuan [emn178@gmail.com]
  6. * @copyright Chen, Yi-Cyuan 2015-2018
  7. * @license MIT
  8. */
  9. /*jslint bitwise: true */
  10. (function () {
  11. 'use strict';
  12.  
  13. var INPUT_ERROR = 'input is invalid type';
  14. var FINALIZE_ERROR = 'finalize already called';
  15. var WINDOW = typeof window === 'object';
  16. var root = WINDOW ? window : {};
  17. if (root.JS_SHA3_NO_WINDOW) {
  18. WINDOW = false;
  19. }
  20. var WEB_WORKER = !WINDOW && typeof self === 'object';
  21. var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
  22. if (NODE_JS) {
  23. root = global;
  24. } else if (WEB_WORKER) {
  25. root = self;
  26. }
  27. var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;
  28. var AMD = typeof define === 'function' && define.amd;
  29. var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
  30. var HEX_CHARS = '0123456789abcdef'.split('');
  31. var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
  32. var CSHAKE_PADDING = [4, 1024, 262144, 67108864];
  33. var KECCAK_PADDING = [1, 256, 65536, 16777216];
  34. var PADDING = [6, 1536, 393216, 100663296];
  35. var SHIFT = [0, 8, 16, 24];
  36. var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,
  37. 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,
  38. 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,
  39. 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,
  40. 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];
  41. var BITS = [224, 256, 384, 512];
  42. var SHAKE_BITS = [128, 256];
  43. var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];
  44. var CSHAKE_BYTEPAD = {
  45. '128': 168,
  46. '256': 136
  47. };
  48.  
  49. if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {
  50. Array.isArray = function (obj) {
  51. return Object.prototype.toString.call(obj) === '[object Array]';
  52. };
  53. }
  54.  
  55. if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
  56. ArrayBuffer.isView = function (obj) {
  57. return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
  58. };
  59. }
  60.  
  61. var createOutputMethod = function (bits, padding, outputType) {
  62. return function (message) {
  63. return new Keccak(bits, padding, bits).update(message)[outputType]();
  64. };
  65. };
  66.  
  67. var createShakeOutputMethod = function (bits, padding, outputType) {
  68. return function (message, outputBits) {
  69. return new Keccak(bits, padding, outputBits).update(message)[outputType]();
  70. };
  71. };
  72.  
  73. var createCshakeOutputMethod = function (bits, padding, outputType) {
  74. return function (message, outputBits, n, s) {
  75. return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();
  76. };
  77. };
  78.  
  79. var createKmacOutputMethod = function (bits, padding, outputType) {
  80. return function (key, message, outputBits, s) {
  81. return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();
  82. };
  83. };
  84.  
  85. var createOutputMethods = function (method, createMethod, bits, padding) {
  86. for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
  87. var type = OUTPUT_TYPES[i];
  88. method[type] = createMethod(bits, padding, type);
  89. }
  90. return method;
  91. };
  92.  
  93. var createMethod = function (bits, padding) {
  94. var method = createOutputMethod(bits, padding, 'hex');
  95. method.create = function () {
  96. return new Keccak(bits, padding, bits);
  97. };
  98. method.update = function (message) {
  99. return method.create().update(message);
  100. };
  101. return createOutputMethods(method, createOutputMethod, bits, padding);
  102. };
  103.  
  104. var createShakeMethod = function (bits, padding) {
  105. var method = createShakeOutputMethod(bits, padding, 'hex');
  106. method.create = function (outputBits) {
  107. return new Keccak(bits, padding, outputBits);
  108. };
  109. method.update = function (message, outputBits) {
  110. return method.create(outputBits).update(message);
  111. };
  112. return createOutputMethods(method, createShakeOutputMethod, bits, padding);
  113. };
  114.  
  115. var createCshakeMethod = function (bits, padding) {
  116. var w = CSHAKE_BYTEPAD[bits];
  117. var method = createCshakeOutputMethod(bits, padding, 'hex');
  118. method.create = function (outputBits, n, s) {
  119. if (!n && !s) {
  120. return methods['shake' + bits].create(outputBits);
  121. } else {
  122. return new Keccak(bits, padding, outputBits).bytepad([n, s], w);
  123. }
  124. };
  125. method.update = function (message, outputBits, n, s) {
  126. return method.create(outputBits, n, s).update(message);
  127. };
  128. return createOutputMethods(method, createCshakeOutputMethod, bits, padding);
  129. };
  130.  
  131. var createKmacMethod = function (bits, padding) {
  132. var w = CSHAKE_BYTEPAD[bits];
  133. var method = createKmacOutputMethod(bits, padding, 'hex');
  134. method.create = function (key, outputBits, s) {
  135. return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);
  136. };
  137. method.update = function (key, message, outputBits, s) {
  138. return method.create(key, outputBits, s).update(message);
  139. };
  140. return createOutputMethods(method, createKmacOutputMethod, bits, padding);
  141. };
  142.  
  143. var algorithms = [
  144. { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },
  145. { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },
  146. { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },
  147. { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },
  148. { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }
  149. ];
  150.  
  151. var methods = {}, methodNames = [];
  152.  
  153. for (var i = 0; i < algorithms.length; ++i) {
  154. var algorithm = algorithms[i];
  155. var bits = algorithm.bits;
  156. for (var j = 0; j < bits.length; ++j) {
  157. var methodName = algorithm.name + '_' + bits[j];
  158. methodNames.push(methodName);
  159. methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);
  160. if (algorithm.name !== 'sha3') {
  161. var newMethodName = algorithm.name + bits[j];
  162. methodNames.push(newMethodName);
  163. methods[newMethodName] = methods[methodName];
  164. }
  165. }
  166. }
  167.  
  168. function Keccak(bits, padding, outputBits) {
  169. this.blocks = [];
  170. this.s = [];
  171. this.padding = padding;
  172. this.outputBits = outputBits;
  173. this.reset = true;
  174. this.finalized = false;
  175. this.block = 0;
  176. this.start = 0;
  177. this.blockCount = (1600 - (bits << 1)) >> 5;
  178. this.byteCount = this.blockCount << 2;
  179. this.outputBlocks = outputBits >> 5;
  180. this.extraBytes = (outputBits & 31) >> 3;
  181.  
  182. for (var i = 0; i < 50; ++i) {
  183. this.s[i] = 0;
  184. }
  185. }
  186.  
  187. Keccak.prototype.update = function (message) {
  188. if (this.finalized) {
  189. throw new Error(FINALIZE_ERROR);
  190. }
  191. var notString, type = typeof message;
  192. if (type !== 'string') {
  193. if (type === 'object') {
  194. if (message === null) {
  195. throw new Error(INPUT_ERROR);
  196. } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
  197. message = new Uint8Array(message);
  198. } else if (!Array.isArray(message)) {
  199. if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
  200. throw new Error(INPUT_ERROR);
  201. }
  202. }
  203. } else {
  204. throw new Error(INPUT_ERROR);
  205. }
  206. notString = true;
  207. }
  208. var blocks = this.blocks, byteCount = this.byteCount, length = message.length,
  209. blockCount = this.blockCount, index = 0, s = this.s, i, code;
  210.  
  211. while (index < length) {
  212. if (this.reset) {
  213. this.reset = false;
  214. blocks[0] = this.block;
  215. for (i = 1; i < blockCount + 1; ++i) {
  216. blocks[i] = 0;
  217. }
  218. }
  219. if (notString) {
  220. for (i = this.start; index < length && i < byteCount; ++index) {
  221. blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
  222. }
  223. } else {
  224. for (i = this.start; index < length && i < byteCount; ++index) {
  225. code = message.charCodeAt(index);
  226. if (code < 0x80) {
  227. blocks[i >> 2] |= code << SHIFT[i++ & 3];
  228. } else if (code < 0x800) {
  229. blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
  230. blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  231. } else if (code < 0xd800 || code >= 0xe000) {
  232. blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
  233. blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
  234. blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  235. } else {
  236. code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
  237. blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
  238. blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
  239. blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
  240. blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  241. }
  242. }
  243. }
  244. this.lastByteIndex = i;
  245. if (i >= byteCount) {
  246. this.start = i - byteCount;
  247. this.block = blocks[blockCount];
  248. for (i = 0; i < blockCount; ++i) {
  249. s[i] ^= blocks[i];
  250. }
  251. f(s);
  252. this.reset = true;
  253. } else {
  254. this.start = i;
  255. }
  256. }
  257. return this;
  258. };
  259.  
  260. Keccak.prototype.encode = function (x, right) {
  261. var o = x & 255, n = 1;
  262. var bytes = [o];
  263. x = x >> 8;
  264. o = x & 255;
  265. while (o > 0) {
  266. bytes.unshift(o);
  267. x = x >> 8;
  268. o = x & 255;
  269. ++n;
  270. }
  271. if (right) {
  272. bytes.push(n);
  273. } else {
  274. bytes.unshift(n);
  275. }
  276. this.update(bytes);
  277. return bytes.length;
  278. };
  279.  
  280. Keccak.prototype.encodeString = function (str) {
  281. var notString, type = typeof str;
  282. if (type !== 'string') {
  283. if (type === 'object') {
  284. if (str === null) {
  285. throw new Error(INPUT_ERROR);
  286. } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {
  287. str = new Uint8Array(str);
  288. } else if (!Array.isArray(str)) {
  289. if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {
  290. throw new Error(INPUT_ERROR);
  291. }
  292. }
  293. } else {
  294. throw new Error(INPUT_ERROR);
  295. }
  296. notString = true;
  297. }
  298. var bytes = 0, length = str.length;
  299. if (notString) {
  300. bytes = length;
  301. } else {
  302. for (var i = 0; i < str.length; ++i) {
  303. var code = str.charCodeAt(i);
  304. if (code < 0x80) {
  305. bytes += 1;
  306. } else if (code < 0x800) {
  307. bytes += 2;
  308. } else if (code < 0xd800 || code >= 0xe000) {
  309. bytes += 3;
  310. } else {
  311. code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));
  312. bytes += 4;
  313. }
  314. }
  315. }
  316. bytes += this.encode(bytes * 8);
  317. this.update(str);
  318. return bytes;
  319. };
  320.  
  321. Keccak.prototype.bytepad = function (strs, w) {
  322. var bytes = this.encode(w);
  323. for (var i = 0; i < strs.length; ++i) {
  324. bytes += this.encodeString(strs[i]);
  325. }
  326. var paddingBytes = w - bytes % w;
  327. var zeros = [];
  328. zeros.length = paddingBytes;
  329. this.update(zeros);
  330. return this;
  331. };
  332.  
  333. Keccak.prototype.finalize = function () {
  334. if (this.finalized) {
  335. return;
  336. }
  337. this.finalized = true;
  338. var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
  339. blocks[i >> 2] |= this.padding[i & 3];
  340. if (this.lastByteIndex === this.byteCount) {
  341. blocks[0] = blocks[blockCount];
  342. for (i = 1; i < blockCount + 1; ++i) {
  343. blocks[i] = 0;
  344. }
  345. }
  346. blocks[blockCount - 1] |= 0x80000000;
  347. for (i = 0; i < blockCount; ++i) {
  348. s[i] ^= blocks[i];
  349. }
  350. f(s);
  351. };
  352.  
  353. Keccak.prototype.toString = Keccak.prototype.hex = function () {
  354. this.finalize();
  355.  
  356. var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
  357. extraBytes = this.extraBytes, i = 0, j = 0;
  358. var hex = '', block;
  359. while (j < outputBlocks) {
  360. for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
  361. block = s[i];
  362. hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
  363. HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
  364. HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
  365. HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
  366. }
  367. if (j % blockCount === 0) {
  368. f(s);
  369. i = 0;
  370. }
  371. }
  372. if (extraBytes) {
  373. block = s[i];
  374. hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
  375. if (extraBytes > 1) {
  376. hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
  377. }
  378. if (extraBytes > 2) {
  379. hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
  380. }
  381. }
  382. return hex;
  383. };
  384.  
  385. Keccak.prototype.arrayBuffer = function () {
  386. this.finalize();
  387.  
  388. var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
  389. extraBytes = this.extraBytes, i = 0, j = 0;
  390. var bytes = this.outputBits >> 3;
  391. var buffer;
  392. if (extraBytes) {
  393. buffer = new ArrayBuffer((outputBlocks + 1) << 2);
  394. } else {
  395. buffer = new ArrayBuffer(bytes);
  396. }
  397. var array = new Uint32Array(buffer);
  398. while (j < outputBlocks) {
  399. for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
  400. array[j] = s[i];
  401. }
  402. if (j % blockCount === 0) {
  403. f(s);
  404. }
  405. }
  406. if (extraBytes) {
  407. array[i] = s[i];
  408. buffer = buffer.slice(0, bytes);
  409. }
  410. return buffer;
  411. };
  412.  
  413. Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;
  414.  
  415. Keccak.prototype.digest = Keccak.prototype.array = function () {
  416. this.finalize();
  417.  
  418. var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
  419. extraBytes = this.extraBytes, i = 0, j = 0;
  420. var array = [], offset, block;
  421. while (j < outputBlocks) {
  422. for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
  423. offset = j << 2;
  424. block = s[i];
  425. array[offset] = block & 0xFF;
  426. array[offset + 1] = (block >> 8) & 0xFF;
  427. array[offset + 2] = (block >> 16) & 0xFF;
  428. array[offset + 3] = (block >> 24) & 0xFF;
  429. }
  430. if (j % blockCount === 0) {
  431. f(s);
  432. }
  433. }
  434. if (extraBytes) {
  435. offset = j << 2;
  436. block = s[i];
  437. array[offset] = block & 0xFF;
  438. if (extraBytes > 1) {
  439. array[offset + 1] = (block >> 8) & 0xFF;
  440. }
  441. if (extraBytes > 2) {
  442. array[offset + 2] = (block >> 16) & 0xFF;
  443. }
  444. }
  445. return array;
  446. };
  447.  
  448. function Kmac(bits, padding, outputBits) {
  449. Keccak.call(this, bits, padding, outputBits);
  450. }
  451.  
  452. Kmac.prototype = new Keccak();
  453.  
  454. Kmac.prototype.finalize = function () {
  455. this.encode(this.outputBits, true);
  456. return Keccak.prototype.finalize.call(this);
  457. };
  458.  
  459. var f = function (s) {
  460. var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
  461. b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
  462. b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
  463. b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
  464. for (n = 0; n < 48; n += 2) {
  465. c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
  466. c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
  467. c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
  468. c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
  469. c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
  470. c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
  471. c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
  472. c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
  473. c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
  474. c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
  475.  
  476. h = c8 ^ ((c2 << 1) | (c3 >>> 31));
  477. l = c9 ^ ((c3 << 1) | (c2 >>> 31));
  478. s[0] ^= h;
  479. s[1] ^= l;
  480. s[10] ^= h;
  481. s[11] ^= l;
  482. s[20] ^= h;
  483. s[21] ^= l;
  484. s[30] ^= h;
  485. s[31] ^= l;
  486. s[40] ^= h;
  487. s[41] ^= l;
  488. h = c0 ^ ((c4 << 1) | (c5 >>> 31));
  489. l = c1 ^ ((c5 << 1) | (c4 >>> 31));
  490. s[2] ^= h;
  491. s[3] ^= l;
  492. s[12] ^= h;
  493. s[13] ^= l;
  494. s[22] ^= h;
  495. s[23] ^= l;
  496. s[32] ^= h;
  497. s[33] ^= l;
  498. s[42] ^= h;
  499. s[43] ^= l;
  500. h = c2 ^ ((c6 << 1) | (c7 >>> 31));
  501. l = c3 ^ ((c7 << 1) | (c6 >>> 31));
  502. s[4] ^= h;
  503. s[5] ^= l;
  504. s[14] ^= h;
  505. s[15] ^= l;
  506. s[24] ^= h;
  507. s[25] ^= l;
  508. s[34] ^= h;
  509. s[35] ^= l;
  510. s[44] ^= h;
  511. s[45] ^= l;
  512. h = c4 ^ ((c8 << 1) | (c9 >>> 31));
  513. l = c5 ^ ((c9 << 1) | (c8 >>> 31));
  514. s[6] ^= h;
  515. s[7] ^= l;
  516. s[16] ^= h;
  517. s[17] ^= l;
  518. s[26] ^= h;
  519. s[27] ^= l;
  520. s[36] ^= h;
  521. s[37] ^= l;
  522. s[46] ^= h;
  523. s[47] ^= l;
  524. h = c6 ^ ((c0 << 1) | (c1 >>> 31));
  525. l = c7 ^ ((c1 << 1) | (c0 >>> 31));
  526. s[8] ^= h;
  527. s[9] ^= l;
  528. s[18] ^= h;
  529. s[19] ^= l;
  530. s[28] ^= h;
  531. s[29] ^= l;
  532. s[38] ^= h;
  533. s[39] ^= l;
  534. s[48] ^= h;
  535. s[49] ^= l;
  536.  
  537. b0 = s[0];
  538. b1 = s[1];
  539. b32 = (s[11] << 4) | (s[10] >>> 28);
  540. b33 = (s[10] << 4) | (s[11] >>> 28);
  541. b14 = (s[20] << 3) | (s[21] >>> 29);
  542. b15 = (s[21] << 3) | (s[20] >>> 29);
  543. b46 = (s[31] << 9) | (s[30] >>> 23);
  544. b47 = (s[30] << 9) | (s[31] >>> 23);
  545. b28 = (s[40] << 18) | (s[41] >>> 14);
  546. b29 = (s[41] << 18) | (s[40] >>> 14);
  547. b20 = (s[2] << 1) | (s[3] >>> 31);
  548. b21 = (s[3] << 1) | (s[2] >>> 31);
  549. b2 = (s[13] << 12) | (s[12] >>> 20);
  550. b3 = (s[12] << 12) | (s[13] >>> 20);
  551. b34 = (s[22] << 10) | (s[23] >>> 22);
  552. b35 = (s[23] << 10) | (s[22] >>> 22);
  553. b16 = (s[33] << 13) | (s[32] >>> 19);
  554. b17 = (s[32] << 13) | (s[33] >>> 19);
  555. b48 = (s[42] << 2) | (s[43] >>> 30);
  556. b49 = (s[43] << 2) | (s[42] >>> 30);
  557. b40 = (s[5] << 30) | (s[4] >>> 2);
  558. b41 = (s[4] << 30) | (s[5] >>> 2);
  559. b22 = (s[14] << 6) | (s[15] >>> 26);
  560. b23 = (s[15] << 6) | (s[14] >>> 26);
  561. b4 = (s[25] << 11) | (s[24] >>> 21);
  562. b5 = (s[24] << 11) | (s[25] >>> 21);
  563. b36 = (s[34] << 15) | (s[35] >>> 17);
  564. b37 = (s[35] << 15) | (s[34] >>> 17);
  565. b18 = (s[45] << 29) | (s[44] >>> 3);
  566. b19 = (s[44] << 29) | (s[45] >>> 3);
  567. b10 = (s[6] << 28) | (s[7] >>> 4);
  568. b11 = (s[7] << 28) | (s[6] >>> 4);
  569. b42 = (s[17] << 23) | (s[16] >>> 9);
  570. b43 = (s[16] << 23) | (s[17] >>> 9);
  571. b24 = (s[26] << 25) | (s[27] >>> 7);
  572. b25 = (s[27] << 25) | (s[26] >>> 7);
  573. b6 = (s[36] << 21) | (s[37] >>> 11);
  574. b7 = (s[37] << 21) | (s[36] >>> 11);
  575. b38 = (s[47] << 24) | (s[46] >>> 8);
  576. b39 = (s[46] << 24) | (s[47] >>> 8);
  577. b30 = (s[8] << 27) | (s[9] >>> 5);
  578. b31 = (s[9] << 27) | (s[8] >>> 5);
  579. b12 = (s[18] << 20) | (s[19] >>> 12);
  580. b13 = (s[19] << 20) | (s[18] >>> 12);
  581. b44 = (s[29] << 7) | (s[28] >>> 25);
  582. b45 = (s[28] << 7) | (s[29] >>> 25);
  583. b26 = (s[38] << 8) | (s[39] >>> 24);
  584. b27 = (s[39] << 8) | (s[38] >>> 24);
  585. b8 = (s[48] << 14) | (s[49] >>> 18);
  586. b9 = (s[49] << 14) | (s[48] >>> 18);
  587.  
  588. s[0] = b0 ^ (~b2 & b4);
  589. s[1] = b1 ^ (~b3 & b5);
  590. s[10] = b10 ^ (~b12 & b14);
  591. s[11] = b11 ^ (~b13 & b15);
  592. s[20] = b20 ^ (~b22 & b24);
  593. s[21] = b21 ^ (~b23 & b25);
  594. s[30] = b30 ^ (~b32 & b34);
  595. s[31] = b31 ^ (~b33 & b35);
  596. s[40] = b40 ^ (~b42 & b44);
  597. s[41] = b41 ^ (~b43 & b45);
  598. s[2] = b2 ^ (~b4 & b6);
  599. s[3] = b3 ^ (~b5 & b7);
  600. s[12] = b12 ^ (~b14 & b16);
  601. s[13] = b13 ^ (~b15 & b17);
  602. s[22] = b22 ^ (~b24 & b26);
  603. s[23] = b23 ^ (~b25 & b27);
  604. s[32] = b32 ^ (~b34 & b36);
  605. s[33] = b33 ^ (~b35 & b37);
  606. s[42] = b42 ^ (~b44 & b46);
  607. s[43] = b43 ^ (~b45 & b47);
  608. s[4] = b4 ^ (~b6 & b8);
  609. s[5] = b5 ^ (~b7 & b9);
  610. s[14] = b14 ^ (~b16 & b18);
  611. s[15] = b15 ^ (~b17 & b19);
  612. s[24] = b24 ^ (~b26 & b28);
  613. s[25] = b25 ^ (~b27 & b29);
  614. s[34] = b34 ^ (~b36 & b38);
  615. s[35] = b35 ^ (~b37 & b39);
  616. s[44] = b44 ^ (~b46 & b48);
  617. s[45] = b45 ^ (~b47 & b49);
  618. s[6] = b6 ^ (~b8 & b0);
  619. s[7] = b7 ^ (~b9 & b1);
  620. s[16] = b16 ^ (~b18 & b10);
  621. s[17] = b17 ^ (~b19 & b11);
  622. s[26] = b26 ^ (~b28 & b20);
  623. s[27] = b27 ^ (~b29 & b21);
  624. s[36] = b36 ^ (~b38 & b30);
  625. s[37] = b37 ^ (~b39 & b31);
  626. s[46] = b46 ^ (~b48 & b40);
  627. s[47] = b47 ^ (~b49 & b41);
  628. s[8] = b8 ^ (~b0 & b2);
  629. s[9] = b9 ^ (~b1 & b3);
  630. s[18] = b18 ^ (~b10 & b12);
  631. s[19] = b19 ^ (~b11 & b13);
  632. s[28] = b28 ^ (~b20 & b22);
  633. s[29] = b29 ^ (~b21 & b23);
  634. s[38] = b38 ^ (~b30 & b32);
  635. s[39] = b39 ^ (~b31 & b33);
  636. s[48] = b48 ^ (~b40 & b42);
  637. s[49] = b49 ^ (~b41 & b43);
  638.  
  639. s[0] ^= RC[n];
  640. s[1] ^= RC[n + 1];
  641. }
  642. };
  643.  
  644. if (COMMON_JS) {
  645. module.exports = methods;
  646. } else {
  647. for (i = 0; i < methodNames.length; ++i) {
  648. root[methodNames[i]] = methods[methodNames[i]];
  649. }
  650. if (AMD) {
  651. define(function () {
  652. return methods;
  653. });
  654. }
  655. }
  656. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址