@ivujs/i-utils 2.0.0 → 2.1.0
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.
- package/README.md +40 -42
- package/dist/cjs/ID-card/index.cjs +21 -13
- package/dist/cjs/array/index.cjs +40 -34
- package/dist/cjs/clipboard/index.cjs +14 -10
- package/dist/cjs/color/index.cjs +73 -59
- package/dist/cjs/cookie/index.cjs +16 -13
- package/dist/cjs/crypto/base64/base64.cjs +398 -206
- package/dist/cjs/crypto/base64/index.cjs +58 -35
- package/dist/cjs/crypto/md5/index.cjs +33 -8
- package/dist/cjs/crypto/md5/md5.cjs +298 -844
- package/dist/cjs/crypto/sha256/index.cjs +95 -0
- package/dist/cjs/crypto/sha256/sha256.cjs +557 -0
- package/dist/cjs/crypto/sm3/index.cjs +27 -0
- package/dist/cjs/crypto/sm3/sm3.cjs +200 -0
- package/dist/cjs/crypto/sm4/index.cjs +101 -0
- package/dist/cjs/crypto/sm4/sm4.cjs +498 -0
- package/dist/cjs/date/index.cjs +379 -335
- package/dist/cjs/desensitized/index.cjs +21 -18
- package/dist/cjs/device/index.cjs +33 -30
- package/dist/cjs/dom/index.cjs +26 -23
- package/dist/cjs/file/index.cjs +51 -41
- package/dist/cjs/function/index.cjs +22 -19
- package/dist/cjs/id/index.cjs +6 -2
- package/dist/cjs/index.cjs +108 -127
- package/dist/cjs/keycode/index.cjs +9 -12
- package/dist/cjs/math/index.cjs +113 -81
- package/dist/cjs/number/index.cjs +10 -7
- package/dist/cjs/object/index.cjs +77 -30
- package/dist/cjs/pagination/index.cjs +25 -10
- package/dist/cjs/random/index.cjs +8 -5
- package/dist/cjs/regexp/index.cjs +23 -20
- package/dist/cjs/storage/index.cjs +4 -1
- package/dist/cjs/storage/localStorage.cjs +5 -5
- package/dist/cjs/storage/sessionStorage.cjs +6 -6
- package/dist/cjs/string/index.cjs +66 -63
- package/dist/cjs/url/index.cjs +83 -80
- package/dist/cjs/validate/index.cjs +122 -106
- package/dist/es/ID-card/index.d.ts +19 -14
- package/dist/es/ID-card/index.mjs +22 -14
- package/dist/es/array/index.d.ts +56 -50
- package/dist/es/array/index.mjs +40 -34
- package/dist/es/clipboard/index.d.ts +10 -7
- package/dist/es/clipboard/index.mjs +14 -10
- package/dist/es/color/index.d.ts +28 -25
- package/dist/es/color/index.mjs +73 -59
- package/dist/es/constants/date.d.ts +4 -174
- package/dist/es/constants/id-card.d.ts +4 -43
- package/dist/es/constants/index.d.ts +11 -7
- package/dist/es/constants/keycode.d.ts +1 -103
- package/dist/es/constants/lang.d.ts +4 -4
- package/dist/es/constants/math.d.ts +4 -4
- package/dist/es/constants/regexp.d.ts +4 -24
- package/dist/es/constants/sort.d.ts +4 -5
- package/dist/es/cookie/index.d.ts +13 -13
- package/dist/es/cookie/index.mjs +16 -13
- package/dist/es/crypto/base64/base64.d.ts +8 -5
- package/dist/es/crypto/base64/base64.mjs +393 -204
- package/dist/es/crypto/base64/index.d.ts +41 -24
- package/dist/es/crypto/base64/index.mjs +53 -32
- package/dist/es/crypto/index.d.ts +8 -8
- package/dist/es/crypto/md5/index.d.ts +20 -7
- package/dist/es/crypto/md5/index.mjs +32 -9
- package/dist/es/crypto/md5/md5.d.ts +9 -142
- package/dist/es/crypto/md5/md5.mjs +299 -844
- package/dist/es/crypto/sha256/index.d.ts +52 -0
- package/dist/es/crypto/sha256/index.mjs +86 -0
- package/dist/es/crypto/sha256/sha256.d.ts +82 -0
- package/dist/es/crypto/sha256/sha256.mjs +548 -0
- package/dist/es/crypto/sm3/index.d.ts +13 -0
- package/dist/es/crypto/sm3/index.mjs +24 -0
- package/dist/es/crypto/sm3/sm3.d.ts +3 -0
- package/dist/es/crypto/sm3/sm3.mjs +197 -0
- package/dist/es/crypto/sm4/index.d.ts +56 -0
- package/dist/es/crypto/sm4/index.mjs +95 -0
- package/dist/es/crypto/sm4/sm4.d.ts +48 -0
- package/dist/es/crypto/sm4/sm4.mjs +490 -0
- package/dist/es/date/index.d.ts +236 -175
- package/dist/es/date/index.mjs +378 -335
- package/dist/es/desensitized/index.d.ts +26 -23
- package/dist/es/desensitized/index.mjs +21 -18
- package/dist/es/device/index.d.ts +31 -25
- package/dist/es/device/index.mjs +33 -30
- package/dist/es/dom/index.d.ts +32 -29
- package/dist/es/dom/index.mjs +26 -23
- package/dist/es/file/index.d.ts +30 -30
- package/dist/es/file/index.mjs +51 -41
- package/dist/es/function/index.d.ts +10 -7
- package/dist/es/function/index.mjs +22 -19
- package/dist/es/id/index.d.ts +3 -0
- package/dist/es/id/index.mjs +6 -2
- package/dist/es/index.d.ts +24 -25
- package/dist/es/index.mjs +6 -23
- package/dist/es/keycode/index.d.ts +6 -6
- package/dist/es/keycode/index.mjs +9 -12
- package/dist/es/math/index.d.ts +37 -37
- package/dist/es/math/index.mjs +113 -81
- package/dist/es/number/index.d.ts +7 -7
- package/dist/es/number/index.mjs +10 -7
- package/dist/es/object/index.d.ts +20 -19
- package/dist/es/object/index.mjs +77 -30
- package/dist/es/pagination/index.d.ts +39 -6
- package/dist/es/pagination/index.mjs +25 -10
- package/dist/es/random/index.d.ts +10 -7
- package/dist/es/random/index.mjs +8 -5
- package/dist/es/regexp/index.d.ts +30 -30
- package/dist/es/regexp/index.mjs +23 -20
- package/dist/es/storage/index.d.ts +10 -4
- package/dist/es/storage/index.mjs +4 -1
- package/dist/es/storage/localStorage.d.ts +9 -9
- package/dist/es/storage/localStorage.mjs +5 -5
- package/dist/es/storage/sessionStorage.d.ts +9 -9
- package/dist/es/storage/sessionStorage.mjs +6 -6
- package/dist/es/string/index.d.ts +62 -59
- package/dist/es/string/index.mjs +66 -63
- package/dist/es/url/index.d.ts +65 -65
- package/dist/es/url/index.mjs +83 -80
- package/dist/es/validate/index.d.ts +83 -80
- package/dist/es/validate/index.mjs +122 -106
- package/dist/index.d.ts +2355 -2803
- package/dist/lib/index.full.umd.js +3297 -9474
- package/dist/lib/index.full.umd.min.js +2 -64
- package/dist/lib/index.full.umd.min.js.map +1 -1
- package/dist/resolver/auto-imports.cjs +38 -31
- package/dist/resolver/auto-imports.mjs +38 -31
- package/dist/resolver/index.cjs +1 -2
- package/dist/resolver/index.d.ts +1 -1
- package/dist/resolver/index.mjs +1 -2
- package/package.json +96 -90
- package/dist/cjs/crypto/aes/aes.cjs +0 -480
- package/dist/cjs/crypto/aes/index.cjs +0 -27
- package/dist/cjs/crypto/base32/base32.cjs +0 -357
- package/dist/cjs/crypto/base32/index.cjs +0 -41
- package/dist/cjs/crypto/des/des.cjs +0 -257
- package/dist/cjs/crypto/des/index.cjs +0 -28
- package/dist/cjs/crypto/sha/sha1/index.cjs +0 -24
- package/dist/cjs/crypto/sha/sha1/sha1.cjs +0 -529
- package/dist/cjs/crypto/sha/sha256/index.cjs +0 -43
- package/dist/cjs/crypto/sha/sha256/sha256.cjs +0 -595
- package/dist/cjs/crypto/sha/sha3/index.cjs +0 -41
- package/dist/cjs/crypto/sha/sha3/sha3.cjs +0 -624
- package/dist/cjs/crypto/sha/sha512/index.cjs +0 -81
- package/dist/cjs/crypto/sha/sha512/sha512.cjs +0 -950
- package/dist/cjs/crypto/sm/lib/asn1.cjs +0 -149
- package/dist/cjs/crypto/sm/lib/ec.cjs +0 -315
- package/dist/cjs/crypto/sm/lib/jsbn.cjs +0 -1608
- package/dist/cjs/crypto/sm/lib/sm3.cjs +0 -158
- package/dist/cjs/crypto/sm/lib/utils.cjs +0 -170
- package/dist/cjs/crypto/sm/sm2/index.cjs +0 -112
- package/dist/cjs/crypto/sm/sm2/sm2.cjs +0 -231
- package/dist/cjs/crypto/sm/sm3/index.cjs +0 -15
- package/dist/cjs/crypto/sm/sm3/sm3.cjs +0 -93
- package/dist/cjs/crypto/sm/sm4/index.cjs +0 -27
- package/dist/cjs/crypto/sm/sm4/sm4.cjs +0 -327
- package/dist/cjs/crypto/tea/index.cjs +0 -25
- package/dist/cjs/crypto/tea/tea.cjs +0 -187
- package/dist/cjs/weapp/index.cjs +0 -142
- package/dist/es/crypto/aes/aes.d.ts +0 -156
- package/dist/es/crypto/aes/aes.mjs +0 -478
- package/dist/es/crypto/aes/index.d.ts +0 -16
- package/dist/es/crypto/aes/index.mjs +0 -24
- package/dist/es/crypto/base32/base32.d.ts +0 -3
- package/dist/es/crypto/base32/base32.mjs +0 -353
- package/dist/es/crypto/base32/index.d.ts +0 -24
- package/dist/es/crypto/base32/index.mjs +0 -36
- package/dist/es/crypto/des/des.d.ts +0 -52
- package/dist/es/crypto/des/des.mjs +0 -255
- package/dist/es/crypto/des/index.d.ts +0 -14
- package/dist/es/crypto/des/index.mjs +0 -25
- package/dist/es/crypto/sha/index.d.ts +0 -4
- package/dist/es/crypto/sha/sha1/index.d.ts +0 -13
- package/dist/es/crypto/sha/sha1/index.mjs +0 -21
- package/dist/es/crypto/sha/sha1/sha1.d.ts +0 -2
- package/dist/es/crypto/sha/sha1/sha1.mjs +0 -526
- package/dist/es/crypto/sha/sha256/index.d.ts +0 -26
- package/dist/es/crypto/sha/sha256/index.mjs +0 -38
- package/dist/es/crypto/sha/sha256/sha256.d.ts +0 -4
- package/dist/es/crypto/sha/sha256/sha256.mjs +0 -590
- package/dist/es/crypto/sha/sha3/index.d.ts +0 -24
- package/dist/es/crypto/sha/sha3/index.mjs +0 -36
- package/dist/es/crypto/sha/sha3/sha3.d.ts +0 -4
- package/dist/es/crypto/sha/sha3/sha3.mjs +0 -619
- package/dist/es/crypto/sha/sha512/index.d.ts +0 -52
- package/dist/es/crypto/sha/sha512/index.mjs +0 -72
- package/dist/es/crypto/sha/sha512/sha512.d.ts +0 -8
- package/dist/es/crypto/sha/sha512/sha512.mjs +0 -941
- package/dist/es/crypto/sm/index.d.ts +0 -3
- package/dist/es/crypto/sm/lib/asn1.d.ts +0 -12
- package/dist/es/crypto/sm/lib/asn1.mjs +0 -146
- package/dist/es/crypto/sm/lib/ec.d.ts +0 -126
- package/dist/es/crypto/sm/lib/ec.mjs +0 -312
- package/dist/es/crypto/sm/lib/jsbn.d.ts +0 -198
- package/dist/es/crypto/sm/lib/jsbn.mjs +0 -1605
- package/dist/es/crypto/sm/lib/sm3.d.ts +0 -5
- package/dist/es/crypto/sm/lib/sm3.mjs +0 -155
- package/dist/es/crypto/sm/lib/utils.d.ts +0 -53
- package/dist/es/crypto/sm/lib/utils.mjs +0 -158
- package/dist/es/crypto/sm/sm2/index.d.ts +0 -71
- package/dist/es/crypto/sm/sm2/index.mjs +0 -101
- package/dist/es/crypto/sm/sm2/sm2.d.ts +0 -34
- package/dist/es/crypto/sm/sm2/sm2.mjs +0 -220
- package/dist/es/crypto/sm/sm3/index.d.ts +0 -7
- package/dist/es/crypto/sm/sm3/index.mjs +0 -13
- package/dist/es/crypto/sm/sm3/sm3.d.ts +0 -1
- package/dist/es/crypto/sm/sm3/sm3.mjs +0 -91
- package/dist/es/crypto/sm/sm4/index.d.ts +0 -16
- package/dist/es/crypto/sm/sm4/index.mjs +0 -24
- package/dist/es/crypto/sm/sm4/sm4.d.ts +0 -2
- package/dist/es/crypto/sm/sm4/sm4.mjs +0 -324
- package/dist/es/crypto/tea/index.d.ts +0 -14
- package/dist/es/crypto/tea/index.mjs +0 -22
- package/dist/es/crypto/tea/tea.d.ts +0 -69
- package/dist/es/crypto/tea/tea.mjs +0 -185
- package/dist/es/weapp/index.d.ts +0 -57
- package/dist/es/weapp/index.mjs +0 -131
|
@@ -1,894 +1,349 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Add integers, wrapping at 2^32.
|
|
3
|
+
* This uses 16-bit operations internally to work around bugs in interpreters.
|
|
3
4
|
*
|
|
4
|
-
* @
|
|
5
|
-
* @
|
|
6
|
-
* @
|
|
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
|
-
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
|
|
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
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* @
|
|
70
|
-
* @param {
|
|
71
|
-
* @returns {
|
|
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
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* @
|
|
90
|
-
* @param {
|
|
91
|
-
* @
|
|
92
|
-
* @
|
|
93
|
-
*
|
|
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
|
-
*
|
|
97
|
-
*
|
|
98
|
-
* @
|
|
99
|
-
* @param {
|
|
100
|
-
* @
|
|
101
|
-
* @
|
|
102
|
-
*
|
|
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
|
-
*
|
|
106
|
-
*
|
|
107
|
-
* @
|
|
108
|
-
* @
|
|
109
|
-
* @param {
|
|
110
|
-
* @
|
|
111
|
-
* @
|
|
112
|
-
*
|
|
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
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* @
|
|
118
|
-
* @param {
|
|
119
|
-
* @
|
|
120
|
-
* @
|
|
121
|
-
*
|
|
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
|
-
|
|
124
|
-
return
|
|
125
|
-
|
|
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
|
-
*
|
|
130
|
-
*
|
|
131
|
-
* @
|
|
132
|
-
* @
|
|
133
|
-
* @
|
|
134
|
-
*
|
|
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
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* @
|
|
140
|
-
* @param {
|
|
141
|
-
* @returns {
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
173
|
-
|
|
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
|
-
*
|
|
280
|
-
*
|
|
281
|
-
* @
|
|
282
|
-
* @
|
|
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
|
-
|
|
292
|
-
var
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
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
|
|
304
|
-
}
|
|
207
|
+
return output;
|
|
208
|
+
}
|
|
305
209
|
/**
|
|
306
|
-
*
|
|
307
|
-
*
|
|
308
|
-
*
|
|
309
|
-
* @
|
|
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
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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
|
-
|
|
345
|
-
this.finalized = this.hashed = false;
|
|
346
|
-
this.first = true;
|
|
227
|
+
return output;
|
|
347
228
|
}
|
|
348
229
|
/**
|
|
349
|
-
*
|
|
350
|
-
*
|
|
351
|
-
* @
|
|
352
|
-
* @
|
|
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
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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
|
-
*
|
|
671
|
-
*
|
|
672
|
-
* @
|
|
673
|
-
* @
|
|
674
|
-
* @returns {
|
|
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
|
-
|
|
680
|
-
|
|
681
|
-
var
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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
|
-
*
|
|
717
|
-
*
|
|
718
|
-
* @
|
|
719
|
-
* @
|
|
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
|
-
|
|
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
|
-
*
|
|
728
|
-
*
|
|
729
|
-
* @
|
|
730
|
-
* @
|
|
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
|
-
|
|
737
|
-
|
|
738
|
-
|
|
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
|
-
*
|
|
760
|
-
*
|
|
761
|
-
* @
|
|
762
|
-
* @
|
|
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
|
-
|
|
294
|
+
function rawMD5(s) {
|
|
295
|
+
return rstrMD5(str2rstrUTF8(s));
|
|
296
|
+
}
|
|
769
297
|
/**
|
|
770
|
-
*
|
|
771
|
-
*
|
|
772
|
-
* @
|
|
773
|
-
* @
|
|
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
|
-
|
|
780
|
-
|
|
781
|
-
|
|
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
|
-
*
|
|
791
|
-
*
|
|
792
|
-
* @
|
|
793
|
-
* @
|
|
794
|
-
* @
|
|
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
|
-
|
|
313
|
+
function rawHMACMD5(k, d) {
|
|
314
|
+
return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));
|
|
315
|
+
}
|
|
801
316
|
/**
|
|
802
|
-
*
|
|
803
|
-
*
|
|
804
|
-
* @
|
|
805
|
-
* @
|
|
806
|
-
* @returns {
|
|
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
|
-
|
|
812
|
-
|
|
813
|
-
|
|
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
|
-
*
|
|
829
|
-
*
|
|
830
|
-
*
|
|
831
|
-
*
|
|
832
|
-
* @
|
|
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
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
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
|
-
|
|
341
|
+
return rawMD5(string);
|
|
862
342
|
}
|
|
863
|
-
if (
|
|
864
|
-
|
|
343
|
+
if (!raw) {
|
|
344
|
+
return hexHMACMD5(key, string);
|
|
865
345
|
}
|
|
866
|
-
|
|
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
|
|
349
|
+
export { md5 };
|