@ivujs/i-utils 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/cjs/ID-card/index.cjs +122 -0
  4. package/dist/cjs/array/index.cjs +465 -0
  5. package/dist/cjs/clipboard/index.cjs +135 -0
  6. package/dist/cjs/color/index.cjs +210 -0
  7. package/dist/cjs/constants/date.cjs +186 -0
  8. package/dist/cjs/constants/lang.cjs +13 -0
  9. package/dist/cjs/constants/math.cjs +13 -0
  10. package/dist/cjs/constants/regexp.cjs +57 -0
  11. package/dist/cjs/constants/sort.cjs +15 -0
  12. package/dist/cjs/cookie/index.cjs +71 -0
  13. package/dist/cjs/crypto/aes/aes.cjs +533 -0
  14. package/dist/cjs/crypto/aes/index.cjs +28 -0
  15. package/dist/cjs/crypto/base32/base32.cjs +385 -0
  16. package/dist/cjs/crypto/base32/index.cjs +44 -0
  17. package/dist/cjs/crypto/base64/base64.cjs +433 -0
  18. package/dist/cjs/crypto/base64/index.cjs +64 -0
  19. package/dist/cjs/crypto/des/des.cjs +1054 -0
  20. package/dist/cjs/crypto/des/index.cjs +30 -0
  21. package/dist/cjs/crypto/md5/index.cjs +25 -0
  22. package/dist/cjs/crypto/md5/md5.cjs +944 -0
  23. package/dist/cjs/crypto/sha/sha1/index.cjs +25 -0
  24. package/dist/cjs/crypto/sha/sha1/sha1.cjs +602 -0
  25. package/dist/cjs/crypto/sha/sha256/index.cjs +46 -0
  26. package/dist/cjs/crypto/sha/sha256/sha256.cjs +654 -0
  27. package/dist/cjs/crypto/sha/sha3/index.cjs +44 -0
  28. package/dist/cjs/crypto/sha/sha3/sha3.cjs +747 -0
  29. package/dist/cjs/crypto/sha/sha512/index.cjs +88 -0
  30. package/dist/cjs/crypto/sha/sha512/sha512.cjs +1186 -0
  31. package/dist/cjs/crypto/sm/lib/asn1.cjs +167 -0
  32. package/dist/cjs/crypto/sm/lib/ec.cjs +352 -0
  33. package/dist/cjs/crypto/sm/lib/jsbn.cjs +1633 -0
  34. package/dist/cjs/crypto/sm/lib/sm3.cjs +173 -0
  35. package/dist/cjs/crypto/sm/lib/utils.cjs +198 -0
  36. package/dist/cjs/crypto/sm/sm2/index.cjs +122 -0
  37. package/dist/cjs/crypto/sm/sm2/sm2.cjs +269 -0
  38. package/dist/cjs/crypto/sm/sm3/index.cjs +15 -0
  39. package/dist/cjs/crypto/sm/sm3/sm3.cjs +103 -0
  40. package/dist/cjs/crypto/sm/sm4/index.cjs +28 -0
  41. package/dist/cjs/crypto/sm/sm4/sm4.cjs +362 -0
  42. package/dist/cjs/crypto/tea/index.cjs +26 -0
  43. package/dist/cjs/crypto/tea/tea.cjs +215 -0
  44. package/dist/cjs/date/index.cjs +1349 -0
  45. package/dist/cjs/desensitized/index.cjs +74 -0
  46. package/dist/cjs/device/index.cjs +159 -0
  47. package/dist/cjs/dom/index.cjs +176 -0
  48. package/dist/cjs/file/index.cjs +339 -0
  49. package/dist/cjs/function/index.cjs +67 -0
  50. package/dist/cjs/id/index.cjs +46 -0
  51. package/dist/cjs/index.cjs +399 -0
  52. package/dist/cjs/keycode/index.cjs +142 -0
  53. package/dist/cjs/math/index.cjs +284 -0
  54. package/dist/cjs/number/index.cjs +14 -0
  55. package/dist/cjs/object/index.cjs +216 -0
  56. package/dist/cjs/pagination/index.cjs +140 -0
  57. package/dist/cjs/random/index.cjs +25 -0
  58. package/dist/cjs/regexp/index.cjs +109 -0
  59. package/dist/cjs/storage/index.cjs +11 -0
  60. package/dist/cjs/storage/localStorage.cjs +40 -0
  61. package/dist/cjs/storage/sessionStorage.cjs +40 -0
  62. package/dist/cjs/string/index.cjs +338 -0
  63. package/dist/cjs/url/index.cjs +279 -0
  64. package/dist/cjs/validate/index.cjs +487 -0
  65. package/dist/cjs/weapp/index.cjs +151 -0
  66. package/dist/es/ID-card/index.mjs +116 -0
  67. package/dist/es/array/index.mjs +437 -0
  68. package/dist/es/clipboard/index.mjs +129 -0
  69. package/dist/es/color/index.mjs +200 -0
  70. package/dist/es/constants/date.mjs +184 -0
  71. package/dist/es/constants/lang.mjs +11 -0
  72. package/dist/es/constants/math.mjs +11 -0
  73. package/dist/es/constants/regexp.mjs +55 -0
  74. package/dist/es/constants/sort.mjs +13 -0
  75. package/dist/es/cookie/index.mjs +65 -0
  76. package/dist/es/crypto/aes/aes.mjs +529 -0
  77. package/dist/es/crypto/aes/index.mjs +25 -0
  78. package/dist/es/crypto/base32/base32.mjs +381 -0
  79. package/dist/es/crypto/base32/index.mjs +39 -0
  80. package/dist/es/crypto/base64/base64.mjs +427 -0
  81. package/dist/es/crypto/base64/index.mjs +57 -0
  82. package/dist/es/crypto/des/des.mjs +1050 -0
  83. package/dist/es/crypto/des/index.mjs +27 -0
  84. package/dist/es/crypto/md5/index.mjs +22 -0
  85. package/dist/es/crypto/md5/md5.mjs +941 -0
  86. package/dist/es/crypto/sha/sha1/index.mjs +22 -0
  87. package/dist/es/crypto/sha/sha1/sha1.mjs +599 -0
  88. package/dist/es/crypto/sha/sha256/index.mjs +41 -0
  89. package/dist/es/crypto/sha/sha256/sha256.mjs +649 -0
  90. package/dist/es/crypto/sha/sha3/index.mjs +39 -0
  91. package/dist/es/crypto/sha/sha3/sha3.mjs +742 -0
  92. package/dist/es/crypto/sha/sha512/index.mjs +79 -0
  93. package/dist/es/crypto/sha/sha512/sha512.mjs +1177 -0
  94. package/dist/es/crypto/sm/lib/asn1.mjs +164 -0
  95. package/dist/es/crypto/sm/lib/ec.mjs +349 -0
  96. package/dist/es/crypto/sm/lib/jsbn.mjs +1630 -0
  97. package/dist/es/crypto/sm/lib/sm3.mjs +170 -0
  98. package/dist/es/crypto/sm/lib/utils.mjs +186 -0
  99. package/dist/es/crypto/sm/sm2/index.mjs +111 -0
  100. package/dist/es/crypto/sm/sm2/sm2.mjs +258 -0
  101. package/dist/es/crypto/sm/sm3/index.mjs +13 -0
  102. package/dist/es/crypto/sm/sm3/sm3.mjs +99 -0
  103. package/dist/es/crypto/sm/sm4/index.mjs +25 -0
  104. package/dist/es/crypto/sm/sm4/sm4.mjs +359 -0
  105. package/dist/es/crypto/tea/index.mjs +23 -0
  106. package/dist/es/crypto/tea/tea.mjs +211 -0
  107. package/dist/es/date/index.mjs +1262 -0
  108. package/dist/es/desensitized/index.mjs +69 -0
  109. package/dist/es/device/index.mjs +145 -0
  110. package/dist/es/dom/index.mjs +164 -0
  111. package/dist/es/file/index.mjs +323 -0
  112. package/dist/es/function/index.mjs +63 -0
  113. package/dist/es/id/index.mjs +43 -0
  114. package/dist/es/index.mjs +59 -0
  115. package/dist/es/keycode/index.mjs +139 -0
  116. package/dist/es/math/index.mjs +274 -0
  117. package/dist/es/number/index.mjs +12 -0
  118. package/dist/es/object/index.mjs +203 -0
  119. package/dist/es/pagination/index.mjs +134 -0
  120. package/dist/es/random/index.mjs +22 -0
  121. package/dist/es/regexp/index.mjs +98 -0
  122. package/dist/es/storage/index.mjs +9 -0
  123. package/dist/es/storage/localStorage.mjs +35 -0
  124. package/dist/es/storage/sessionStorage.mjs +35 -0
  125. package/dist/es/string/index.mjs +321 -0
  126. package/dist/es/url/index.mjs +261 -0
  127. package/dist/es/validate/index.mjs +451 -0
  128. package/dist/es/weapp/index.mjs +140 -0
  129. package/dist/lib/index.full.esm.js +15825 -0
  130. package/dist/lib/index.full.esm.min.js +58 -0
  131. package/dist/lib/index.full.umd.js +16179 -0
  132. package/package.json +54 -0
@@ -0,0 +1,944 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * [js-md5]{@link https://github.com/emn178/js-md5}
5
+ *
6
+ * @namespace md5
7
+ * @version 0.8.3
8
+ * @author Chen, Yi-Cyuan [emn178@gmail.com]
9
+ * @copyright Chen, Yi-Cyuan 2014-2023
10
+ * @license MIT
11
+ */
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_MD5_NO_WINDOW) {
18
+ WINDOW = false;
19
+ }
20
+ var WEB_WORKER = !WINDOW && typeof self === "object";
21
+ var NODE_JS = !root.JS_MD5_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 ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== "undefined";
28
+ var HEX_CHARS = "0123456789abcdef".split("");
29
+ var EXTRA = [128, 32768, 8388608, -2147483648];
30
+ var SHIFT = [0, 8, 16, 24];
31
+ var OUTPUT_TYPES = ["hex", "array", "digest", "buffer", "arrayBuffer", "base64"];
32
+ var BASE64_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
33
+
34
+ var blocks = [],
35
+ buffer8;
36
+ if (ARRAY_BUFFER) {
37
+ var buffer = new ArrayBuffer(68);
38
+ buffer8 = new Uint8Array(buffer);
39
+ blocks = new Uint32Array(buffer);
40
+ }
41
+
42
+ var isArray = Array.isArray;
43
+ if (root.JS_MD5_NO_NODE_JS || !isArray) {
44
+ isArray = function (obj) {
45
+ return Object.prototype.toString.call(obj) === "[object Array]";
46
+ };
47
+ }
48
+
49
+ var isView = ArrayBuffer.isView;
50
+ if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !isView)) {
51
+ isView = function (obj) {
52
+ return typeof obj === "object" && obj.buffer && obj.buffer.constructor === ArrayBuffer;
53
+ };
54
+ }
55
+
56
+ // [message: string, isString: bool]
57
+ var formatMessage = function (message) {
58
+ var type = typeof message;
59
+ if (type === "string") {
60
+ return [message, true];
61
+ }
62
+ if (type !== "object" || message === null) {
63
+ throw new Error(INPUT_ERROR);
64
+ }
65
+ if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
66
+ return [new Uint8Array(message), false];
67
+ }
68
+ if (!isArray(message) && !isView(message)) {
69
+ throw new Error(INPUT_ERROR);
70
+ }
71
+ return [message, false];
72
+ };
73
+
74
+ /**
75
+ * @method hex
76
+ * @memberof md5
77
+ * @description Output hash as hex string
78
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
79
+ * @returns {String} Hex string
80
+ * @example
81
+ * md5.hex('The quick brown fox jumps over the lazy dog');
82
+ * // equal to
83
+ * md5('The quick brown fox jumps over the lazy dog');
84
+ */
85
+ /**
86
+ * @method digest
87
+ * @memberof md5
88
+ * @description Output hash as bytes array
89
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
90
+ * @returns {Array} Bytes array
91
+ * @example
92
+ * md5.digest('The quick brown fox jumps over the lazy dog');
93
+ */
94
+ /**
95
+ * @method array
96
+ * @memberof md5
97
+ * @description Output hash as bytes array
98
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
99
+ * @returns {Array} Bytes array
100
+ * @example
101
+ * md5.array('The quick brown fox jumps over the lazy dog');
102
+ */
103
+ /**
104
+ * @method arrayBuffer
105
+ * @memberof md5
106
+ * @description Output hash as ArrayBuffer
107
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
108
+ * @returns {ArrayBuffer} ArrayBuffer
109
+ * @example
110
+ * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');
111
+ */
112
+ /**
113
+ * @method buffer
114
+ * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
115
+ * @memberof md5
116
+ * @description Output hash as ArrayBuffer
117
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
118
+ * @returns {ArrayBuffer} ArrayBuffer
119
+ * @example
120
+ * md5.buffer('The quick brown fox jumps over the lazy dog');
121
+ */
122
+ /**
123
+ * @method base64
124
+ * @memberof md5
125
+ * @description Output hash as base64 string
126
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
127
+ * @returns {String} base64 string
128
+ * @example
129
+ * md5.base64('The quick brown fox jumps over the lazy dog');
130
+ */
131
+ var createOutputMethod = function (outputType) {
132
+ return function (message) {
133
+ return new Md5(true).update(message)[outputType]();
134
+ };
135
+ };
136
+
137
+ /**
138
+ * @method create
139
+ * @memberof md5
140
+ * @description Create Md5 object
141
+ * @returns {Md5} Md5 object.
142
+ * @example
143
+ * var hash = md5.create();
144
+ */
145
+ /**
146
+ * @method update
147
+ * @memberof md5
148
+ * @description Create and update Md5 object
149
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
150
+ * @returns {Md5} Md5 object.
151
+ * @example
152
+ * var hash = md5.update('The quick brown fox jumps over the lazy dog');
153
+ * // equal to
154
+ * var hash = md5.create();
155
+ * hash.update('The quick brown fox jumps over the lazy dog');
156
+ */
157
+ var createMethod = function () {
158
+ var method = createOutputMethod("hex");
159
+ if (NODE_JS) {
160
+ method = nodeWrap(method);
161
+ }
162
+ method.create = function () {
163
+ return new Md5();
164
+ };
165
+ method.update = function (message) {
166
+ return method.create().update(message);
167
+ };
168
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
169
+ var type = OUTPUT_TYPES[i];
170
+ method[type] = createOutputMethod(type);
171
+ }
172
+ return method;
173
+ };
174
+
175
+ var nodeWrap = function (method) {
176
+ var crypto = require("crypto");
177
+ var Buffer = require("buffer").Buffer;
178
+ var bufferFrom;
179
+ if (Buffer.from && !root.JS_MD5_NO_BUFFER_FROM) {
180
+ bufferFrom = Buffer.from;
181
+ } else {
182
+ bufferFrom = function (message) {
183
+ return new Buffer(message);
184
+ };
185
+ }
186
+ var nodeMethod = function (message) {
187
+ if (typeof message === "string") {
188
+ return crypto.createHash("md5").update(message, "utf8").digest("hex");
189
+ } else {
190
+ if (message === null || message === undefined) {
191
+ throw new Error(INPUT_ERROR);
192
+ } else if (message.constructor === ArrayBuffer) {
193
+ message = new Uint8Array(message);
194
+ }
195
+ }
196
+ if (isArray(message) || isView(message) || message.constructor === Buffer) {
197
+ return crypto.createHash("md5").update(bufferFrom(message)).digest("hex");
198
+ } else {
199
+ return method(message);
200
+ }
201
+ };
202
+ return nodeMethod;
203
+ };
204
+
205
+ /**
206
+ * @namespace md5.hmac
207
+ */
208
+ /**
209
+ * @method hex
210
+ * @memberof md5.hmac
211
+ * @description Output hash as hex string
212
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
213
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
214
+ * @returns {String} Hex string
215
+ * @example
216
+ * md5.hmac.hex('key', 'The quick brown fox jumps over the lazy dog');
217
+ * // equal to
218
+ * md5.hmac('key', 'The quick brown fox jumps over the lazy dog');
219
+ */
220
+
221
+ /**
222
+ * @method digest
223
+ * @memberof md5.hmac
224
+ * @description Output hash as bytes array
225
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
226
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
227
+ * @returns {Array} Bytes array
228
+ * @example
229
+ * md5.hmac.digest('key', 'The quick brown fox jumps over the lazy dog');
230
+ */
231
+ /**
232
+ * @method array
233
+ * @memberof md5.hmac
234
+ * @description Output hash as bytes array
235
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
236
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
237
+ * @returns {Array} Bytes array
238
+ * @example
239
+ * md5.hmac.array('key', 'The quick brown fox jumps over the lazy dog');
240
+ */
241
+ /**
242
+ * @method arrayBuffer
243
+ * @memberof md5.hmac
244
+ * @description Output hash as ArrayBuffer
245
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
246
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
247
+ * @returns {ArrayBuffer} ArrayBuffer
248
+ * @example
249
+ * md5.hmac.arrayBuffer('key', 'The quick brown fox jumps over the lazy dog');
250
+ */
251
+ /**
252
+ * @method buffer
253
+ * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
254
+ * @memberof md5.hmac
255
+ * @description Output hash as ArrayBuffer
256
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
257
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
258
+ * @returns {ArrayBuffer} ArrayBuffer
259
+ * @example
260
+ * md5.hmac.buffer('key', 'The quick brown fox jumps over the lazy dog');
261
+ */
262
+ /**
263
+ * @method base64
264
+ * @memberof md5.hmac
265
+ * @description Output hash as base64 string
266
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
267
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
268
+ * @returns {String} base64 string
269
+ * @example
270
+ * md5.hmac.base64('key', 'The quick brown fox jumps over the lazy dog');
271
+ */
272
+ var createHmacOutputMethod = function (outputType) {
273
+ return function (key, message) {
274
+ return new HmacMd5(key, true).update(message)[outputType]();
275
+ };
276
+ };
277
+
278
+ /**
279
+ * @method create
280
+ * @memberof md5.hmac
281
+ * @description Create HmacMd5 object
282
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
283
+ * @returns {HmacMd5} HmacMd5 object.
284
+ * @example
285
+ * var hash = md5.hmac.create('key');
286
+ */
287
+ /**
288
+ * @method update
289
+ * @memberof md5.hmac
290
+ * @description Create and update HmacMd5 object
291
+ * @param {String|Array|Uint8Array|ArrayBuffer} key key
292
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
293
+ * @returns {HmacMd5} HmacMd5 object.
294
+ * @example
295
+ * var hash = md5.hmac.update('key', 'The quick brown fox jumps over the lazy dog');
296
+ * // equal to
297
+ * var hash = md5.hmac.create('key');
298
+ * hash.update('The quick brown fox jumps over the lazy dog');
299
+ */
300
+ var createHmacMethod = function () {
301
+ var method = createHmacOutputMethod("hex");
302
+ method.create = function (key) {
303
+ return new HmacMd5(key);
304
+ };
305
+ method.update = function (key, message) {
306
+ return method.create(key).update(message);
307
+ };
308
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
309
+ var type = OUTPUT_TYPES[i];
310
+ method[type] = createHmacOutputMethod(type);
311
+ }
312
+ return method;
313
+ };
314
+
315
+ /**
316
+ * Md5 class
317
+ * @class Md5
318
+ * @description This is internal class.
319
+ * @see {@link md5.create}
320
+ */
321
+ function Md5(sharedMemory) {
322
+ if (sharedMemory) {
323
+ blocks[0] =
324
+ blocks[16] =
325
+ blocks[1] =
326
+ blocks[2] =
327
+ blocks[3] =
328
+ blocks[4] =
329
+ blocks[5] =
330
+ blocks[6] =
331
+ blocks[7] =
332
+ blocks[8] =
333
+ blocks[9] =
334
+ blocks[10] =
335
+ blocks[11] =
336
+ blocks[12] =
337
+ blocks[13] =
338
+ blocks[14] =
339
+ blocks[15] =
340
+ 0;
341
+ this.blocks = blocks;
342
+ this.buffer8 = buffer8;
343
+ } else {
344
+ if (ARRAY_BUFFER) {
345
+ var buffer = new ArrayBuffer(68);
346
+ this.buffer8 = new Uint8Array(buffer);
347
+ this.blocks = new Uint32Array(buffer);
348
+ } else {
349
+ this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
350
+ }
351
+ }
352
+ this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
353
+ this.finalized = this.hashed = false;
354
+ this.first = true;
355
+ }
356
+
357
+ /**
358
+ * @method update
359
+ * @memberof Md5
360
+ * @instance
361
+ * @description Update hash
362
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
363
+ * @returns {Md5} Md5 object.
364
+ * @see {@link md5.update}
365
+ */
366
+ Md5.prototype.update = function (message) {
367
+ if (this.finalized) {
368
+ throw new Error(FINALIZE_ERROR);
369
+ }
370
+
371
+ var result = formatMessage(message);
372
+ message = result[0];
373
+ var isString = result[1];
374
+ var code,
375
+ index = 0,
376
+ i,
377
+ length = message.length,
378
+ blocks = this.blocks;
379
+ var buffer8 = this.buffer8;
380
+
381
+ while (index < length) {
382
+ if (this.hashed) {
383
+ this.hashed = false;
384
+ blocks[0] = blocks[16];
385
+ blocks[16] =
386
+ blocks[1] =
387
+ blocks[2] =
388
+ blocks[3] =
389
+ blocks[4] =
390
+ blocks[5] =
391
+ blocks[6] =
392
+ blocks[7] =
393
+ blocks[8] =
394
+ blocks[9] =
395
+ blocks[10] =
396
+ blocks[11] =
397
+ blocks[12] =
398
+ blocks[13] =
399
+ blocks[14] =
400
+ blocks[15] =
401
+ 0;
402
+ }
403
+
404
+ if (isString) {
405
+ if (ARRAY_BUFFER) {
406
+ for (i = this.start; index < length && i < 64; ++index) {
407
+ code = message.charCodeAt(index);
408
+ if (code < 0x80) {
409
+ buffer8[i++] = code;
410
+ } else if (code < 0x800) {
411
+ buffer8[i++] = 0xc0 | (code >>> 6);
412
+ buffer8[i++] = 0x80 | (code & 0x3f);
413
+ } else if (code < 0xd800 || code >= 0xe000) {
414
+ buffer8[i++] = 0xe0 | (code >>> 12);
415
+ buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);
416
+ buffer8[i++] = 0x80 | (code & 0x3f);
417
+ } else {
418
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
419
+ buffer8[i++] = 0xf0 | (code >>> 18);
420
+ buffer8[i++] = 0x80 | ((code >>> 12) & 0x3f);
421
+ buffer8[i++] = 0x80 | ((code >>> 6) & 0x3f);
422
+ buffer8[i++] = 0x80 | (code & 0x3f);
423
+ }
424
+ }
425
+ } else {
426
+ for (i = this.start; index < length && i < 64; ++index) {
427
+ code = message.charCodeAt(index);
428
+ if (code < 0x80) {
429
+ blocks[i >>> 2] |= code << SHIFT[i++ & 3];
430
+ } else if (code < 0x800) {
431
+ blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3];
432
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
433
+ } else if (code < 0xd800 || code >= 0xe000) {
434
+ blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3];
435
+ blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
436
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
437
+ } else {
438
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
439
+ blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3];
440
+ blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3];
441
+ blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3];
442
+ blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
443
+ }
444
+ }
445
+ }
446
+ } else {
447
+ if (ARRAY_BUFFER) {
448
+ for (i = this.start; index < length && i < 64; ++index) {
449
+ buffer8[i++] = message[index];
450
+ }
451
+ } else {
452
+ for (i = this.start; index < length && i < 64; ++index) {
453
+ blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3];
454
+ }
455
+ }
456
+ }
457
+ this.lastByteIndex = i;
458
+ this.bytes += i - this.start;
459
+ if (i >= 64) {
460
+ this.start = i - 64;
461
+ this.hash();
462
+ this.hashed = true;
463
+ } else {
464
+ this.start = i;
465
+ }
466
+ }
467
+ if (this.bytes > 4294967295) {
468
+ this.hBytes += (this.bytes / 4294967296) << 0;
469
+ this.bytes = this.bytes % 4294967296;
470
+ }
471
+ return this;
472
+ };
473
+
474
+ Md5.prototype.finalize = function () {
475
+ if (this.finalized) {
476
+ return;
477
+ }
478
+ this.finalized = true;
479
+ var blocks = this.blocks,
480
+ i = this.lastByteIndex;
481
+ blocks[i >>> 2] |= EXTRA[i & 3];
482
+ if (i >= 56) {
483
+ if (!this.hashed) {
484
+ this.hash();
485
+ }
486
+ blocks[0] = blocks[16];
487
+ blocks[16] =
488
+ blocks[1] =
489
+ blocks[2] =
490
+ blocks[3] =
491
+ blocks[4] =
492
+ blocks[5] =
493
+ blocks[6] =
494
+ blocks[7] =
495
+ blocks[8] =
496
+ blocks[9] =
497
+ blocks[10] =
498
+ blocks[11] =
499
+ blocks[12] =
500
+ blocks[13] =
501
+ blocks[14] =
502
+ blocks[15] =
503
+ 0;
504
+ }
505
+ blocks[14] = this.bytes << 3;
506
+ blocks[15] = (this.hBytes << 3) | (this.bytes >>> 29);
507
+ this.hash();
508
+ };
509
+
510
+ Md5.prototype.hash = function () {
511
+ var a,
512
+ b,
513
+ c,
514
+ d,
515
+ bc,
516
+ da,
517
+ blocks = this.blocks;
518
+
519
+ if (this.first) {
520
+ a = blocks[0] - 680876937;
521
+ a = (((a << 7) | (a >>> 25)) - 271733879) << 0;
522
+ d = (-1732584194 ^ (a & 2004318071)) + blocks[1] - 117830708;
523
+ d = (((d << 12) | (d >>> 20)) + a) << 0;
524
+ c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
525
+ c = (((c << 17) | (c >>> 15)) + d) << 0;
526
+ b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
527
+ b = (((b << 22) | (b >>> 10)) + c) << 0;
528
+ } else {
529
+ a = this.h0;
530
+ b = this.h1;
531
+ c = this.h2;
532
+ d = this.h3;
533
+ a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
534
+ a = (((a << 7) | (a >>> 25)) + b) << 0;
535
+ d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
536
+ d = (((d << 12) | (d >>> 20)) + a) << 0;
537
+ c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
538
+ c = (((c << 17) | (c >>> 15)) + d) << 0;
539
+ b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
540
+ b = (((b << 22) | (b >>> 10)) + c) << 0;
541
+ }
542
+
543
+ a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
544
+ a = (((a << 7) | (a >>> 25)) + b) << 0;
545
+ d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
546
+ d = (((d << 12) | (d >>> 20)) + a) << 0;
547
+ c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
548
+ c = (((c << 17) | (c >>> 15)) + d) << 0;
549
+ b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
550
+ b = (((b << 22) | (b >>> 10)) + c) << 0;
551
+ a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
552
+ a = (((a << 7) | (a >>> 25)) + b) << 0;
553
+ d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
554
+ d = (((d << 12) | (d >>> 20)) + a) << 0;
555
+ c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
556
+ c = (((c << 17) | (c >>> 15)) + d) << 0;
557
+ b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
558
+ b = (((b << 22) | (b >>> 10)) + c) << 0;
559
+ a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
560
+ a = (((a << 7) | (a >>> 25)) + b) << 0;
561
+ d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
562
+ d = (((d << 12) | (d >>> 20)) + a) << 0;
563
+ c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
564
+ c = (((c << 17) | (c >>> 15)) + d) << 0;
565
+ b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
566
+ b = (((b << 22) | (b >>> 10)) + c) << 0;
567
+ a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
568
+ a = (((a << 5) | (a >>> 27)) + b) << 0;
569
+ d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
570
+ d = (((d << 9) | (d >>> 23)) + a) << 0;
571
+ c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
572
+ c = (((c << 14) | (c >>> 18)) + d) << 0;
573
+ b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
574
+ b = (((b << 20) | (b >>> 12)) + c) << 0;
575
+ a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
576
+ a = (((a << 5) | (a >>> 27)) + b) << 0;
577
+ d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
578
+ d = (((d << 9) | (d >>> 23)) + a) << 0;
579
+ c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
580
+ c = (((c << 14) | (c >>> 18)) + d) << 0;
581
+ b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;
582
+ b = (((b << 20) | (b >>> 12)) + c) << 0;
583
+ a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
584
+ a = (((a << 5) | (a >>> 27)) + b) << 0;
585
+ d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;
586
+ d = (((d << 9) | (d >>> 23)) + a) << 0;
587
+ c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
588
+ c = (((c << 14) | (c >>> 18)) + d) << 0;
589
+ b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;
590
+ b = (((b << 20) | (b >>> 12)) + c) << 0;
591
+ a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
592
+ a = (((a << 5) | (a >>> 27)) + b) << 0;
593
+ d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
594
+ d = (((d << 9) | (d >>> 23)) + a) << 0;
595
+ c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
596
+ c = (((c << 14) | (c >>> 18)) + d) << 0;
597
+ b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;
598
+ b = (((b << 20) | (b >>> 12)) + c) << 0;
599
+ bc = b ^ c;
600
+ a += (bc ^ d) + blocks[5] - 378558;
601
+ a = (((a << 4) | (a >>> 28)) + b) << 0;
602
+ d += (bc ^ a) + blocks[8] - 2022574463;
603
+ d = (((d << 11) | (d >>> 21)) + a) << 0;
604
+ da = d ^ a;
605
+ c += (da ^ b) + blocks[11] + 1839030562;
606
+ c = (((c << 16) | (c >>> 16)) + d) << 0;
607
+ b += (da ^ c) + blocks[14] - 35309556;
608
+ b = (((b << 23) | (b >>> 9)) + c) << 0;
609
+ bc = b ^ c;
610
+ a += (bc ^ d) + blocks[1] - 1530992060;
611
+ a = (((a << 4) | (a >>> 28)) + b) << 0;
612
+ d += (bc ^ a) + blocks[4] + 1272893353;
613
+ d = (((d << 11) | (d >>> 21)) + a) << 0;
614
+ da = d ^ a;
615
+ c += (da ^ b) + blocks[7] - 155497632;
616
+ c = (((c << 16) | (c >>> 16)) + d) << 0;
617
+ b += (da ^ c) + blocks[10] - 1094730640;
618
+ b = (((b << 23) | (b >>> 9)) + c) << 0;
619
+ bc = b ^ c;
620
+ a += (bc ^ d) + blocks[13] + 681279174;
621
+ a = (((a << 4) | (a >>> 28)) + b) << 0;
622
+ d += (bc ^ a) + blocks[0] - 358537222;
623
+ d = (((d << 11) | (d >>> 21)) + a) << 0;
624
+ da = d ^ a;
625
+ c += (da ^ b) + blocks[3] - 722521979;
626
+ c = (((c << 16) | (c >>> 16)) + d) << 0;
627
+ b += (da ^ c) + blocks[6] + 76029189;
628
+ b = (((b << 23) | (b >>> 9)) + c) << 0;
629
+ bc = b ^ c;
630
+ a += (bc ^ d) + blocks[9] - 640364487;
631
+ a = (((a << 4) | (a >>> 28)) + b) << 0;
632
+ d += (bc ^ a) + blocks[12] - 421815835;
633
+ d = (((d << 11) | (d >>> 21)) + a) << 0;
634
+ da = d ^ a;
635
+ c += (da ^ b) + blocks[15] + 530742520;
636
+ c = (((c << 16) | (c >>> 16)) + d) << 0;
637
+ b += (da ^ c) + blocks[2] - 995338651;
638
+ b = (((b << 23) | (b >>> 9)) + c) << 0;
639
+ a += (c ^ (b | ~d)) + blocks[0] - 198630844;
640
+ a = (((a << 6) | (a >>> 26)) + b) << 0;
641
+ d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
642
+ d = (((d << 10) | (d >>> 22)) + a) << 0;
643
+ c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
644
+ c = (((c << 15) | (c >>> 17)) + d) << 0;
645
+ b += (d ^ (c | ~a)) + blocks[5] - 57434055;
646
+ b = (((b << 21) | (b >>> 11)) + c) << 0;
647
+ a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
648
+ a = (((a << 6) | (a >>> 26)) + b) << 0;
649
+ d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
650
+ d = (((d << 10) | (d >>> 22)) + a) << 0;
651
+ c += (a ^ (d | ~b)) + blocks[10] - 1051523;
652
+ c = (((c << 15) | (c >>> 17)) + d) << 0;
653
+ b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
654
+ b = (((b << 21) | (b >>> 11)) + c) << 0;
655
+ a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
656
+ a = (((a << 6) | (a >>> 26)) + b) << 0;
657
+ d += (b ^ (a | ~c)) + blocks[15] - 30611744;
658
+ d = (((d << 10) | (d >>> 22)) + a) << 0;
659
+ c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
660
+ c = (((c << 15) | (c >>> 17)) + d) << 0;
661
+ b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
662
+ b = (((b << 21) | (b >>> 11)) + c) << 0;
663
+ a += (c ^ (b | ~d)) + blocks[4] - 145523070;
664
+ a = (((a << 6) | (a >>> 26)) + b) << 0;
665
+ d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
666
+ d = (((d << 10) | (d >>> 22)) + a) << 0;
667
+ c += (a ^ (d | ~b)) + blocks[2] + 718787259;
668
+ c = (((c << 15) | (c >>> 17)) + d) << 0;
669
+ b += (d ^ (c | ~a)) + blocks[9] - 343485551;
670
+ b = (((b << 21) | (b >>> 11)) + c) << 0;
671
+
672
+ if (this.first) {
673
+ this.h0 = (a + 1732584193) << 0;
674
+ this.h1 = (b - 271733879) << 0;
675
+ this.h2 = (c - 1732584194) << 0;
676
+ this.h3 = (d + 271733878) << 0;
677
+ this.first = false;
678
+ } else {
679
+ this.h0 = (this.h0 + a) << 0;
680
+ this.h1 = (this.h1 + b) << 0;
681
+ this.h2 = (this.h2 + c) << 0;
682
+ this.h3 = (this.h3 + d) << 0;
683
+ }
684
+ };
685
+
686
+ /**
687
+ * @method hex
688
+ * @memberof Md5
689
+ * @instance
690
+ * @description Output hash as hex string
691
+ * @returns {String} Hex string
692
+ * @see {@link md5.hex}
693
+ * @example
694
+ * hash.hex();
695
+ */
696
+ Md5.prototype.hex = function () {
697
+ this.finalize();
698
+
699
+ var h0 = this.h0,
700
+ h1 = this.h1,
701
+ h2 = this.h2,
702
+ h3 = this.h3;
703
+
704
+ return (
705
+ HEX_CHARS[(h0 >>> 4) & 0x0f] +
706
+ HEX_CHARS[h0 & 0x0f] +
707
+ HEX_CHARS[(h0 >>> 12) & 0x0f] +
708
+ HEX_CHARS[(h0 >>> 8) & 0x0f] +
709
+ HEX_CHARS[(h0 >>> 20) & 0x0f] +
710
+ HEX_CHARS[(h0 >>> 16) & 0x0f] +
711
+ HEX_CHARS[(h0 >>> 28) & 0x0f] +
712
+ HEX_CHARS[(h0 >>> 24) & 0x0f] +
713
+ HEX_CHARS[(h1 >>> 4) & 0x0f] +
714
+ HEX_CHARS[h1 & 0x0f] +
715
+ HEX_CHARS[(h1 >>> 12) & 0x0f] +
716
+ HEX_CHARS[(h1 >>> 8) & 0x0f] +
717
+ HEX_CHARS[(h1 >>> 20) & 0x0f] +
718
+ HEX_CHARS[(h1 >>> 16) & 0x0f] +
719
+ HEX_CHARS[(h1 >>> 28) & 0x0f] +
720
+ HEX_CHARS[(h1 >>> 24) & 0x0f] +
721
+ HEX_CHARS[(h2 >>> 4) & 0x0f] +
722
+ HEX_CHARS[h2 & 0x0f] +
723
+ HEX_CHARS[(h2 >>> 12) & 0x0f] +
724
+ HEX_CHARS[(h2 >>> 8) & 0x0f] +
725
+ HEX_CHARS[(h2 >>> 20) & 0x0f] +
726
+ HEX_CHARS[(h2 >>> 16) & 0x0f] +
727
+ HEX_CHARS[(h2 >>> 28) & 0x0f] +
728
+ HEX_CHARS[(h2 >>> 24) & 0x0f] +
729
+ HEX_CHARS[(h3 >>> 4) & 0x0f] +
730
+ HEX_CHARS[h3 & 0x0f] +
731
+ HEX_CHARS[(h3 >>> 12) & 0x0f] +
732
+ HEX_CHARS[(h3 >>> 8) & 0x0f] +
733
+ HEX_CHARS[(h3 >>> 20) & 0x0f] +
734
+ HEX_CHARS[(h3 >>> 16) & 0x0f] +
735
+ HEX_CHARS[(h3 >>> 28) & 0x0f] +
736
+ HEX_CHARS[(h3 >>> 24) & 0x0f]
737
+ );
738
+ };
739
+
740
+ /**
741
+ * @method toString
742
+ * @memberof Md5
743
+ * @instance
744
+ * @description Output hash as hex string
745
+ * @returns {String} Hex string
746
+ * @see {@link md5.hex}
747
+ * @example
748
+ * hash.toString();
749
+ */
750
+ Md5.prototype.toString = Md5.prototype.hex;
751
+
752
+ /**
753
+ * @method digest
754
+ * @memberof Md5
755
+ * @instance
756
+ * @description Output hash as bytes array
757
+ * @returns {Array} Bytes array
758
+ * @see {@link md5.digest}
759
+ * @example
760
+ * hash.digest();
761
+ */
762
+ Md5.prototype.digest = function () {
763
+ this.finalize();
764
+
765
+ var h0 = this.h0,
766
+ h1 = this.h1,
767
+ h2 = this.h2,
768
+ h3 = this.h3;
769
+ return [
770
+ h0 & 0xff,
771
+ (h0 >>> 8) & 0xff,
772
+ (h0 >>> 16) & 0xff,
773
+ (h0 >>> 24) & 0xff,
774
+ h1 & 0xff,
775
+ (h1 >>> 8) & 0xff,
776
+ (h1 >>> 16) & 0xff,
777
+ (h1 >>> 24) & 0xff,
778
+ h2 & 0xff,
779
+ (h2 >>> 8) & 0xff,
780
+ (h2 >>> 16) & 0xff,
781
+ (h2 >>> 24) & 0xff,
782
+ h3 & 0xff,
783
+ (h3 >>> 8) & 0xff,
784
+ (h3 >>> 16) & 0xff,
785
+ (h3 >>> 24) & 0xff,
786
+ ];
787
+ };
788
+
789
+ /**
790
+ * @method array
791
+ * @memberof Md5
792
+ * @instance
793
+ * @description Output hash as bytes array
794
+ * @returns {Array} Bytes array
795
+ * @see {@link md5.array}
796
+ * @example
797
+ * hash.array();
798
+ */
799
+ Md5.prototype.array = Md5.prototype.digest;
800
+
801
+ /**
802
+ * @method arrayBuffer
803
+ * @memberof Md5
804
+ * @instance
805
+ * @description Output hash as ArrayBuffer
806
+ * @returns {ArrayBuffer} ArrayBuffer
807
+ * @see {@link md5.arrayBuffer}
808
+ * @example
809
+ * hash.arrayBuffer();
810
+ */
811
+ Md5.prototype.arrayBuffer = function () {
812
+ this.finalize();
813
+
814
+ var buffer = new ArrayBuffer(16);
815
+ var blocks = new Uint32Array(buffer);
816
+ blocks[0] = this.h0;
817
+ blocks[1] = this.h1;
818
+ blocks[2] = this.h2;
819
+ blocks[3] = this.h3;
820
+ return buffer;
821
+ };
822
+
823
+ /**
824
+ * @method buffer
825
+ * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
826
+ * @memberof Md5
827
+ * @instance
828
+ * @description Output hash as ArrayBuffer
829
+ * @returns {ArrayBuffer} ArrayBuffer
830
+ * @see {@link md5.buffer}
831
+ * @example
832
+ * hash.buffer();
833
+ */
834
+ Md5.prototype.buffer = Md5.prototype.arrayBuffer;
835
+
836
+ /**
837
+ * @method base64
838
+ * @memberof Md5
839
+ * @instance
840
+ * @description Output hash as base64 string
841
+ * @returns {String} base64 string
842
+ * @see {@link md5.base64}
843
+ * @example
844
+ * hash.base64();
845
+ */
846
+ Md5.prototype.base64 = function () {
847
+ var v1,
848
+ v2,
849
+ v3,
850
+ base64Str = "",
851
+ bytes = this.array();
852
+ for (var i = 0; i < 15; ) {
853
+ v1 = bytes[i++];
854
+ v2 = bytes[i++];
855
+ v3 = bytes[i++];
856
+ base64Str +=
857
+ BASE64_ENCODE_CHAR[v1 >>> 2] +
858
+ BASE64_ENCODE_CHAR[((v1 << 4) | (v2 >>> 4)) & 63] +
859
+ BASE64_ENCODE_CHAR[((v2 << 2) | (v3 >>> 6)) & 63] +
860
+ BASE64_ENCODE_CHAR[v3 & 63];
861
+ }
862
+ v1 = bytes[i];
863
+ base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] + BASE64_ENCODE_CHAR[(v1 << 4) & 63] + "==";
864
+ return base64Str;
865
+ };
866
+
867
+ /**
868
+ * HmacMd5 class
869
+ * @class HmacMd5
870
+ * @extends Md5
871
+ * @description This is internal class.
872
+ * @see {@link md5.hmac.create}
873
+ */
874
+ function HmacMd5(key, sharedMemory) {
875
+ var i,
876
+ result = formatMessage(key);
877
+ key = result[0];
878
+ if (result[1]) {
879
+ var bytes = [],
880
+ length = key.length,
881
+ index = 0,
882
+ code;
883
+ for (i = 0; i < length; ++i) {
884
+ code = key.charCodeAt(i);
885
+ if (code < 0x80) {
886
+ bytes[index++] = code;
887
+ } else if (code < 0x800) {
888
+ bytes[index++] = 0xc0 | (code >>> 6);
889
+ bytes[index++] = 0x80 | (code & 0x3f);
890
+ } else if (code < 0xd800 || code >= 0xe000) {
891
+ bytes[index++] = 0xe0 | (code >>> 12);
892
+ bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);
893
+ bytes[index++] = 0x80 | (code & 0x3f);
894
+ } else {
895
+ code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));
896
+ bytes[index++] = 0xf0 | (code >>> 18);
897
+ bytes[index++] = 0x80 | ((code >>> 12) & 0x3f);
898
+ bytes[index++] = 0x80 | ((code >>> 6) & 0x3f);
899
+ bytes[index++] = 0x80 | (code & 0x3f);
900
+ }
901
+ }
902
+ key = bytes;
903
+ }
904
+
905
+ if (key.length > 64) {
906
+ key = new Md5(true).update(key).array();
907
+ }
908
+
909
+ var oKeyPad = [],
910
+ iKeyPad = [];
911
+ for (i = 0; i < 64; ++i) {
912
+ var b = key[i] || 0;
913
+ oKeyPad[i] = 0x5c ^ b;
914
+ iKeyPad[i] = 0x36 ^ b;
915
+ }
916
+
917
+ Md5.call(this, sharedMemory);
918
+
919
+ this.update(iKeyPad);
920
+ this.oKeyPad = oKeyPad;
921
+ this.inner = true;
922
+ this.sharedMemory = sharedMemory;
923
+ }
924
+
925
+ HmacMd5.prototype = new Md5();
926
+
927
+ HmacMd5.prototype.finalize = function () {
928
+ Md5.prototype.finalize.call(this);
929
+ if (this.inner) {
930
+ this.inner = false;
931
+ var innerHash = this.array();
932
+ Md5.call(this, this.sharedMemory);
933
+ this.update(this.oKeyPad);
934
+ this.update(innerHash);
935
+ Md5.prototype.finalize.call(this);
936
+ }
937
+ };
938
+
939
+ /* 以下是内部实现需要的es模块化导出方法 */
940
+ const md5 = createMethod();
941
+ const md5_hmac = createHmacMethod();
942
+
943
+ exports.md5 = md5;
944
+ exports.md5_hmac = md5_hmac;