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