tinyhmacmd5 0.0.1 → 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 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 3298 bytes.
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 "1feba2d374d15f7b446f1bc1c0855868"
36
- md5("Hello world!👋", "83e6ecec0587c82060f1")
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!👋", "83e6ecec0587c82060f1", true)
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=Array,t=Math.floor,n=new TextEncoder,o=(r,e)=>(r>>>0)+(e>>>0)|0,f=(r,e)=>r<<e|r>>>32-e,i=(r,e,t,n,i,a)=>o(f(o(o(e,r),o(n,a)),i),t),a=(r,e,t,n,o,f,a)=>i(e&t|~e&n,r,e,o,f,a),l=(r,e,t,n,o,f,a)=>i(e&n|t&~n,r,e,o,f,a),u=(r,e,t,n,o,f,a)=>i(e^t^n,r,e,o,f,a),c=(r,e,t,n,o,f,a)=>i(t^(e|~n),r,e,o,f,a),h=(e,n)=>{var f,i,h,s,d=0,g=1732584193,v=-271733879,y=-1732584194,x=271733878,m=16*t((n+64)/512)+14;for(e[t(n/32)]|=128<<n%32>>>0,e[m]=n>>>0,e[m+1]=n/4294967296>>>0;d<e[r];d+=16)f=g,i=v,h=y,s=x,g=a(g,v,y,x,e[d],7,-680876936),x=a(x,g,v,y,e[d+1],12,-389564586),y=a(y,x,g,v,e[d+2],17,606105819),v=a(v,y,x,g,e[d+3],22,-1044525330),g=a(g,v,y,x,e[d+4],7,-176418897),x=a(x,g,v,y,e[d+5],12,1200080426),y=a(y,x,g,v,e[d+6],17,-1473231341),v=a(v,y,x,g,e[d+7],22,-45705983),g=a(g,v,y,x,e[d+8],7,1770035416),x=a(x,g,v,y,e[d+9],12,-1958414417),y=a(y,x,g,v,e[d+10],17,-42063),v=a(v,y,x,g,e[d+11],22,-1990404162),g=a(g,v,y,x,e[d+12],7,1804603682),x=a(x,g,v,y,e[d+13],12,-40341101),y=a(y,x,g,v,e[d+14],17,-1502002290),v=a(v,y,x,g,e[d+15],22,1236535329),g=l(g,v,y,x,e[d+1],5,-165796510),x=l(x,g,v,y,e[d+6],9,-1069501632),y=l(y,x,g,v,e[d+11],14,643717713),v=l(v,y,x,g,e[d],20,-373897302),g=l(g,v,y,x,e[d+5],5,-701558691),x=l(x,g,v,y,e[d+10],9,38016083),y=l(y,x,g,v,e[d+15],14,-660478335),v=l(v,y,x,g,e[d+4],20,-405537848),g=l(g,v,y,x,e[d+9],5,568446438),x=l(x,g,v,y,e[d+14],9,-1019803690),y=l(y,x,g,v,e[d+3],14,-187363961),v=l(v,y,x,g,e[d+8],20,1163531501),g=l(g,v,y,x,e[d+13],5,-1444681467),x=l(x,g,v,y,e[d+2],9,-51403784),y=l(y,x,g,v,e[d+7],14,1735328473),v=l(v,y,x,g,e[d+12],20,-1926607734),g=u(g,v,y,x,e[d+5],4,-378558),x=u(x,g,v,y,e[d+8],11,-2022574463),y=u(y,x,g,v,e[d+11],16,1839030562),v=u(v,y,x,g,e[d+14],23,-35309556),g=u(g,v,y,x,e[d+1],4,-1530992060),x=u(x,g,v,y,e[d+4],11,1272893353),y=u(y,x,g,v,e[d+7],16,-155497632),v=u(v,y,x,g,e[d+10],23,-1094730640),g=u(g,v,y,x,e[d+13],4,681279174),x=u(x,g,v,y,e[d],11,-358537222),y=u(y,x,g,v,e[d+3],16,-722521979),v=u(v,y,x,g,e[d+6],23,76029189),g=u(g,v,y,x,e[d+9],4,-640364487),x=u(x,g,v,y,e[d+12],11,-421815835),y=u(y,x,g,v,e[d+15],16,530742520),v=u(v,y,x,g,e[d+2],23,-995338651),g=c(g,v,y,x,e[d],6,-198630844),x=c(x,g,v,y,e[d+7],10,1126891415),y=c(y,x,g,v,e[d+14],15,-1416354905),v=c(v,y,x,g,e[d+5],21,-57434055),g=c(g,v,y,x,e[d+12],6,1700485571),x=c(x,g,v,y,e[d+3],10,-1894986606),y=c(y,x,g,v,e[d+10],15,-1051523),v=c(v,y,x,g,e[d+1],21,-2054922799),g=c(g,v,y,x,e[d+8],6,1873313359),x=c(x,g,v,y,e[d+15],10,-30611744),y=c(y,x,g,v,e[d+6],15,-1560198380),v=c(v,y,x,g,e[d+13],21,1309151649),g=c(g,v,y,x,e[d+4],6,-145523070),x=c(x,g,v,y,e[d+11],10,-1120210379),y=c(y,x,g,v,e[d+2],15,718787259),v=c(v,y,x,g,e[d+9],21,-343485551),g=o(g,f),v=o(v,i),y=o(y,h),x=o(x,s);return[g,v,y,x]},s=n=>{for(var o=n[r],f=e(Math.ceil(o/4));o;)f[t(--o/4)]|=n[o]<<o%4*8;return f};var md5=(o,f,i)=>{"string"==typeof o&&(o=n.encode(o));var a=8*o[r],l=s(o),u=16,c=new Uint8Array(16);if(null!=f){"string"==typeof f&&(f=n.encode(f));let t=16,o=s(f),i=e(16),u=e(16);for(o[r]>16&&(o=h(o,8*f[r]));t;u[t]=1549556828^o[t])i[--t]=909522486^o[t];l.unshift(...i),(l=h(l,512+a)).unshift(...u),a=640}for(l=h(l,a);u;)c[--u]=l[t(u/4)]>>>u%4*8;return i?c:c.toHex?c.toHex():e.from(c,r=>(0+r.toString(16)).slice(-2)).join("")}}
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
@@ -5,11 +5,15 @@
5
5
  /** @type {"length"} */
6
6
  let $length = "length"
7
7
 
8
- let _Array = Array
8
+ /** @type {16} */
9
+ let $16 = 16
9
10
 
10
- let floor = Math.floor
11
+ /** @type {number} */
12
+ let $2_32 = 2 ** 32
11
13
 
12
- let textEncoder = new TextEncoder;
14
+ let $Math = Math
15
+
16
+ let floor = $Math.floor
13
17
 
14
18
  /**
15
19
  * Add integers, wrapping at 2^32.
@@ -18,7 +22,7 @@ let textEncoder = new TextEncoder;
18
22
  * @param {number} y Second integer
19
23
  * @returns {number} Sum
20
24
  */
21
- let safeAdd = (x, y) => ((x >>> 0) + (y >>> 0)) | 0
25
+ let safeAdd = (x, y) => 0 | (0 | x) + (0 | y)
22
26
 
23
27
  /**
24
28
  * Bitwise rotate a 32-bit number to the left.
@@ -40,7 +44,7 @@ let bitRotateLeft = (num, cnt) => (num << cnt) | (num >>> (32 - cnt))
40
44
  * @param {number} t t
41
45
  * @returns {number} Result
42
46
  */
43
- let md5cmn = (q, a, b, x, s, t) => safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b)
47
+ let md5cmn = (q, a, b, x, s, t) => safeAdd(bitRotateLeft(safeAdd(a, q) + safeAdd(x, t), s), b)
44
48
 
45
49
  /**
46
50
  * Basic operation the algorithm uses.
@@ -98,6 +102,9 @@ let md5hh = (a, b, c, d, x, s, t) => md5cmn(b ^ c ^ d, a, b, x, s, t)
98
102
  */
99
103
  let md5ii = (a, b, c, d, x, s, t) => md5cmn(c ^ (b | ~d), a, b, x, s, t)
100
104
 
105
+ /** @type {number[]} MD5 constants cached in memory */
106
+ let K = []
107
+
101
108
  /**
102
109
  * Calculate the MD5 of an array of little-endian words, and a bit length.
103
110
  *
@@ -112,94 +119,103 @@ let binlMD5 = (x, bitLen) => {
112
119
  , oldc
113
120
  , oldd
114
121
  , a = 1732584193
115
- , b = -271733879
116
- , c = -1732584194
117
122
  , d = 271733878
118
- , padLenIndex = floor((bitLen + 64) / 512) * 16 + 14
123
+ , c = ~a
124
+ , b = ~d
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))
119
129
 
120
130
  // append padding
121
- x[floor(bitLen / 32)] |= (0x80 << (bitLen % 32)) >>> 0;
122
- x[padLenIndex] = bitLen >>> 0;
123
- x[padLenIndex + 1] = (bitLen / 0x100000000) >>> 0;
131
+ 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)
124
140
 
125
- for (; i < x[$length]; i += 16) {
126
141
  olda = a
127
142
  oldb = b
128
143
  oldc = c
129
144
  oldd = d
130
145
 
131
- a = md5ff(a, b, c, d, x[i], 7, -680876936)
132
- d = md5ff(d, a, b, c, x[i + 1], 12, -389564586)
133
- c = md5ff(c, d, a, b, x[i + 2], 17, 606105819)
134
- b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330)
135
- a = md5ff(a, b, c, d, x[i + 4], 7, -176418897)
136
- d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426)
137
- c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341)
138
- b = md5ff(b, c, d, a, x[i + 7], 22, -45705983)
139
- a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416)
140
- d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417)
141
- c = md5ff(c, d, a, b, x[i + 10], 17, -42063)
142
- b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162)
143
- a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682)
144
- d = md5ff(d, a, b, c, x[i + 13], 12, -40341101)
145
- c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290)
146
- b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329)
147
-
148
- a = md5gg(a, b, c, d, x[i + 1], 5, -165796510)
149
- d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632)
150
- c = md5gg(c, d, a, b, x[i + 11], 14, 643717713)
151
- b = md5gg(b, c, d, a, x[i], 20, -373897302)
152
- a = md5gg(a, b, c, d, x[i + 5], 5, -701558691)
153
- d = md5gg(d, a, b, c, x[i + 10], 9, 38016083)
154
- c = md5gg(c, d, a, b, x[i + 15], 14, -660478335)
155
- b = md5gg(b, c, d, a, x[i + 4], 20, -405537848)
156
- a = md5gg(a, b, c, d, x[i + 9], 5, 568446438)
157
- d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690)
158
- c = md5gg(c, d, a, b, x[i + 3], 14, -187363961)
159
- b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501)
160
- a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467)
161
- d = md5gg(d, a, b, c, x[i + 2], 9, -51403784)
162
- c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473)
163
- b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734)
164
-
165
- a = md5hh(a, b, c, d, x[i + 5], 4, -378558)
166
- d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463)
167
- c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562)
168
- b = md5hh(b, c, d, a, x[i + 14], 23, -35309556)
169
- a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060)
170
- d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353)
171
- c = md5hh(c, d, a, b, x[i + 7], 16, -155497632)
172
- b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640)
173
- a = md5hh(a, b, c, d, x[i + 13], 4, 681279174)
174
- d = md5hh(d, a, b, c, x[i], 11, -358537222)
175
- c = md5hh(c, d, a, b, x[i + 3], 16, -722521979)
176
- b = md5hh(b, c, d, a, x[i + 6], 23, 76029189)
177
- a = md5hh(a, b, c, d, x[i + 9], 4, -640364487)
178
- d = md5hh(d, a, b, c, x[i + 12], 11, -421815835)
179
- c = md5hh(c, d, a, b, x[i + 15], 16, 530742520)
180
- b = md5hh(b, c, d, a, x[i + 2], 23, -995338651)
181
-
182
- a = md5ii(a, b, c, d, x[i], 6, -198630844)
183
- d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415)
184
- c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905)
185
- b = md5ii(b, c, d, a, x[i + 5], 21, -57434055)
186
- a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571)
187
- d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606)
188
- c = md5ii(c, d, a, b, x[i + 10], 15, -1051523)
189
- b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799)
190
- a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359)
191
- d = md5ii(d, a, b, c, x[i + 15], 10, -30611744)
192
- c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380)
193
- b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649)
194
- a = md5ii(a, b, c, d, x[i + 4], 6, -145523070)
195
- d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379)
196
- c = md5ii(c, d, a, b, x[i + 2], 15, 718787259)
197
- b = md5ii(b, c, d, a, x[i + 9], 21, -343485551)
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())
198
215
 
199
216
  a = safeAdd(a, olda)
200
217
  b = safeAdd(b, oldb)
201
218
  c = safeAdd(c, oldc)
202
- d = safeAdd(d, oldd)
203
219
  }
204
220
  return [a, b, c, d]
205
221
  }
@@ -212,13 +228,24 @@ let binlMD5 = (x, bitLen) => {
212
228
  */
213
229
  let bytesToBinl = (input) => {
214
230
  var i = input[$length]
215
- , output = _Array(Math.ceil(i / 4))
231
+ /** @type {number[]} */
232
+ var output = []
216
233
  for (; i;) {
217
- output[floor(--i / 4)] |= input[i] << ((i % 4) * 8)
234
+ output[floor(--i / 4)] |= input[i] << i % 4 * 8
218
235
  }
219
236
  return output
220
237
  }
221
238
 
239
+ /**
240
+ * @param {string | Uint8Array} input
241
+ * @returns {Uint8Array}
242
+ */
243
+ let inputToBytes = (input) => (
244
+ typeof input == 'string'
245
+ ? new TextEncoder().encode(input)
246
+ : input
247
+ )
248
+
222
249
  /**
223
250
  * @overload
224
251
  * @param {string | Uint8Array} data
@@ -245,29 +272,28 @@ let bytesToBinl = (input) => {
245
272
  * @returns {string | Uint8Array<ArrayBuffer>} The MD5 (or HMAC‑MD5) digest, either as a hex string or a Uint8Array.
246
273
  */
247
274
  var md5 = (data, key, raw) => {
248
- if (typeof data == 'string') data = textEncoder.encode(data);
249
-
250
- var bitLen = data[$length] * 8
251
- , bdata = bytesToBinl(data)
252
- , i = 16
253
- , out = new Uint8Array(16)
275
+ var bdata = bytesToBinl(data = inputToBytes(data))
276
+ , bitLen = data[$length] * 8
277
+ , i = $16
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
+ }
254
287
 
255
288
  if (key != null) {
256
289
  // HMAC
257
- if (typeof key == 'string') key = textEncoder.encode(key);
258
- let i = 16
259
- , bkey = bytesToBinl(key)
260
- , ipad = _Array(16)
261
- , opad = _Array(16)
262
- if (bkey[$length] > 16) {
290
+ bkey = bytesToBinl(key = inputToBytes(key))
291
+ if (bkey[$length] > $16) {
263
292
  bkey = binlMD5(bkey, key[$length] * 8)
264
293
  }
265
- for (; i; opad[i] = bkey[i] ^ 0x5c5c5c5c) {
266
- ipad[--i] = bkey[i] ^ 0x36363636
267
- }
268
- bdata.unshift(...ipad)
294
+ pad(0x36363636)
269
295
  bdata = binlMD5(bdata, 512 + bitLen)
270
- bdata.unshift(...opad)
296
+ pad(0x5c5c5c5c)
271
297
  bitLen = 512 + 128
272
298
  }
273
299
 
@@ -275,14 +301,13 @@ var md5 = (data, key, raw) => {
275
301
 
276
302
  // binl to bytes
277
303
  for (; i;) {
278
- out[--i] = bdata[floor(i / 4)] >>> ((i % 4) * 8)
304
+ out[--i] = bdata[i >> 2] >>> i % 4 * 8
279
305
  }
280
306
 
281
307
  return raw
282
308
  ? out
283
- : out.toHex
284
- ? out.toHex()
285
- : _Array.from(out, byte => (0 + byte.toString(16)).slice(-2)).join('')
309
+ : out.reduce((p, v) => p + (v >> 4 && '') + v.toString($16), '')
310
+ // : out.toHex()
286
311
  }
287
312
 
288
313
  export default md5
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tinyhmacmd5",
3
- "version": "0.0.1",
4
- "description": "A tiny JavaScript HMAC-MD5 implementation. The minified browser bundle is only 3298 bytes.",
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",