爱简收旧衣按件回收前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

532 lines
18 KiB

2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
4 weeks ago
2 weeks ago
  1. // js-md5 v0.8.3 (核心实现部分,已适配ESM)
  2. 'use strict';
  3. var INPUT_ERROR = 'input is invalid type';
  4. var FINALIZE_ERROR = 'finalize already called';
  5. var HEX_CHARS = '0123456789abcdef'.split('');
  6. var EXTRA = [128, 32768, 8388608, -2147483648];
  7. var SHIFT = [0, 8, 16, 24];
  8. var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
  9. var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
  10. var blocks = [], buffer8;
  11. var ARRAY_BUFFER = typeof ArrayBuffer !== 'undefined';
  12. if (ARRAY_BUFFER) {
  13. var buffer = new ArrayBuffer(68);
  14. buffer8 = new Uint8Array(buffer);
  15. blocks = new Uint32Array(buffer);
  16. }
  17. var isArray = Array.isArray;
  18. if (!isArray) {
  19. isArray = function (obj) {
  20. return Object.prototype.toString.call(obj) === '[object Array]';
  21. };
  22. }
  23. var isView = ArrayBuffer && ArrayBuffer.isView;
  24. if (ARRAY_BUFFER && !isView) {
  25. isView = function (obj) {
  26. return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
  27. };
  28. }
  29. // [message: string, isString: bool]
  30. var formatMessage = function (message) {
  31. var type = typeof message;
  32. if (type === 'string') {
  33. return [message, true];
  34. }
  35. if (type !== 'object' || message === null) {
  36. throw new Error(INPUT_ERROR);
  37. }
  38. if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
  39. return [new Uint8Array(message), false];
  40. }
  41. if (!isArray(message) && !(ARRAY_BUFFER && isView(message))) {
  42. throw new Error(INPUT_ERROR);
  43. }
  44. return [message, false];
  45. };
  46. var createOutputMethod = function (outputType) {
  47. return function (message) {
  48. return new Md5(true).update(message)[outputType]();
  49. };
  50. };
  51. var createMethod = function () {
  52. var method = createOutputMethod('hex');
  53. method.create = function () {
  54. return new Md5();
  55. };
  56. method.update = function (message) {
  57. return method.create().update(message);
  58. };
  59. for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
  60. var type = OUTPUT_TYPES[i];
  61. method[type] = createOutputMethod(type);
  62. }
  63. return method;
  64. };
  65. var createHmacOutputMethod = function (outputType) {
  66. return function (key, message) {
  67. return new HmacMd5(key, true).update(message)[outputType]();
  68. };
  69. };
  70. var createHmacMethod = function () {
  71. var method = createHmacOutputMethod('hex');
  72. method.create = function (key) {
  73. return new HmacMd5(key);
  74. };
  75. method.update = function (key, message) {
  76. return method.create(key).update(message);
  77. };
  78. for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
  79. var type = OUTPUT_TYPES[i];
  80. method[type] = createHmacOutputMethod(type);
  81. }
  82. return method;
  83. };
  84. function Md5(sharedMemory) {
  85. if (sharedMemory) {
  86. blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
  87. blocks[4] = blocks[5] = blocks[6] = blocks[7] =
  88. blocks[8] = blocks[9] = blocks[10] = blocks[11] =
  89. blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
  90. this.blocks = blocks;
  91. this.buffer8 = buffer8;
  92. } else {
  93. if (ARRAY_BUFFER) {
  94. var buffer = new ArrayBuffer(68);
  95. this.buffer8 = new Uint8Array(buffer);
  96. this.blocks = new Uint32Array(buffer);
  97. } else {
  98. this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  99. }
  100. }
  101. this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
  102. this.finalized = this.hashed = false;
  103. this.first = true;
  104. }
  105. Md5.prototype.update = function (message) {
  106. if (this.finalized) {
  107. throw new Error(FINALIZE_ERROR);
  108. }
  109. var result = formatMessage(message);
  110. message = result[0];
  111. var isString = result[1];
  112. var code, index = 0, i, length = message.length, blocks = this.blocks;
  113. var buffer8 = this.buffer8;
  114. while (index < length) {
  115. if (this.hashed) {
  116. this.hashed = false;
  117. blocks[0] = blocks[16];
  118. blocks[16] = blocks[1] = blocks[2] = blocks[3] =
  119. blocks[4] = blocks[5] = blocks[6] = blocks[7] =
  120. blocks[8] = blocks[9] = blocks[10] = blocks[11] =
  121. blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
  122. }
  123. if (isString) {
  124. if (ARRAY_BUFFER) {
  125. for (i = this.start; index < length && i < 64; ++index) {
  126. code = message.charCodeAt(index);
  127. if (code < 0x80) {
  128. buffer8[i++] = code;
  129. } else if (code < 0x800) {
  130. buffer8[i++] = 0xc0 | (code >>> 6);
  131. buffer8[i++] = 0x80 | (code & 0x3f);
  132. } else if (code < 0xd800 || code >= 0xe000) {
  133. buffer8[i++] = 0xe0 | (code >>> 12);
  134. buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);
  135. buffer8[i++] = 0x80 | (code & 0x3f);
  136. } else {
  137. code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
  138. buffer8[i++] = 0xf0 | (code >>> 18);
  139. buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);
  140. buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);
  141. buffer8[i++] = 0x80 | (code & 0x3f);
  142. }
  143. }
  144. } else {
  145. for (i = this.start; index < length && i < 64; ++index) {
  146. code = message.charCodeAt(index);
  147. if (code < 0x80) {
  148. blocks[i >>> 2] |= code << SHIFT[i++ & 3];
  149. } else if (code < 0x800) {
  150. blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];
  151. blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  152. } else if (code < 0xd800 || code >= 0xe000) {
  153. blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];
  154. blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
  155. blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  156. } else {
  157. code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
  158. blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];
  159. blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];
  160. blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
  161. blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
  162. }
  163. }
  164. }
  165. } else {
  166. if (ARRAY_BUFFER) {
  167. for (i = this.start; index < length && i < 64; ++index) {
  168. buffer8[i++] = message[index];
  169. }
  170. } else {
  171. for (i = this.start; index < length && i < 64; ++index) {
  172. blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];
  173. }
  174. }
  175. }
  176. this.lastByteIndex = i;
  177. this.bytes += i - this.start;
  178. if (i >= 64) {
  179. this.start = i - 64;
  180. this.hash();
  181. this.hashed = true;
  182. } else {
  183. this.start = i;
  184. }
  185. }
  186. if (this.bytes > 4294967295) {
  187. this.hBytes += this.bytes / 4294967296 << 0;
  188. this.bytes = this.bytes % 4294967296;
  189. }
  190. return this;
  191. };
  192. Md5.prototype.finalize = function () {
  193. if (this.finalized) {
  194. return;
  195. }
  196. this.finalized = true;
  197. var blocks = this.blocks, i = this.lastByteIndex;
  198. blocks[i >>> 2] |= EXTRA[i & 3];
  199. if (i >= 56) {
  200. if (!this.hashed) {
  201. this.hash();
  202. }
  203. blocks[0] = blocks[16];
  204. blocks[16] = blocks[1] = blocks[2] = blocks[3] =
  205. blocks[4] = blocks[5] = blocks[6] = blocks[7] =
  206. blocks[8] = blocks[9] = blocks[10] = blocks[11] =
  207. blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
  208. }
  209. blocks[14] = this.bytes << 3;
  210. blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
  211. this.hash();
  212. };
  213. Md5.prototype.hash = function () {
  214. var a, b, c, d, bc, da, blocks = this.blocks;
  215. if (this.first) {
  216. a = blocks[0] - 680876937;
  217. a = (a << 7 | a >>> 25) - 271733879 << 0;
  218. d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
  219. d = (d << 12 | d >>> 20) + a << 0;
  220. c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
  221. c = (c << 17 | c >>> 15) + d << 0;
  222. b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
  223. b = (b << 22 | b >>> 10) + c << 0;
  224. } else {
  225. a = this.h0;
  226. b = this.h1;
  227. c = this.h2;
  228. d = this.h3;
  229. a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
  230. a = (a << 7 | a >>> 25) + b << 0;
  231. d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
  232. d = (d << 12 | d >>> 20) + a << 0;
  233. c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
  234. c = (c << 17 | c >>> 15) + d << 0;
  235. b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
  236. b = (b << 22 | b >>> 10) + c << 0;
  237. }
  238. a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
  239. a = (a << 7 | a >>> 25) + b << 0;
  240. d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
  241. d = (d << 12 | d >>> 20) + a << 0;
  242. c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
  243. c = (c << 17 | c >>> 15) + d << 0;
  244. b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
  245. b = (b << 22 | b >>> 10) + c << 0;
  246. a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
  247. a = (a << 7 | a >>> 25) + b << 0;
  248. d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
  249. d = (d << 12 | d >>> 20) + a << 0;
  250. c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
  251. c = (c << 17 | c >>> 15) + d << 0;
  252. b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
  253. b = (b << 22 | b >>> 10) + c << 0;
  254. a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
  255. a = (a << 7 | a >>> 25) + b << 0;
  256. d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
  257. d = (d << 12 | d >>> 20) + a << 0;
  258. c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
  259. c = (c << 17 | c >>> 15) + d << 0;
  260. b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
  261. b = (b << 22 | b >>> 10) + c << 0;
  262. a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
  263. a = (a << 5 | a >>> 27) + b << 0;
  264. d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
  265. d = (d << 9 | d >>> 23) + a << 0;
  266. c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
  267. c = (c << 14 | c >>> 18) + d << 0;
  268. b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
  269. b = (b << 20 | b >>> 12) + c << 0;
  270. a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
  271. a = (a << 5 | a >>> 27) + b << 0;
  272. d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
  273. d = (d << 9 | d >>> 23) + a << 0;
  274. c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
  275. c = (c << 14 | c >>> 18) + d << 0;
  276. b += (d ^ (c & (d ^ a))) + blocks[4] - 405537848;
  277. b = (b << 20 | b >>> 12) + c << 0;
  278. a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
  279. a = (a << 5 | a >>> 27) + b << 0;
  280. d += (b ^ (a & (c ^ b))) + blocks[14] - 1019803690;
  281. d = (d << 9 | d >>> 23) + a << 0;
  282. c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
  283. c = (c << 14 | c >>> 18) + d << 0;
  284. b += (d ^ (c & (d ^ a))) + blocks[8] + 1163531501;
  285. b = (b << 20 | b >>> 12) + c << 0;
  286. a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
  287. a = (a << 5 | a >>> 27) + b << 0;
  288. d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
  289. d = (d << 9 | d >>> 23) + a << 0;
  290. c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
  291. c = (c << 14 | c >>> 18) + d << 0;
  292. b += (d ^ (c & (d ^ a))) + blocks[12] - 1926607734;
  293. b = (b << 20 | b >>> 12) + c << 0;
  294. bc = b ^ c;
  295. a += (bc ^ d) + blocks[5] - 378558;
  296. a = (a << 4 | a >>> 28) + b << 0;
  297. d += (bc ^ a) + blocks[8] - 2022574463;
  298. d = (d << 11 | d >>> 21) + a << 0;
  299. da = d ^ a;
  300. c += (da ^ b) + blocks[11] + 1839030562;
  301. c = (c << 16 | c >>> 16) + d << 0;
  302. b += (da ^ c) + blocks[14] - 35309556;
  303. b = (b << 23 | b >>> 9) + c << 0;
  304. bc = b ^ c;
  305. a += (bc ^ d) + blocks[1] - 1530992060;
  306. a = (a << 4 | a >>> 28) + b << 0;
  307. d += (bc ^ a) + blocks[4] + 1272893353;
  308. d = (d << 11 | d >>> 21) + a << 0;
  309. da = d ^ a;
  310. c += (da ^ b) + blocks[7] - 155497632;
  311. c = (c << 16 | c >>> 16) + d << 0;
  312. b += (da ^ c) + blocks[10] - 1094730640;
  313. b = (b << 23 | b >>> 9) + c << 0;
  314. bc = b ^ c;
  315. a += (bc ^ d) + blocks[13] + 681279174;
  316. a = (a << 4 | a >>> 28) + b << 0;
  317. d += (bc ^ a) + blocks[0] - 358537222;
  318. d = (d << 11 | d >>> 21) + a << 0;
  319. da = d ^ a;
  320. c += (da ^ b) + blocks[3] - 722521979;
  321. c = (c << 16 | c >>> 16) + d << 0;
  322. b += (da ^ c) + blocks[6] + 76029189;
  323. b = (b << 23 | b >>> 9) + c << 0;
  324. bc = b ^ c;
  325. a += (bc ^ d) + blocks[9] - 640364487;
  326. a = (a << 4 | a >>> 28) + b << 0;
  327. d += (bc ^ a) + blocks[12] - 421815835;
  328. d = (d << 11 | d >>> 21) + a << 0;
  329. da = d ^ a;
  330. c += (da ^ b) + blocks[15] + 530742520;
  331. c = (c << 16 | c >>> 16) + d << 0;
  332. b += (da ^ c) + blocks[2] - 995338651;
  333. b = (b << 23 | b >>> 9) + c << 0;
  334. a += (c ^ (b | ~d)) + blocks[0] - 198630844;
  335. a = (a << 6 | a >>> 26) + b << 0;
  336. d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
  337. d = (d << 10 | d >>> 22) + a << 0;
  338. c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
  339. c = (c << 15 | c >>> 17) + d << 0;
  340. b += (d ^ (c | ~a)) + blocks[5] - 57434055;
  341. b = (b << 21 | b >>> 11) + c << 0;
  342. a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
  343. a = (a << 6 | a >>> 26) + b << 0;
  344. d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
  345. d = (d << 10 | d >>> 22) + a << 0;
  346. c += (a ^ (d | ~b)) + blocks[10] - 1051523;
  347. c = (c << 15 | c >>> 17) + d << 0;
  348. b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
  349. b = (b << 21 | b >>> 11) + c << 0;
  350. a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
  351. a = (a << 6 | a >>> 26) + b << 0;
  352. d += (b ^ (a | ~c)) + blocks[15] - 30611744;
  353. d = (d << 10 | d >>> 22) + a << 0;
  354. c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
  355. c = (c << 15 | c >>> 17) + d << 0;
  356. b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
  357. b = (b << 21 | b >>> 11) + c << 0;
  358. a += (c ^ (b | ~d)) + blocks[4] - 145523070;
  359. a = (a << 6 | a >>> 26) + b << 0;
  360. d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
  361. d = (d << 10 | d >>> 22) + a << 0;
  362. c += (a ^ (d | ~b)) + blocks[2] + 718787259;
  363. c = (c << 15 | c >>> 17) + d << 0;
  364. b += (d ^ (c | ~a)) + blocks[9] - 343485551;
  365. b = (b << 21 | b >>> 11) + c << 0;
  366. if (this.first) {
  367. this.h0 = a + 1732584193 << 0;
  368. this.h1 = b - 271733879 << 0;
  369. this.h2 = c - 1732584194 << 0;
  370. this.h3 = d + 271733878 << 0;
  371. this.first = false;
  372. } else {
  373. this.h0 = this.h0 + a << 0;
  374. this.h1 = this.h1 + b << 0;
  375. this.h2 = this.h2 + c << 0;
  376. this.h3 = this.h3 + d << 0;
  377. }
  378. };
  379. Md5.prototype.hex = function () {
  380. this.finalize();
  381. var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
  382. return HEX_CHARS[(h0 >>> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
  383. HEX_CHARS[(h0 >>> 12) & 0x0F] + HEX_CHARS[(h0 >>> 8) & 0x0F] +
  384. HEX_CHARS[(h0 >>> 20) & 0x0F] + HEX_CHARS[(h0 >>> 16) & 0x0F] +
  385. HEX_CHARS[(h0 >>> 28) & 0x0F] + HEX_CHARS[(h0 >>> 24) & 0x0F] +
  386. HEX_CHARS[(h1 >>> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
  387. HEX_CHARS[(h1 >>> 12) & 0x0F] + HEX_CHARS[(h1 >>> 8) & 0x0F] +
  388. HEX_CHARS[(h1 >>> 20) & 0x0F] + HEX_CHARS[(h1 >>> 16) & 0x0F] +
  389. HEX_CHARS[(h1 >>> 28) & 0x0F] + HEX_CHARS[(h1 >>> 24) & 0x0F] +
  390. HEX_CHARS[(h2 >>> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
  391. HEX_CHARS[(h2 >>> 12) & 0x0F] + HEX_CHARS[(h2 >>> 8) & 0x0F] +
  392. HEX_CHARS[(h2 >>> 20) & 0x0F] + HEX_CHARS[(h2 >>> 16) & 0x0F] +
  393. HEX_CHARS[(h2 >>> 28) & 0x0F] + HEX_CHARS[(h2 >>> 24) & 0x0F] +
  394. HEX_CHARS[(h3 >>> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
  395. HEX_CHARS[(h3 >>> 12) & 0x0F] + HEX_CHARS[(h3 >>> 8) & 0x0F] +
  396. HEX_CHARS[(h3 >>> 20) & 0x0F] + HEX_CHARS[(h3 >>> 16) & 0x0F] +
  397. HEX_CHARS[(h3 >>> 28) & 0x0F] + HEX_CHARS[(h3 >>> 24) & 0x0F];
  398. };
  399. Md5.prototype.toString = Md5.prototype.hex;
  400. Md5.prototype.digest = function () {
  401. this.finalize();
  402. var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
  403. return [
  404. h0 & 0xFF, (h0 >>> 8) & 0xFF, (h0 >>> 16) & 0xFF, (h0 >>> 24) & 0xFF,
  405. h1 & 0xFF, (h1 >>> 8) & 0xFF, (h1 >>> 16) & 0xFF, (h1 >>> 24) & 0xFF,
  406. h2 & 0xFF, (h2 >>> 8) & 0xFF, (h2 >>> 16) & 0xFF, (h2 >>> 24) & 0xFF,
  407. h3 & 0xFF, (h3 >>> 8) & 0xFF, (h3 >>> 16) & 0xFF, (h3 >>> 24) & 0xFF
  408. ];
  409. };
  410. Md5.prototype.array = Md5.prototype.digest;
  411. Md5.prototype.arrayBuffer = function () {
  412. this.finalize();
  413. var buffer = new ArrayBuffer(16);
  414. var blocks = new Uint32Array(buffer);
  415. blocks[0] = this.h0;
  416. blocks[1] = this.h1;
  417. blocks[2] = this.h2;
  418. blocks[3] = this.h3;
  419. return buffer;
  420. };
  421. Md5.prototype.buffer = Md5.prototype.arrayBuffer;
  422. Md5.prototype.base64 = function () {
  423. var v1, v2, v3, base64Str = '', bytes = this.array();
  424. for (var i = 0; i < 15;) {
  425. v1 = bytes[i++];
  426. v2 = bytes[i++];
  427. v3 = bytes[i++];
  428. base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
  429. BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
  430. BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
  431. BASE64_ENCODE_CHAR[v3 & 63];
  432. }
  433. v1 = bytes[i];
  434. base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
  435. BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
  436. '==';
  437. return base64Str;
  438. };
  439. function HmacMd5(key, sharedMemory) {
  440. var i, result = formatMessage(key);
  441. key = result[0];
  442. if (result[1]) {
  443. var bytes = [], length = key.length, index = 0, code;
  444. for (i = 0; i < length; ++i) {
  445. code = key.charCodeAt(i);
  446. if (code < 0x80) {
  447. bytes[index++] = code;
  448. } else if (code < 0x800) {
  449. bytes[index++] = (0xc0 | (code >>> 6));
  450. bytes[index++] = (0x80 | (code & 0x3f));
  451. } else if (code < 0xd800 || code >= 0xe000) {
  452. bytes[index++] = (0xe0 | (code >>> 12));
  453. bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));
  454. bytes[index++] = (0x80 | (code & 0x3f));
  455. } else {
  456. code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
  457. bytes[index++] = (0xf0 | (code >>> 18));
  458. bytes[index++] = (0x80 | ((code >>> 12) & 0x3f));
  459. bytes[index++] = (0x80 | ((code >>> 6) & 0x3f));
  460. bytes[index++] = (0x80 | (code & 0x3f));
  461. }
  462. }
  463. key = bytes;
  464. }
  465. if (key.length > 64) {
  466. key = (new Md5(true)).update(key).array();
  467. }
  468. var oKeyPad = [], iKeyPad = [];
  469. for (i = 0; i < 64; ++i) {
  470. var b = key[i] || 0;
  471. oKeyPad[i] = 0x5c ^ b;
  472. iKeyPad[i] = 0x36 ^ b;
  473. }
  474. Md5.call(this, sharedMemory);
  475. this.update(iKeyPad);
  476. this.oKeyPad = oKeyPad;
  477. this.inner = true;
  478. this.sharedMemory = sharedMemory;
  479. }
  480. HmacMd5.prototype = new Md5();
  481. HmacMd5.prototype.finalize = function () {
  482. Md5.prototype.finalize.call(this);
  483. if (this.inner) {
  484. this.inner = false;
  485. var innerHash = this.array();
  486. Md5.call(this, this.sharedMemory);
  487. this.update(this.oKeyPad);
  488. this.update(innerHash);
  489. Md5.prototype.finalize.call(this);
  490. }
  491. };
  492. var exports = createMethod();
  493. exports.md5 = exports;
  494. exports.hmac = createHmacMethod();
  495. export default exports;