tinyhmacmd5 0.0.3 → 0.0.4
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 +1 -1
- package/browser.min.js +1 -1
- package/main.js +72 -171
- package/package.json +5 -4
package/README.md
CHANGED
package/browser.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @license https://github.com/bddjr/tinyhmacmd5/blob/HEAD/LICENSE */
|
|
2
|
-
{let r="length",e=16,n=2**32,t=
|
|
2
|
+
{let r="length",e=16,n=2**32,t=Array,o=Math,a=o.floor,f=[(r,e,n)=>r&e|~r&n,(r,e,n)=>r&n|e&~n,(r,e,n)=>r^e^n,(r,e,n)=>e^(r|~n)],u=t(64),i=(i,l)=>{var d,s,v,c,g,h,y,w,A=0,b=1732584193,m=271733878,p=~b,x=~m,E=a((l+64)/512)*e+14,M=t(e),S=(r,e,t,a)=>0|((y=e+r+(y=E++*(7&3817>>3*h)+(7&328>>3*h)&15,h?M[y]:M[y]=0|i[A++])+(u[g++]??=0|n*o.abs(o.sin(g))))<<a|y>>>32-a)+t,T=(r,n,t,o)=>{for(w=f[h],E=0;E<e;)b=S(w(x,p,m),b,x,r),m=S(w(b,x,p),m,b,n),p=S(w(m,b,x),p,m,t),x=S(w(p,m,b),x,p,o);h++};for(i[a(l/32)]|=128<<l%32,i[E]=0|l,i[E+1]=0|l/n;A<i[r];m=0|m+c)d=b,s=x,v=p,c=m,g=h=0,T(7,12,17,22),T(5,9,14,20),T(4,11,e,23),T(6,10,15,21),b=0|b+d,x=0|x+s,p=0|p+v;return[b,x,p,m]},l=e=>{for(var n=e[r],t=[];n;)t[a(--n/4)]|=e[n]<<n%4*8;return t},d=r=>"string"==typeof r?(new TextEncoder).encode(r):r;var md5=(n,o,a)=>{var f,u=l(n=d(n)),s=8*n[r],v=e,c=new Uint8Array(e),g=r=>{for(u.unshift(...t(e));v;)u[--v]=r^f[v];v=e};for(null!=o&&((f=l(o=d(o)))[r]>e&&(f=i(f,8*o[r])),g(909522486),u=i(u,512+s),g(1549556828),s=640),u=i(u,s);v;)c[--v]=u[v>>2]>>>v%4*8;return a?c:c.reduce((r,n)=>r+(n>>4&&"")+n.toString(e),"")}}
|
package/main.js
CHANGED
|
@@ -8,102 +8,24 @@ let $length = "length"
|
|
|
8
8
|
/** @type {16} */
|
|
9
9
|
let $16 = 16
|
|
10
10
|
|
|
11
|
-
/** @type {number} */
|
|
12
11
|
let $2_32 = 2 ** 32
|
|
13
12
|
|
|
13
|
+
let $Array = Array
|
|
14
|
+
|
|
14
15
|
let $Math = Math
|
|
15
16
|
|
|
16
17
|
let floor = $Math.floor
|
|
17
18
|
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
let safeAdd = (x, y) => 0 | (0 | x) + (0 | y)
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Bitwise rotate a 32-bit number to the left.
|
|
29
|
-
*
|
|
30
|
-
* @param {number} num 32-bit number
|
|
31
|
-
* @param {number} cnt Rotation count
|
|
32
|
-
* @returns {number} Rotated number
|
|
33
|
-
*/
|
|
34
|
-
let bitRotateLeft = (num, cnt) => (num << cnt) | (num >>> (32 - cnt))
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Basic operation the algorithm uses.
|
|
38
|
-
*
|
|
39
|
-
* @param {number} q q
|
|
40
|
-
* @param {number} a a
|
|
41
|
-
* @param {number} b b
|
|
42
|
-
* @param {number} x x
|
|
43
|
-
* @param {number} s s
|
|
44
|
-
* @param {number} t t
|
|
45
|
-
* @returns {number} Result
|
|
46
|
-
*/
|
|
47
|
-
let md5cmn = (q, a, b, x, s, t) => safeAdd(bitRotateLeft(safeAdd(a, q) + safeAdd(x, t), s), b)
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Basic operation the algorithm uses.
|
|
51
|
-
*
|
|
52
|
-
* @param {number} a a
|
|
53
|
-
* @param {number} b b
|
|
54
|
-
* @param {number} c c
|
|
55
|
-
* @param {number} d d
|
|
56
|
-
* @param {number} x x
|
|
57
|
-
* @param {number} s s
|
|
58
|
-
* @param {number} t t
|
|
59
|
-
* @returns {number} Result
|
|
60
|
-
*/
|
|
61
|
-
let md5ff = (a, b, c, d, x, s, t) => md5cmn((b & c) | (~b & d), a, b, x, s, t)
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Basic operation the algorithm uses.
|
|
65
|
-
*
|
|
66
|
-
* @param {number} a a
|
|
67
|
-
* @param {number} b b
|
|
68
|
-
* @param {number} c c
|
|
69
|
-
* @param {number} d d
|
|
70
|
-
* @param {number} x x
|
|
71
|
-
* @param {number} s s
|
|
72
|
-
* @param {number} t t
|
|
73
|
-
* @returns {number} Result
|
|
74
|
-
*/
|
|
75
|
-
let md5gg = (a, b, c, d, x, s, t) => md5cmn((b & d) | (c & ~d), a, b, x, s, t)
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Basic operation the algorithm uses.
|
|
79
|
-
*
|
|
80
|
-
* @param {number} a a
|
|
81
|
-
* @param {number} b b
|
|
82
|
-
* @param {number} c c
|
|
83
|
-
* @param {number} d d
|
|
84
|
-
* @param {number} x x
|
|
85
|
-
* @param {number} s s
|
|
86
|
-
* @param {number} t t
|
|
87
|
-
* @returns {number} Result
|
|
88
|
-
*/
|
|
89
|
-
let md5hh = (a, b, c, d, x, s, t) => md5cmn(b ^ c ^ d, a, b, x, s, t)
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Basic operation the algorithm uses.
|
|
93
|
-
*
|
|
94
|
-
* @param {number} a a
|
|
95
|
-
* @param {number} b b
|
|
96
|
-
* @param {number} c c
|
|
97
|
-
* @param {number} d d
|
|
98
|
-
* @param {number} x x
|
|
99
|
-
* @param {number} s s
|
|
100
|
-
* @param {number} t t
|
|
101
|
-
* @returns {number} Result
|
|
102
|
-
*/
|
|
103
|
-
let md5ii = (a, b, c, d, x, s, t) => md5cmn(c ^ (b | ~d), a, b, x, s, t)
|
|
19
|
+
/** @type {((b:number, c:number, d:number) => number)[]} */
|
|
20
|
+
let ff = [
|
|
21
|
+
(b, c, d) => b & c | ~b & d,
|
|
22
|
+
(b, c, d) => b & d | c & ~d,
|
|
23
|
+
(b, c, d) => b ^ c ^ d,
|
|
24
|
+
(b, c, d) => c ^ (b | ~d)
|
|
25
|
+
]
|
|
104
26
|
|
|
105
27
|
/** @type {number[]} MD5 constants cached in memory */
|
|
106
|
-
let K =
|
|
28
|
+
let K = $Array(64)
|
|
107
29
|
|
|
108
30
|
/**
|
|
109
31
|
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
|
@@ -122,100 +44,79 @@ let binlMD5 = (x, bitLen) => {
|
|
|
122
44
|
, d = 271733878
|
|
123
45
|
, c = ~a
|
|
124
46
|
, b = ~d
|
|
125
|
-
,
|
|
47
|
+
, j = floor((bitLen + 64) / 512) * $16 + 14
|
|
48
|
+
|
|
126
49
|
/** @type {number} */
|
|
127
50
|
var k_i
|
|
128
|
-
|
|
51
|
+
|
|
52
|
+
/** @type {number} */
|
|
53
|
+
var ff_i
|
|
54
|
+
|
|
55
|
+
/** @type {number} */
|
|
56
|
+
var cmn_t
|
|
57
|
+
|
|
58
|
+
/** @type {number[]} */
|
|
59
|
+
var w = $Array($16)
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @param {number} q
|
|
63
|
+
* @param {number} a
|
|
64
|
+
* @param {number} b
|
|
65
|
+
* @param {number} s
|
|
66
|
+
* @returns {number}
|
|
67
|
+
*/
|
|
68
|
+
var cmn = (q, a, b, s) => (
|
|
69
|
+
cmn_t = (
|
|
70
|
+
a + q +
|
|
71
|
+
(
|
|
72
|
+
cmn_t = j++ * (7 & 0o7351 >> ff_i * 3) + (7 & 0o0510 >> ff_i * 3) & 15,
|
|
73
|
+
ff_i ? w[cmn_t] : w[cmn_t] = 0 | x[i++]
|
|
74
|
+
) +
|
|
75
|
+
(K[k_i++] ??= 0 | $2_32 * $Math.abs($Math.sin(k_i)))
|
|
76
|
+
),
|
|
77
|
+
0 | (cmn_t << s | cmn_t >>> 32 - s) + b
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
/** @type {typeof ff[0]} */
|
|
81
|
+
var F_f
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @param {number} s0
|
|
85
|
+
* @param {number} s1
|
|
86
|
+
* @param {number} s2
|
|
87
|
+
* @param {number} s3
|
|
88
|
+
*/
|
|
89
|
+
var F = (s0, s1, s2, s3) => {
|
|
90
|
+
for (F_f = ff[ff_i], j = 0; j < $16;) {
|
|
91
|
+
a = cmn(F_f(b, c, d), a, b, s0)
|
|
92
|
+
d = cmn(F_f(a, b, c), d, a, s1)
|
|
93
|
+
c = cmn(F_f(d, a, b), c, d, s2)
|
|
94
|
+
b = cmn(F_f(c, d, a), b, c, s3)
|
|
95
|
+
}
|
|
96
|
+
ff_i++
|
|
97
|
+
}
|
|
129
98
|
|
|
130
99
|
// append padding
|
|
131
100
|
x[floor(bitLen / 32)] |= 0x80 << bitLen % 32;
|
|
132
|
-
x[
|
|
133
|
-
x[
|
|
134
|
-
|
|
135
|
-
for (; i < x[$length]; d = safeAdd(d, oldd)) {
|
|
136
|
-
let [
|
|
137
|
-
x0, x1, x2, x3, x4, x5, x6, x7,
|
|
138
|
-
x8, x9, x10, x11, x12, x13, x14, x15
|
|
139
|
-
] = x.slice(i, i += $16)
|
|
101
|
+
x[j] = 0 | bitLen;
|
|
102
|
+
x[j + 1] = 0 | bitLen / $2_32;
|
|
140
103
|
|
|
104
|
+
for (; i < x[$length]; d = 0 | d + oldd) {
|
|
141
105
|
olda = a
|
|
142
106
|
oldb = b
|
|
143
107
|
oldc = c
|
|
144
108
|
oldd = d
|
|
145
109
|
|
|
146
|
-
k_i = 0
|
|
147
|
-
|
|
148
|
-
a = md5ff(a, b, c, d, x0, 7, k())
|
|
149
|
-
d = md5ff(d, a, b, c, x1, 12, k())
|
|
150
|
-
c = md5ff(c, d, a, b, x2, 17, k())
|
|
151
|
-
b = md5ff(b, c, d, a, x3, 22, k())
|
|
152
|
-
a = md5ff(a, b, c, d, x4, 7, k())
|
|
153
|
-
d = md5ff(d, a, b, c, x5, 12, k())
|
|
154
|
-
c = md5ff(c, d, a, b, x6, 17, k())
|
|
155
|
-
b = md5ff(b, c, d, a, x7, 22, k())
|
|
156
|
-
a = md5ff(a, b, c, d, x8, 7, k())
|
|
157
|
-
d = md5ff(d, a, b, c, x9, 12, k())
|
|
158
|
-
c = md5ff(c, d, a, b, x10, 17, k())
|
|
159
|
-
b = md5ff(b, c, d, a, x11, 22, k())
|
|
160
|
-
a = md5ff(a, b, c, d, x12, 7, k())
|
|
161
|
-
d = md5ff(d, a, b, c, x13, 12, k())
|
|
162
|
-
c = md5ff(c, d, a, b, x14, 17, k())
|
|
163
|
-
b = md5ff(b, c, d, a, x15, 22, k())
|
|
164
|
-
|
|
165
|
-
a = md5gg(a, b, c, d, x1, 5, k())
|
|
166
|
-
d = md5gg(d, a, b, c, x6, 9, k())
|
|
167
|
-
c = md5gg(c, d, a, b, x11, 14, k())
|
|
168
|
-
b = md5gg(b, c, d, a, x0, 20, k())
|
|
169
|
-
a = md5gg(a, b, c, d, x5, 5, k())
|
|
170
|
-
d = md5gg(d, a, b, c, x10, 9, k())
|
|
171
|
-
c = md5gg(c, d, a, b, x15, 14, k())
|
|
172
|
-
b = md5gg(b, c, d, a, x4, 20, k())
|
|
173
|
-
a = md5gg(a, b, c, d, x9, 5, k())
|
|
174
|
-
d = md5gg(d, a, b, c, x14, 9, k())
|
|
175
|
-
c = md5gg(c, d, a, b, x3, 14, k())
|
|
176
|
-
b = md5gg(b, c, d, a, x8, 20, k())
|
|
177
|
-
a = md5gg(a, b, c, d, x13, 5, k())
|
|
178
|
-
d = md5gg(d, a, b, c, x2, 9, k())
|
|
179
|
-
c = md5gg(c, d, a, b, x7, 14, k())
|
|
180
|
-
b = md5gg(b, c, d, a, x12, 20, k())
|
|
181
|
-
|
|
182
|
-
a = md5hh(a, b, c, d, x5, 4, k())
|
|
183
|
-
d = md5hh(d, a, b, c, x8, 11, k())
|
|
184
|
-
c = md5hh(c, d, a, b, x11, $16, k())
|
|
185
|
-
b = md5hh(b, c, d, a, x14, 23, k())
|
|
186
|
-
a = md5hh(a, b, c, d, x1, 4, k())
|
|
187
|
-
d = md5hh(d, a, b, c, x4, 11, k())
|
|
188
|
-
c = md5hh(c, d, a, b, x7, $16, k())
|
|
189
|
-
b = md5hh(b, c, d, a, x10, 23, k())
|
|
190
|
-
a = md5hh(a, b, c, d, x13, 4, k())
|
|
191
|
-
d = md5hh(d, a, b, c, x0, 11, k())
|
|
192
|
-
c = md5hh(c, d, a, b, x3, $16, k())
|
|
193
|
-
b = md5hh(b, c, d, a, x6, 23, k())
|
|
194
|
-
a = md5hh(a, b, c, d, x9, 4, k())
|
|
195
|
-
d = md5hh(d, a, b, c, x12, 11, k())
|
|
196
|
-
c = md5hh(c, d, a, b, x15, $16, k())
|
|
197
|
-
b = md5hh(b, c, d, a, x2, 23, k())
|
|
110
|
+
k_i = ff_i = 0
|
|
198
111
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
a = md5ii(a, b, c, d, x12, 6, k())
|
|
204
|
-
d = md5ii(d, a, b, c, x3, 10, k())
|
|
205
|
-
c = md5ii(c, d, a, b, x10, 15, k())
|
|
206
|
-
b = md5ii(b, c, d, a, x1, 21, k())
|
|
207
|
-
a = md5ii(a, b, c, d, x8, 6, k())
|
|
208
|
-
d = md5ii(d, a, b, c, x15, 10, k())
|
|
209
|
-
c = md5ii(c, d, a, b, x6, 15, k())
|
|
210
|
-
b = md5ii(b, c, d, a, x13, 21, k())
|
|
211
|
-
a = md5ii(a, b, c, d, x4, 6, k())
|
|
212
|
-
d = md5ii(d, a, b, c, x11, 10, k())
|
|
213
|
-
c = md5ii(c, d, a, b, x2, 15, k())
|
|
214
|
-
b = md5ii(b, c, d, a, x9, 21, k())
|
|
112
|
+
F(7, 12, 17, 22)
|
|
113
|
+
F(5, 9, 14, 20)
|
|
114
|
+
F(4, 11, $16, 23)
|
|
115
|
+
F(6, 10, 15, 21)
|
|
215
116
|
|
|
216
|
-
a =
|
|
217
|
-
b =
|
|
218
|
-
c =
|
|
117
|
+
a = 0 | a + olda
|
|
118
|
+
b = 0 | b + oldb
|
|
119
|
+
c = 0 | c + oldc
|
|
219
120
|
}
|
|
220
121
|
return [a, b, c, d]
|
|
221
122
|
}
|
|
@@ -279,8 +180,9 @@ var md5 = (data, key, raw) => {
|
|
|
279
180
|
/** @type {*} */
|
|
280
181
|
var bkey
|
|
281
182
|
, pad = (/**@type {number}*/ x) => {
|
|
183
|
+
bdata.unshift(...$Array($16))
|
|
282
184
|
for (; i;) {
|
|
283
|
-
bdata
|
|
185
|
+
bdata[--i] = x ^ bkey[i]
|
|
284
186
|
}
|
|
285
187
|
i = $16
|
|
286
188
|
}
|
|
@@ -307,7 +209,6 @@ var md5 = (data, key, raw) => {
|
|
|
307
209
|
return raw
|
|
308
210
|
? out
|
|
309
211
|
: out.reduce((p, v) => p + (v >> 4 && '') + v.toString($16), '')
|
|
310
|
-
// : out.toHex()
|
|
311
212
|
}
|
|
312
213
|
|
|
313
214
|
export default md5
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tinyhmacmd5",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only
|
|
3
|
+
"version": "0.0.4",
|
|
4
|
+
"description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 1160 bytes.",
|
|
5
5
|
"author": "bddjr",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -29,11 +29,12 @@
|
|
|
29
29
|
"url": "git+https://github.com/bddjr/tinyhmacmd5.git"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
+
"es-check": "^9.6.4",
|
|
32
33
|
"terser": "^5.49.0",
|
|
33
34
|
"tinyhmacmd5": "link:"
|
|
34
35
|
},
|
|
35
36
|
"scripts": {
|
|
36
|
-
"build": "node scripts/build.mjs",
|
|
37
|
-
"test": "
|
|
37
|
+
"build": "node scripts/build.mjs && es-check es2021 --module --checkFeatures main.js browser.min.js",
|
|
38
|
+
"test": "pnpm build && node scripts/test.mjs"
|
|
38
39
|
}
|
|
39
40
|
}
|