@ivujs/i-utils 1.1.14 → 1.1.16

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