tinyhmacmd5 0.2.1-es2026 → 0.2.1

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 @@ English | [中文](README-zh.md)
2
2
 
3
3
  # Tiny HMAC MD5
4
4
 
5
- A tiny and reliable HMAC-MD5 implementation for JavaScript: [`browser.min.js`](browser.min.js) is only **951 bytes**.
5
+ A tiny and reliable HMAC-MD5 implementation for JavaScript: [`browser.min.js`](browser.min.js) is only **983 bytes**.
6
6
 
7
7
  - **Input type**: `string` (UTF‑8), `Uint8Array` or `Uint8ClampedArray`
8
8
  - **Output type**: hex `string` or bytes `Uint8Array`
@@ -141,22 +141,22 @@ md5(data)
141
141
 
142
142
  ## Runtime Environment
143
143
 
144
- Environments that support [`Uint8Array.prototype.toHex()`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toHex) :
144
+ Environments that support [Exponentiation (`**`)](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Exponentiation) and [`TextEncoder`](https://developer.mozilla.org/docs/Web/API/TextEncoder) :
145
145
 
146
146
  - Desktop
147
- - Chrome ≥ 140 (2025-09-02)
148
- - Edge ≥ 140 (2025-09-05)
149
- - Firefox ≥ 133 (2024-11-26)
150
- - Opera ≥ 124 (2025-11-13)
151
- - Safari ≥ 18.2 (2024-12-11)
147
+ - Chrome ≥ 52 (2016-07-20)
148
+ - Edge ≥ 79 (2020-01-15)
149
+ - Firefox ≥ 52 (2017-03-07)
150
+ - Opera ≥ 39 (2016-08-02)
151
+ - Safari ≥ 10.1 (2017-03-27)
152
152
  - Mobile
153
- - Chrome Android ≥ 140 (2025-09-02)
154
- - Firefox for Android ≥ 133 (2024-11-26)
155
- - Opera Android ≥ 92 (2025-10-08)
156
- - Safari on iOS ≥ 18.2 (2024-12-11)
157
- - Samsung Browser ×
158
- - WebView Android ≥ 140 (2025-09-02)
159
- - WebView on iOS ≥ 18.2 (2024-12-11)
153
+ - Chrome Android ≥ 52 (2016-07-27)
154
+ - Firefox for Android ≥ 52 (2017-03-07)
155
+ - Opera Android ≥ 41 (2016-10-25)
156
+ - Safari on iOS ≥ 10.3 (2017-03-27)
157
+ - Samsung Browser ≥ 6 (2017-08-23)
158
+ - WebView Android ≥ 51 (2016-06-08)
159
+ - WebView on iOS ≥ 10.3 (2017-03-27)
160
160
 
161
161
  Not recommended for use in environments that support `node:crypto`, as `node:crypto` already provides HMAC-MD5.
162
162
 
@@ -178,7 +178,7 @@ During the adaptation, I discovered that `blueimp-md5` did not correctly handle
178
178
 
179
179
  I also found that using `Array` to process inputs over 512 MiB could throw a `RangeError`, so I replaced it with `Int32Array`.
180
180
 
181
- I demonstrated in practice that HMAC-MD5 can be implemented in an extremely small footprint (951 bytes) while also improving reliability.
181
+ I demonstrated in practice that HMAC-MD5 can be implemented in an extremely small footprint (983 bytes) while also improving reliability.
182
182
 
183
183
  Maybe not many people care about saving just a few KB, but `tinyhmacmd5` exists precisely to "explore the unknown".
184
184
 
package/browser.min.js CHANGED
@@ -1 +1 @@
1
- /*! npmjs.com/tinyhmacmd5 */{let r=[],e=0,n=Math,t=n.floor,o=r=>16*t((r+72)/64),f=(e,n,f=0,a=o(n),l=1732584193,c=271733878,d,h,i=[l,~c,~l,c],u=[...i])=>{for(e[a-1]=0|n/2**29,e[t(n/4)]|=128<<(e[a-2]=n<<3);f<e.length;){for(a=0;a<64;)i[h&=3]=0|((c=0|i[h]+r[a]+(l=i[3&++h],c=i[3&++h],d=i[3&++h],(n=a>>4<<2)?n>4?n>8?c^(l|~d):l^c^d:l&d|c&~d:l&c|~l&d)+(0|e[f+(a*(29521>>n)+(1296>>n)&15)]))<<(d="',16%).4$+07&*/5".charCodeAt(3&a++|n))|c>>>64-d)+l;for(;h;f+=4)u[--h]=i[h]=0|u[h]+i[h]}return i},a=(r,e,n=("string"==typeof r?r=(new TextEncoder).encode(r):r).length,t=new Int32Array(o(4*e+n)),f=0)=>{for(;f<n;)t[e++]=r[f++]|r[f++]<<8|r[f++]<<16|r[f++]<<24;return[t,n]};for(var md5=(r,e,n)=>{var t=16,o=null!=e,[l,c]=a(r,o*t),d=[],h=new Uint8Array(t);if(o){let[r,n]=a(e,0);for(n>64&&(r=f(r,n));t;)d[--t]=1785358954^(l[t]=909522486^r[t]);t=16,l=d.concat(f(l,64+c)),c=80}for(l=f(l,c);t;)h[--t]=l[t>>2]>>8*t;return n?h:h.toHex()};e<64;)r[e]=0|2**32*n.abs(n.sin(++e))}
1
+ /*! npmjs.com/tinyhmacmd5 */{let r=[],n=0,t=Math,e=t.floor,o=r=>16*e((r+72)/64),f=(n,t,f=0,a=o(t),l=1732584193,c=271733878,i,d,g=[l,~c,~l,c],h=[...g])=>{for(n[a-1]=0|t/2**29,n[e(t/4)]|=128<<(n[a-2]=t<<3);f<n.length;){for(a=0;a<64;)g[d&=3]=0|((c=0|g[d]+r[a]+(l=g[3&++d],c=g[3&++d],i=g[3&++d],(t=a>>4<<2)?t>4?t>8?c^(l|~i):l^c^i:l&i|c&~i:l&c|~l&i)+(0|n[f+(a*(29521>>t)+(1296>>t)&15)]))<<(i="',16%).4$+07&*/5".charCodeAt(3&a++|t))|c>>>64-i)+l;for(;d;f+=4)h[--d]=g[d]=0|h[d]+g[d]}return g},a=(r,n,t=("string"==typeof r?r=(new TextEncoder).encode(r):r).length,e=new Int32Array(o(4*n+t)),f=0)=>{for(;f<t;)e[n++]=r[f++]|r[f++]<<8|r[f++]<<16|r[f++]<<24;return[e,t]};for(var md5=(r,n,t)=>{var e=16,o=null!=n,[l,c]=a(r,o*e),i=[],d=t?new Uint8Array(e):"";if(o){let[r,t]=a(n,0);for(t>64&&(r=f(r,t));e;)i[--e]=1785358954^(l[e]=909522486^r[e]);e=16,l=i.concat(f(l,64+c)),c=80}for(l=f(l,c);e;t?d[e]=i:d=(i>>4&&"")+i.toString(16)+d)i=l[--e>>2]>>8*e&255;return d};n<64;)r[n]=0|2**32*t.abs(t.sin(++n))}
package/main.js CHANGED
@@ -131,7 +131,8 @@ var md5 = (data, key, raw) => {
131
131
  /** @type {*} */
132
132
  var temp = []
133
133
 
134
- var out = new Uint8Array(i)
134
+ /** @type {*} */
135
+ var out = raw ? new Uint8Array(i) : ''
135
136
 
136
137
  if (hasKey) {
137
138
  // HMAC
@@ -151,11 +152,15 @@ var md5 = (data, key, raw) => {
151
152
  bdata = wordsMD5(bdata, dataByteLen)
152
153
 
153
154
  // words to bytes or hex
154
- for (; i;) {
155
- out[--i] = bdata[i >> 2] >> i * 8
155
+ for (; i;
156
+ raw
157
+ ? out[i] = temp
158
+ : out = (temp >> 4 && '') + temp.toString(16) + out
159
+ ) {
160
+ temp = bdata[--i >> 2] >> i * 8 & 0xff
156
161
  }
157
162
 
158
- return raw ? out : out.toHex()
163
+ return out
159
164
  }
160
165
 
161
166
  for (; i < 64;) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tinyhmacmd5",
3
- "version": "0.2.1-es2026",
4
- "description": "A tiny and reliable HMAC-MD5 implementation for JavaScript: browser.min.js is only 951 bytes.",
3
+ "version": "0.2.1",
4
+ "description": "A tiny and reliable HMAC-MD5 implementation for JavaScript: browser.min.js is only 983 bytes.",
5
5
  "author": "bddjr",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -60,7 +60,7 @@
60
60
  "typescript": "^7.0.2"
61
61
  },
62
62
  "scripts": {
63
- "build": "tsc && node scripts/build.mjs && es-check es2026 --module --checkFeatures main.js browser.min.js",
63
+ "build": "tsc && node scripts/build.mjs && es-check es2016 --module --checkFeatures main.js browser.min.js",
64
64
  "build:unchanged": "node scripts/build-unchanged.mjs",
65
65
  "test": "pnpm build && pnpm test:only",
66
66
  "test:only": "node scripts/test.mjs",