tinyhmacmd5 0.0.2 → 0.0.3
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 +4 -4
- package/browser.min.js +1 -1
- package/main.js +101 -81
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A tiny JavaScript HMAC-MD5 implementation.
|
|
4
4
|
|
|
5
|
-
The minified browser bundle ([`browser.min.js`](browser.min.js)) is only
|
|
5
|
+
The minified browser bundle ([`browser.min.js`](browser.min.js)) is only 2471 bytes.
|
|
6
6
|
|
|
7
7
|
## Setup
|
|
8
8
|
|
|
@@ -32,12 +32,12 @@ HMAC-MD5:
|
|
|
32
32
|
|
|
33
33
|
```js
|
|
34
34
|
// string to hex
|
|
35
|
-
// returns "
|
|
36
|
-
md5("Hello world!👋", "
|
|
35
|
+
// returns "c87fdc912df24da05a6e3fed927e9d89"
|
|
36
|
+
md5("Hello world!👋", "HMAC key 🔑")
|
|
37
37
|
|
|
38
38
|
// string to bytes
|
|
39
39
|
// returns Uint8Array<ArrayBuffer>
|
|
40
|
-
md5("Hello world!👋", "
|
|
40
|
+
md5("Hello world!👋", "HMAC key 🔑", true)
|
|
41
41
|
|
|
42
42
|
// bytes to hex
|
|
43
43
|
// returns "f881235eccf71ab49b937753a72ac673"
|
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,t=Math.floor,
|
|
2
|
+
{let r="length",e=16,n=2**32,t=Math,o=t.floor,a=(r,e)=>0|(0|r)+(0|e),f=(r,e)=>r<<e|r>>>32-e,l=(r,e,n,t,o,l)=>a(f(a(e,r)+a(t,l),o),n),i=(r,e,n,t,o,a,f)=>l(e&n|~e&t,r,e,o,a,f),u=(r,e,n,t,o,a,f)=>l(e&t|n&~t,r,e,o,a,f),s=(r,e,n,t,o,a,f)=>l(e^n^t,r,e,o,a,f),c=(r,e,n,t,o,a,f)=>l(n^(e|~t),r,e,o,a,f),d=[],v=(f,l)=>{var v,g,h,w,y,b=0,m=1732584193,p=271733878,x=~m,A=~p,E=o((l+64)/512)*e+14,M=r=>d[y++]??=0|n*t.abs(t.sin(y));for(f[o(l/32)]|=128<<l%32,f[E]=0|l,f[E+1]=0|l/n;b<f[r];p=a(p,w)){let[r,n,t,o,l,d,E,S,T,U,j,k,q,z,B,C]=f.slice(b,b+=e);v=m,g=A,h=x,w=p,y=0,m=i(m,A,x,p,r,7,M()),p=i(p,m,A,x,n,12,M()),x=i(x,p,m,A,t,17,M()),A=i(A,x,p,m,o,22,M()),m=i(m,A,x,p,l,7,M()),p=i(p,m,A,x,d,12,M()),x=i(x,p,m,A,E,17,M()),A=i(A,x,p,m,S,22,M()),m=i(m,A,x,p,T,7,M()),p=i(p,m,A,x,U,12,M()),x=i(x,p,m,A,j,17,M()),A=i(A,x,p,m,k,22,M()),m=i(m,A,x,p,q,7,M()),p=i(p,m,A,x,z,12,M()),x=i(x,p,m,A,B,17,M()),A=i(A,x,p,m,C,22,M()),m=u(m,A,x,p,n,5,M()),p=u(p,m,A,x,E,9,M()),x=u(x,p,m,A,k,14,M()),A=u(A,x,p,m,r,20,M()),m=u(m,A,x,p,d,5,M()),p=u(p,m,A,x,j,9,M()),x=u(x,p,m,A,C,14,M()),A=u(A,x,p,m,l,20,M()),m=u(m,A,x,p,U,5,M()),p=u(p,m,A,x,B,9,M()),x=u(x,p,m,A,o,14,M()),A=u(A,x,p,m,T,20,M()),m=u(m,A,x,p,z,5,M()),p=u(p,m,A,x,t,9,M()),x=u(x,p,m,A,S,14,M()),A=u(A,x,p,m,q,20,M()),m=s(m,A,x,p,d,4,M()),p=s(p,m,A,x,T,11,M()),x=s(x,p,m,A,k,e,M()),A=s(A,x,p,m,B,23,M()),m=s(m,A,x,p,n,4,M()),p=s(p,m,A,x,l,11,M()),x=s(x,p,m,A,S,e,M()),A=s(A,x,p,m,j,23,M()),m=s(m,A,x,p,z,4,M()),p=s(p,m,A,x,r,11,M()),x=s(x,p,m,A,o,e,M()),A=s(A,x,p,m,E,23,M()),m=s(m,A,x,p,U,4,M()),p=s(p,m,A,x,q,11,M()),x=s(x,p,m,A,C,e,M()),A=s(A,x,p,m,t,23,M()),m=c(m,A,x,p,r,6,M()),p=c(p,m,A,x,S,10,M()),x=c(x,p,m,A,B,15,M()),A=c(A,x,p,m,d,21,M()),m=c(m,A,x,p,q,6,M()),p=c(p,m,A,x,o,10,M()),x=c(x,p,m,A,j,15,M()),A=c(A,x,p,m,n,21,M()),m=c(m,A,x,p,T,6,M()),p=c(p,m,A,x,C,10,M()),x=c(x,p,m,A,E,15,M()),A=c(A,x,p,m,z,21,M()),m=c(m,A,x,p,l,6,M()),p=c(p,m,A,x,k,10,M()),x=c(x,p,m,A,t,15,M()),A=c(A,x,p,m,U,21,M()),m=a(m,v),A=a(A,g),x=a(x,h)}return[m,A,x,p]},g=e=>{for(var n=e[r],t=[];n;)t[o(--n/4)]|=e[n]<<n%4*8;return t},h=r=>"string"==typeof r?(new TextEncoder).encode(r):r;var md5=(n,t,o)=>{var a,f=g(n=h(n)),l=8*n[r],i=e,u=new Uint8Array(e),s=r=>{for(;i;)f.unshift(r^a[--i]);i=e};for(null!=t&&((a=g(t=h(t)))[r]>e&&(a=v(a,8*t[r])),s(909522486),f=v(f,512+l),s(1549556828),l=640),f=v(f,l);i;)u[--i]=f[i>>2]>>>i%4*8;return o?u:u.reduce((r,n)=>r+(n>>4&&"")+n.toString(e),"")}}
|
package/main.js
CHANGED
|
@@ -8,7 +8,12 @@ let $length = "length"
|
|
|
8
8
|
/** @type {16} */
|
|
9
9
|
let $16 = 16
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
/** @type {number} */
|
|
12
|
+
let $2_32 = 2 ** 32
|
|
13
|
+
|
|
14
|
+
let $Math = Math
|
|
15
|
+
|
|
16
|
+
let floor = $Math.floor
|
|
12
17
|
|
|
13
18
|
/**
|
|
14
19
|
* Add integers, wrapping at 2^32.
|
|
@@ -39,7 +44,7 @@ let bitRotateLeft = (num, cnt) => (num << cnt) | (num >>> (32 - cnt))
|
|
|
39
44
|
* @param {number} t t
|
|
40
45
|
* @returns {number} Result
|
|
41
46
|
*/
|
|
42
|
-
let md5cmn = (q, a, b, x, s, t) => safeAdd(bitRotateLeft(safeAdd(
|
|
47
|
+
let md5cmn = (q, a, b, x, s, t) => safeAdd(bitRotateLeft(safeAdd(a, q) + safeAdd(x, t), s), b)
|
|
43
48
|
|
|
44
49
|
/**
|
|
45
50
|
* Basic operation the algorithm uses.
|
|
@@ -97,6 +102,9 @@ let md5hh = (a, b, c, d, x, s, t) => md5cmn(b ^ c ^ d, a, b, x, s, t)
|
|
|
97
102
|
*/
|
|
98
103
|
let md5ii = (a, b, c, d, x, s, t) => md5cmn(c ^ (b | ~d), a, b, x, s, t)
|
|
99
104
|
|
|
105
|
+
/** @type {number[]} MD5 constants cached in memory */
|
|
106
|
+
let K = []
|
|
107
|
+
|
|
100
108
|
/**
|
|
101
109
|
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
|
102
110
|
*
|
|
@@ -111,15 +119,18 @@ let binlMD5 = (x, bitLen) => {
|
|
|
111
119
|
, oldc
|
|
112
120
|
, oldd
|
|
113
121
|
, a = 1732584193
|
|
114
|
-
, b = -271733879
|
|
115
|
-
, c = -1732584194
|
|
116
122
|
, d = 271733878
|
|
123
|
+
, c = ~a
|
|
124
|
+
, b = ~d
|
|
117
125
|
, padLenIndex = floor((bitLen + 64) / 512) * $16 + 14
|
|
126
|
+
/** @type {number} */
|
|
127
|
+
var k_i
|
|
128
|
+
, k = (/**@type {*}*/ _) => K[k_i++] ??= 0 | $2_32 * $Math.abs($Math.sin(k_i))
|
|
118
129
|
|
|
119
130
|
// append padding
|
|
120
131
|
x[floor(bitLen / 32)] |= 0x80 << bitLen % 32;
|
|
121
132
|
x[padLenIndex] = 0 | bitLen;
|
|
122
|
-
x[padLenIndex + 1] = 0 | bitLen /
|
|
133
|
+
x[padLenIndex + 1] = 0 | bitLen / $2_32;
|
|
123
134
|
|
|
124
135
|
for (; i < x[$length]; d = safeAdd(d, oldd)) {
|
|
125
136
|
let [
|
|
@@ -132,73 +143,75 @@ let binlMD5 = (x, bitLen) => {
|
|
|
132
143
|
oldc = c
|
|
133
144
|
oldd = d
|
|
134
145
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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())
|
|
198
|
+
|
|
199
|
+
a = md5ii(a, b, c, d, x0, 6, k())
|
|
200
|
+
d = md5ii(d, a, b, c, x7, 10, k())
|
|
201
|
+
c = md5ii(c, d, a, b, x14, 15, k())
|
|
202
|
+
b = md5ii(b, c, d, a, x5, 21, k())
|
|
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())
|
|
202
215
|
|
|
203
216
|
a = safeAdd(a, olda)
|
|
204
217
|
b = safeAdd(b, oldb)
|
|
@@ -262,19 +275,25 @@ var md5 = (data, key, raw) => {
|
|
|
262
275
|
var bdata = bytesToBinl(data = inputToBytes(data))
|
|
263
276
|
, bitLen = data[$length] * 8
|
|
264
277
|
, i = $16
|
|
265
|
-
, out = new Uint8Array(
|
|
278
|
+
, out = new Uint8Array($16)
|
|
279
|
+
/** @type {*} */
|
|
280
|
+
var bkey
|
|
281
|
+
, pad = (/**@type {number}*/ x) => {
|
|
282
|
+
for (; i;) {
|
|
283
|
+
bdata.unshift(x ^ bkey[--i])
|
|
284
|
+
}
|
|
285
|
+
i = $16
|
|
286
|
+
}
|
|
266
287
|
|
|
267
288
|
if (key != null) {
|
|
268
289
|
// HMAC
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
,
|
|
272
|
-
, unshift = (/**@type{*}*/ _) => bdata.unshift(...opad)
|
|
273
|
-
unshift(bkey[$length] > $16 && (bkey = binlMD5(bkey, key[$length] * 8)))
|
|
274
|
-
for (; i; opad[i] = bkey[i] ^ 0x5c5c5c5c) {
|
|
275
|
-
bdata[--i] = bkey[i] ^ 0x36363636
|
|
290
|
+
bkey = bytesToBinl(key = inputToBytes(key))
|
|
291
|
+
if (bkey[$length] > $16) {
|
|
292
|
+
bkey = binlMD5(bkey, key[$length] * 8)
|
|
276
293
|
}
|
|
277
|
-
|
|
294
|
+
pad(0x36363636)
|
|
295
|
+
bdata = binlMD5(bdata, 512 + bitLen)
|
|
296
|
+
pad(0x5c5c5c5c)
|
|
278
297
|
bitLen = 512 + 128
|
|
279
298
|
}
|
|
280
299
|
|
|
@@ -288,6 +307,7 @@ var md5 = (data, key, raw) => {
|
|
|
288
307
|
return raw
|
|
289
308
|
? out
|
|
290
309
|
: out.reduce((p, v) => p + (v >> 4 && '') + v.toString($16), '')
|
|
310
|
+
// : out.toHex()
|
|
291
311
|
}
|
|
292
312
|
|
|
293
313
|
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.3",
|
|
4
|
+
"description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 2471 bytes.",
|
|
5
5
|
"author": "bddjr",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|