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 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 2471 bytes.
5
+ The minified browser bundle ([`browser.min.js`](browser.min.js)) is only 1160 bytes.
6
6
 
7
7
  ## Setup
8
8
 
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=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),"")}}
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
- * Add integers, wrapping at 2^32.
20
- *
21
- * @param {number} x First integer
22
- * @param {number} y Second integer
23
- * @returns {number} Sum
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
- , padLenIndex = floor((bitLen + 64) / 512) * $16 + 14
47
+ , j = floor((bitLen + 64) / 512) * $16 + 14
48
+
126
49
  /** @type {number} */
127
50
  var k_i
128
- , k = (/**@type {*}*/ _) => K[k_i++] ??= 0 | $2_32 * $Math.abs($Math.sin(k_i))
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[padLenIndex] = 0 | bitLen;
133
- x[padLenIndex + 1] = 0 | bitLen / $2_32;
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
- 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())
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 = safeAdd(a, olda)
217
- b = safeAdd(b, oldb)
218
- c = safeAdd(c, oldc)
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.unshift(x ^ bkey[--i])
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.3",
4
- "description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 2471 bytes.",
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": "node scripts/build.mjs && node scripts/test.mjs"
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
  }