tinyhmacmd5 0.0.4 → 0.0.5

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 1160 bytes.
5
+ The minified browser bundle ([`browser.min.js`](browser.min.js)) is only 1029 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=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),"")}}
2
+ {let r="length",e=16,n=2**32,t=1732584193,o=271733878,a=~t,f=~o,u=Math,i=u.floor,l=[738695,669989,770404,703814],d=Array(64),s=(s,v)=>{var y,c,g,h,A,w=0,b=i((v+64)/512)*e+14,m=[t,f,a,o],p=[...m],x=r=>m[3&++A];for(s[i(v/32)]|=128<<v%32,s[b]=0|v,s[b+1]=0|v/n;w<s[r];w+=e){for(A=b=0;b<64;A-=6)m[3&A]=(c=x(),g=x(),h=x(),0|((c=((y=b>>4)?y>1?y>2?g^(c|~h):c^g^h:c&h|g&~h:c&g|~c&h)+(0|s[w+(b*(29521>>4*y)+(1296>>4*y)&15)])+(g=l[y]>>b%4*5&31,d[b++]??=0|n*u.abs(u.sin(b)))+x())<<g|c>>>32-g)+x());for(A=4;A;)p[--A]=m[A]=0|p[A]+m[A]}return m},v=e=>{for(var n=e[r],t=[];n;)t[i(--n/4)]|=e[n]<<n%4*8;return t},y=r=>"string"==typeof r?(new TextEncoder).encode(r):r;var md5=(n,t,o)=>{var a,f=v(n=y(n)),u=8*n[r],i=e,l=new Uint8Array(e),d=r=>{for(f.unshift(...Array(e));i;)f[--i]=16843009*r^a[i];i=e};for(null!=t&&((a=v(t=y(t)))[r]>e&&(a=s(a,8*t[r])),d(54),f=s(f,512+u),d(92),u=640),f=s(f,u);i;)l[--i]=f[i>>2]>>>i%4*8;return o?l:l.reduce((r,n)=>r+(n>>4&&"")+n.toString(e),"")}}
package/main.js CHANGED
@@ -10,22 +10,25 @@ let $16 = 16
10
10
 
11
11
  let $2_32 = 2 ** 32
12
12
 
13
- let $Array = Array
13
+ let A = 1732584193
14
+ , D = 271733878
15
+ , C = ~A
16
+ , B = ~D
14
17
 
15
18
  let $Math = Math
16
19
 
17
20
  let floor = $Math.floor
18
21
 
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)
22
+ /** @type {number[]} */
23
+ let S = [
24
+ 738695, // 7, 12, 17, 22
25
+ 669989, // 5, 9, 14, 20
26
+ 770404, // 4, 11, 16, 23
27
+ 703814, // 6, 10, 15, 21
25
28
  ]
26
29
 
27
30
  /** @type {number[]} MD5 constants cached in memory */
28
- let K = $Array(64)
31
+ let K = Array(64)
29
32
 
30
33
  /**
31
34
  * Calculate the MD5 of an array of little-endian words, and a bit length.
@@ -36,89 +39,58 @@ let K = $Array(64)
36
39
  */
37
40
  let binlMD5 = (x, bitLen) => {
38
41
  var i = 0
39
- , olda
40
- , oldb
41
- , oldc
42
- , oldd
43
- , a = 1732584193
44
- , d = 271733878
45
- , c = ~a
46
- , b = ~d
47
42
  , j = floor((bitLen + 64) / 512) * $16 + 14
43
+ , l
44
+ , t0
45
+ , t1
46
+ , t2
48
47
 
49
48
  /** @type {number} */
50
- var k_i
49
+ var oi
51
50
 
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
- }
51
+ /** @type {[number, number, number, number]} */
52
+ var output = [A, B, C, D]
53
+ , oldOutput = [...output]
54
+ , o = (/**@type {*}*/ _) => output[++oi & 3]
98
55
 
99
56
  // append padding
100
57
  x[floor(bitLen / 32)] |= 0x80 << bitLen % 32;
101
58
  x[j] = 0 | bitLen;
102
59
  x[j + 1] = 0 | bitLen / $2_32;
103
60
 
104
- for (; i < x[$length]; d = 0 | d + oldd) {
105
- olda = a
106
- oldb = b
107
- oldc = c
108
- oldd = d
109
-
110
- k_i = ff_i = 0
111
-
112
- F(7, 12, 17, 22)
113
- F(5, 9, 14, 20)
114
- F(4, 11, $16, 23)
115
- F(6, 10, 15, 21)
116
-
117
- a = 0 | a + olda
118
- b = 0 | b + oldb
119
- c = 0 | c + oldc
61
+ for (; i < x[$length]; i += $16) {
62
+ for (oi = j = 0; j < 64; oi -= 6) {
63
+ output[oi & 3] = (
64
+ t0 = (
65
+ (
66
+ t0 = o(),
67
+ t1 = o(),
68
+ t2 = o(),
69
+ (l = j >> 4)
70
+ ? l > 1
71
+ ? l > 2
72
+ ? t1 ^ (t0 | ~t2) // 3
73
+ : t0 ^ t1 ^ t2 // 2
74
+ : t0 & t2 | t1 & ~t2 // 1
75
+ : t0 & t1 | ~t0 & t2 // 0
76
+ ) +
77
+ (
78
+ 0 | x[i + (j * (0x7351 >> l * 4) + (0x0510 >> l * 4) & 15)]
79
+ ) +
80
+ (
81
+ t1 = S[l] >> j % 4 * 5 & 31,
82
+ K[j++] ??= 0 | $2_32 * $Math.abs($Math.sin(j))
83
+ ) +
84
+ o()
85
+ ),
86
+ 0 | (t0 << t1 | t0 >>> 32 - t1) + o()
87
+ )
88
+ }
89
+ for (oi = 4; oi;) {
90
+ oldOutput[--oi] = output[oi] = 0 | oldOutput[oi] + output[oi]
91
+ }
120
92
  }
121
- return [a, b, c, d]
93
+ return output
122
94
  }
123
95
 
124
96
  /**
@@ -180,9 +152,9 @@ var md5 = (data, key, raw) => {
180
152
  /** @type {*} */
181
153
  var bkey
182
154
  , pad = (/**@type {number}*/ x) => {
183
- bdata.unshift(...$Array($16))
155
+ bdata.unshift(...Array($16))
184
156
  for (; i;) {
185
- bdata[--i] = x ^ bkey[i]
157
+ bdata[--i] = 0x01010101 * x ^ bkey[i]
186
158
  }
187
159
  i = $16
188
160
  }
@@ -193,9 +165,9 @@ var md5 = (data, key, raw) => {
193
165
  if (bkey[$length] > $16) {
194
166
  bkey = binlMD5(bkey, key[$length] * 8)
195
167
  }
196
- pad(0x36363636)
168
+ pad(0x36)
197
169
  bdata = binlMD5(bdata, 512 + bitLen)
198
- pad(0x5c5c5c5c)
170
+ pad(0x5c)
199
171
  bitLen = 512 + 128
200
172
  }
201
173
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tinyhmacmd5",
3
- "version": "0.0.4",
4
- "description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 1160 bytes.",
3
+ "version": "0.0.5",
4
+ "description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 1029 bytes.",
5
5
  "author": "bddjr",
6
6
  "license": "MIT",
7
7
  "type": "module",