@zip.js/zip.js 2.8.43 → 2.8.44

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.
Files changed (45) hide show
  1. package/README.md +0 -37
  2. package/deno.json +1 -1
  3. package/dist/zip-core-external.js +67 -47
  4. package/dist/zip-core-external.min.js +1 -1
  5. package/dist/zip-core.js +68 -46
  6. package/dist/zip-core.min.js +1 -1
  7. package/dist/zip-fs-core-external.js +67 -47
  8. package/dist/zip-fs-core-external.min.js +1 -1
  9. package/dist/zip-fs-core.js +66 -46
  10. package/dist/zip-fs-core.min.js +1 -1
  11. package/dist/zip-fs-external.js +67 -47
  12. package/dist/zip-fs-external.min.js +1 -1
  13. package/dist/zip-fs-native.js +70 -48
  14. package/dist/zip-fs-native.min.js +1 -1
  15. package/dist/zip-fs.js +69 -47
  16. package/dist/zip-fs.min.js +1 -1
  17. package/dist/zip-legacy.js +70 -48
  18. package/dist/zip-legacy.min.js +1 -1
  19. package/dist/zip-native.js +70 -48
  20. package/dist/zip-native.min.js +1 -1
  21. package/dist/zip-web-worker-native.js +1 -1
  22. package/dist/zip-web-worker.js +1 -1
  23. package/dist/zip.js +69 -47
  24. package/dist/zip.min.js +1 -1
  25. package/index-native.cjs +70 -48
  26. package/index-native.min.js +1 -1
  27. package/index.cjs +69 -47
  28. package/index.d.cts +80 -7
  29. package/index.d.ts +80 -7
  30. package/index.min.js +1 -1
  31. package/lib/core/codec-pool.js +6 -2
  32. package/lib/core/options.js +4 -0
  33. package/lib/core/streams/aes-crypto-stream.js +4 -4
  34. package/lib/core/streams/codec-stream.js +4 -0
  35. package/lib/core/streams/common-crypto.js +2 -0
  36. package/lib/core/streams/zip-entry-stream.js +12 -8
  37. package/lib/core/web-worker-inline-native.js +1 -1
  38. package/lib/core/web-worker-inline-wasm.js +1 -1
  39. package/lib/core/web-worker-wasm.js +4 -8
  40. package/lib/core/zip-entry.js +3 -0
  41. package/lib/core/zip-reader.js +35 -26
  42. package/lib/core/zip-writer.js +16 -7
  43. package/lib/zip-core-reader.js +2 -0
  44. package/package.json +1 -1
  45. package/worker-message-property-names.js +1 -1
package/index.cjs CHANGED
@@ -218,7 +218,7 @@ function resetConfiguration() {
218
218
  Object.assign(config, DEFAULT_CONFIGURATION);
219
219
  }
220
220
 
221
- function t$1(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:w,TextEncoder:u,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",z="function",k=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,M,P,B,D,R]=C;class U{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=R[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class W extends d{constructor(){let t;const e=new U;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function _(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function T(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const V={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=V.l(n);return 32===s?t.concat(e):V.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+V.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=V.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=V.l(r);return s.push(V.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=V.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(V.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.M=[1518500249,1859775393,2400959708,3395469782],t?(e.P=t.P.slice(0),e.B=t.B.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.P=t.I.slice(0),t.B=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=K.R.A(t));const n=e.B=V.concat(e.B,t),s=e.D,o=e.D=s+V.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.U(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}W(){const t=this;let e=t.B;const n=t.P;e=V.concat(e,[V.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.U(e.splice(0,16));return t.reset(),n}_(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}T(t,e){return e<<t|e>>>32-t}U(e){const n=this,r=n.P,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.T(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.T(5,c)+n._(t,i,a,f)+l+o[t]+n.M[s.floor(t/20)]|0;l=f,f=a,a=n.T(30,i),i=c,c=e}r[0]=r[0]+c|0,r[1]=r[1]+i|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},F={importKey:t=>new F.V(K.bytes.A(t)),K(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,w;const u=new ArrayBuffer(o),h=new l(u);let p=0;const d=V;for(e=K.bytes.A(e),w=1;(o||1)>p;w++){for(c=i=t.encrypt(d.concat(e,[w])),a=1;n>a;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;(o||1)>p&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return u.slice(0,s/8)},V:class{constructor(t){const e=this,n=e.F=E,s=[[],[]];e.L=[new n,new n];const r=e.L[0].blockSize/32;t.length>r&&(t=(new n).update(t).W());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.L[0].update(s[0]),e.L[1].update(s[1]),e.O=new n(e.L[0])}reset(){const t=this;t.O=new t.F(t.L[0]),t.j=!1}update(t){this.j=!0,this.O.update(t)}digest(){const t=this,e=t.O.W(),n=new t.F(t.L[1]).update(e).W();return t.reset(),n}encrypt(t){if(this.j)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==z,O="Invalid password",j="Invalid signature",H="zipjs-abort-check-password";function Z(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const N=16,q={name:"PBKDF2"},G=e.assign({hash:{name:"HMAC"}},q),J=e.assign({iterations:1e3,hash:{name:"SHA-1"}},q),Q=["deriveBits"],X=[8,12,16],Y=[16,24,32],$=10,tt=[0,0,0,0],et=typeof h!=b,nt=et&&h.subtle,st=et&&typeof nt!=b,rt=K.bytes,ot=class{constructor(t){const e=this;e.H=[[[],[],[],[],[]],[[],[],[],[],[]]],e.H[0][0][0]||e.Z();const n=e.H[0][4],s=e.H[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.M=[i=t.slice(0),a=[]],c=o;4*o+28>c;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const e=i[3&t?c:c-4];a[t]=4>=c||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}Z(){const t=this.H[0],e=this.H[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let w=16843009*f^65537*a^257*i^16843008*l,u=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=u=u<<24^u>>>8,e[n][o]=w=w<<24^w>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.M[e],s=n.length/4-2,o=[0,0,0,0],c=this.H[e],i=c[0],a=c[1],f=c[2],l=c[3],w=c[4];let u,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)u=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=i[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=i[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=i[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=u,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=w[d>>>24]<<24^w[y>>16&255]<<16^w[m>>8&255]<<8^w[255&g]^n[S++],u=d,d=y,y=m,m=g,g=u;return o}},ct=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=V.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return V.S(e,r)}},it=F.V;let at=et&&st&&typeof nt.importKey==z,ft=et&&st&&typeof nt.deriveBits==z;class lt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s}){super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,nt:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await pt(t,e,n,yt(s,0,X[e])),c=yt(s,X[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,yt(t,0,X[i]+2)),t=yt(t,X[i]+2),s?e.error(new r(H)):a()):await f;const l=new o(t.length-$-(t.length-$)%N);e.enqueue(ht(n,t,l,0,$,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const c=yt(s,0,s.length-$),i=yt(s,s.length-$);let a=k;if(c.length){const t=gt(rt,c);n.update(t);const s=e.update(t);a=mt(rt,s)}const f=yt(mt(rt,n.digest()),0,$);let l=s.length<$?1:0;for(let t=0;$>t;t++)l|=f[t]^i[t];if(l)throw new r(j);t.enqueue(a)}}})}}class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ut(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:c,ready:i}=n;let a=k;s?(a=await(async(t,e,n)=>{const s=Z(new o(X[e]));return _(s,await pt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%N);f.set(a,0),e.enqueue(ht(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let c=k;if(r.length){const t=e.update(gt(rt,r));n.update(t),c=mt(rt,t)}s.signature=mt(rt,n.digest()).slice(0,$),t.enqueue(_(c,s.signature))}}}),s=this}}function ut(t,n,s,r){e.assign(t,{ready:new w(e=>t.nt=e),password:dt(n,s),strength:r-1,pending:k})}function ht(t,e,n,s,r,c){const{st:i,ot:a,pending:f}=t;f.length&&(e=_(f,e));const l=e.length-r;let w;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%N)),w=0;l-N>=w;w+=N){const t=gt(rt,yt(e,w,w+N));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(mt(rt,r),w+s)}return t.pending=yt(e,w),n}async function pt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!at)return F.importKey(e);try{return await nt.importKey("raw",e,n,!1,r)}catch{return at=!1,F.importKey(e)}})(0,r,G,0,Q),a=await(async(t,e,n)=>{if(!ft)return F.K(e,t.salt,J.iterations,n);try{return await nt.deriveBits(t,e,n)}catch{return ft=!1,F.K(e,t.salt,J.iterations,n)}})(e.assign({salt:c},J),i,8*(2*Y[s]+2)),f=new o(a),l=gt(rt,yt(f,0,Y[s])),w=gt(rt,yt(f,Y[s],2*Y[s])),u=yt(f,2*Y[s]);return e.assign(n,{keys:{key:l,ct:w,passwordVerification:u},st:new ct(new ot(l),t.from(tt)),ot:new it(w)}),u}function dt(t,e){return e===v?(t=>{if(typeof u==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new u).encode(t)})(t):e}function yt(t,e,n){return t.subarray(e,n)}function mt(t,e){return t.C(e)}function gt(t,e){return t.A(e)}class St extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){bt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(H)):e.enqueue(zt(n,t))}})}}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){bt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=Z(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(kt(n,e),0),r=12}else s=new o(t.length),r=0;s.set(kt(n,t),r),e.enqueue(s)}})}}function bt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,it:new U(r[0]),ft:new U(r[2])}),s)for(let e=0;e<s.length;e++)Ct(t,s[e]);else for(let e=0;e<n.length;e++)Ct(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],Ct(t,n[s]);return n}function kt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=At(t)^e[s],Ct(t,e[s]);return n}function Ct(t,e){let[,n]=t.keys;t.it.append([e]);const r=~t.it.get();n=xt(s.imul(xt(n+It(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function At(t){const e=2|t.keys[2];return It(s.imul(e,1^e)>>>8)}function It(t){return 255&t}function xt(t){return 4294967295&t}const Mt=new f;function Pt(t){return Mt.get(t)}const Bt="Invalid uncompressed size",Dt="deflate-raw",Rt="gzip",Ut=[31,139,8];class Wt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,signed:a,level:f,deflate64:w,format:u,compressionMethod:h}=t,p=this;let d,y,m,g=super.readable;const S=u&&Pt(u),v=a&&r&&!w&&!S&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new W,g=Lt(g,d)),r)if(S)g=Ot(g,Et(S.CompressionStream,u,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new _t,g=Ot(g,new s(Rt)),g=Lt(g,m);else try{g=Ft(g,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Rt)}catch{throw t}g=Ot(g,e),g=Lt(g,new _t)}o&&(i?g=Lt(g,new vt(t)):(y=new wt(t),g=Lt(g,y))),Kt(p,g,()=>{let t;o&&!i&&(t=y.signature),o&&!i||!a||(t=v?m.signature:new l(d.value.buffer).getUint32(0)),p.signature=t})}}class _t extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=_(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(_(n.subarray(0,i),t.subarray(0,c-i))),n=_(n.subarray(i),t.subarray(c-i))},flush(){const e=T(n);t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Tt extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,signed:a,signature:f,compressed:u,useCompressionStream:h,deflate64:p,format:m,compressionMethod:g,rawBitFlag:S,outputSize:b}=t;let z,k,C=super.readable;if(i&&(c?C=Lt(C,new St(t)):(k=new lt(t),C=Lt(C,k))),u){const t=m&&Pt(m);if(t)C=Ot(C,Et(t.DecompressionStream,m,{chunkSize:e,compressionMethod:g,rawBitFlag:S,uncompressedSize:b}));else try{C=Ft(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Rt)}catch{throw t}C=((t,e,n)=>{const s=new U;let c,i,a,f=0,l=!1;const u=new w((t,e)=>{i=t,a=e});u.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(Ut),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await u}finally{m()}const e=new o(8),r=T(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,n>f?l&&y():i(),e.enqueue(t)},cancel(t){a(t)}});return t=Lt(t,h),Lt(t=Ot(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Bt)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}i&&!c||!a||(z=new W,C=Lt(C,z)),Kt(this,C,()=>{if((!i||c)&&a){const t=new l(z.value.buffer);if(f!=t.getUint32(0,!1))throw new r(j)}})}}const Vt=new f;function Kt(t,n,s){n=Lt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Et(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Ft(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Dt;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Ot(t,i)}function Lt(t,e){return(t=>{if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})})(t).pipeThrough(e)}function Ot(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const jt="data",Ht="close",Zt="deflate";class Nt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Zt)?c=Wt:o.startsWith("inflate")&&(c=Tt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),w=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Bt)},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(w)})}}class qt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Gt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Gt=navigator.hardwareConcurrency)}catch{}const Jt=new f,Qt=new f;let Xt,Yt,$t,te,ee,ne,se=0;async function re(t){let e,o;try{const{options:c,config:i}=t;if(c.format&&await(async(t,e)=>{!Mt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=z&&typeof s!=z)throw new r("Invalid codec module");Mt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI),i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Vt.get(t);n||(n=new f,Vt.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(Zt)?i.CompressionStream:i.DecompressionStream,Dt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new w(t=>Jt.set(se,t));oe({type:"pull",messageId:se}),se=(se+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new w(t=>e=t);Qt.set(se,e),oe({type:jt,value:t,messageId:se}),se=(se+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Nt(c,i),Xt=new AbortController;const{signal:u}=Xt;await l.pipeThrough(e).pipeThrough(new qt((t=>s.max(t.chunkSize,64))(i))).pipeTo(o,{signal:u,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:h,inputSize:p,outputSize:d}=e;oe({type:Ht,result:{signature:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ce(t)}}function oe(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ce(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i}=t,a={message:e,stack:n,code:s,name:o,outputSize:c};i&&(a.cause={name:i.name,message:i.message}),p({error:a})}function ie(t,e,n={}){if(!Yt){const t=new r("WASM module not loaded");throw t.cause=ne,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=$t(i),this.in=$t(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.wt=new o(i),t?(this.ut=Yt.deflate_process,this.ht=Yt.deflate_last_consumed,this.yt=Yt.deflate_end,this.gt=Yt.deflate_new(),n="gzip"===e?Yt.deflate_init_gzip(this.gt,c):"deflate-raw"===e?Yt.deflate_init_raw(this.gt,c):Yt.deflate_init(this.gt,c)):"deflate64-raw"===e?(this.ut=Yt.inflate9_process,this.ht=Yt.inflate9_last_consumed,this.yt=Yt.inflate9_end,this.gt=Yt.inflate9_new(),n=Yt.inflate9_init_raw(this.gt)):(this.ut=Yt.inflate_process,this.ht=Yt.inflate_last_consumed,this.yt=Yt.inflate_end,this.gt=Yt.inflate_new(),n="deflate-raw"===e?Yt.inflate_init_raw(this.gt):"gzip"===e?Yt.inflate_init_gzip(this.gt):Yt.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(ee.buffer),f=this.ut,l=this.ht,w=this.lt,u=this.wt;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&te&&(te(this.in),this.in=0),this.in=$t(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,w,i,0),p=16777215&o;if(p&&(u.set(a.subarray(w,w+p),0),n.enqueue(u.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(ee.buffer),s=this.ut,c=this.lt,a=this.wt;for(;;){const o=s(this.gt,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&te&&te(t.in),t.in=0,t.lt&&te&&te(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&re(t),e==jt){const t=Jt.get(n);Jt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Qt.get(n);Qt.delete(n),t()}e==Ht&&Xt.abort()}catch(t){ce(t)}}),p({type:"ready"});class ae{constructor(t="deflate",e){return ie(!0,t,e)}}class fe{constructor(t="deflate",e){return ie(!1,t,e)}}ae.St=!0,fe.St=!0;let le=!1;self.initModule=async t=>{try{const e=await(async(t,{baseURI:e})=>{if(!le)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(Yt=t,({malloc:$t,free:te,memory:ee}=Yt),"function"!=typeof $t||"function"!=typeof te||!ee)throw Yt=$t=te=ee=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),le=!0}catch(t){throw(t=>{ne=t})(t),t}})(t.wasmURI,t);return t.CompressionStreamZlib=ae,t.DecompressionStreamZlib=fe,e}catch{}}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return "data:"+n+","+encodeURIComponent(e)}});}
221
+ function t$1(t){const e='(t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){"use strict";const{Array:t,Object:e,Number:n,Math:s,Error:r,Uint8Array:o,Uint16Array:c,Uint32Array:i,Int32Array:a,Map:f,DataView:l,Promise:u,TextEncoder:w,crypto:h,postMessage:p,TransformStream:d,ReadableStream:y,WritableStream:m,CompressionStream:g,DecompressionStream:S}=self,v=void 0,b="undefined",k="function",z=new o,C=[[],[],[],[],[],[],[],[]];for(let t=0;256>t;t++){let e=t;for(let t=0;8>t;t++)e=1&e?e>>>1^3988292384:e>>>1;C[0][t]=e}for(let t=0;256>t;t++)for(let e=1;8>e;e++){const n=C[e-1][t];C[e][t]=n>>>8^C[0][255&n]}const[A,I,x,M,P,B,D,R]=C;class U{constructor(t){this.o=t||-1}append(t){let e=0|this.o;const n=0|t.length;let s=0;if(n>=8&&t.buffer){const r=new l(t.buffer,t.byteOffset,n),o=n-8;for(;o>=s;s+=8){const t=e^r.getInt32(s,!0),n=r.getInt32(s+4,!0);e=R[255&t]^D[t>>>8&255]^B[t>>>16&255]^P[t>>>24&255]^M[255&n]^x[n>>>8&255]^I[n>>>16&255]^A[n>>>24&255]}}for(;n>s;s++)e=e>>>8^A[255&(e^t[s])];this.o=e}get(){return~this.o}}class W extends d{constructor(){let t;const e=new U;super({transform(t,n){e.append(t),n.enqueue(t)},flush(){const n=new o(4);new l(n.buffer).setUint32(0,e.get()),t.value=n}}),t=this}}function _(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function T(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const V={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=V.l(n);return 32===s?t.concat(e):V.h(e,s,0|n,t.slice(0,t.length-1))},m(t){const e=t.length;if(0===e)return 0;const n=t[e-1];return 32*(e-1)+V.l(n)},S(t,e){if(32*t.length<e)return t;const n=(t=t.slice(0,s.ceil(e/32))).length;return e&=31,n>0&&e&&(t[n-1]=V.v(e,t[n-1]&2147483648>>e-1,1)),t},v:(t,e,n)=>32===t?e:(n?0|e:e<<32-t)+1099511627776*t,l:t=>s.round(t/1099511627776)||32,h(t,e,n,s){for(void 0===s&&(s=[]);e>=32;e-=32)s.push(n),n=0;if(0===e)return s.concat(t);for(let r=0;r<t.length;r++)s.push(n|t[r]>>>e),n=t[r]<<32-e;const r=t.length?t[t.length-1]:0,o=V.l(r);return s.push(V.v(e+o&31,e+o>32?n:s.pop(),1)),s}},K={bytes:{C(t){const e=V.m(t)/8,n=new o(e);let s;for(let r=0;e>r;r++)3&r||(s=t[r/4]),n[r]=s>>>24,s<<=8;return n},A(t){const e=[];let n,s=0;for(n=0;n<t.length;n++)s=s<<8|t[n],3&~n||(e.push(s),s=0);return 3&n&&e.push(V.v(8*(3&n),s)),e}}},E=class{constructor(t){const e=this;e.blockSize=512,e.I=[1732584193,4023233417,2562383102,271733878,3285377520],e.M=[1518500249,1859775393,2400959708,3395469782],t?(e.P=t.P.slice(0),e.B=t.B.slice(0),e.D=t.D):e.reset()}reset(){const t=this;return t.P=t.I.slice(0),t.B=[],t.D=0,t}update(t){const e=this;"string"==typeof t&&(t=K.R.A(t));const n=e.B=V.concat(e.B,t),s=e.D,o=e.D=s+V.m(t);if(o>9007199254740991)throw new r("Cannot hash more than 2^53 - 1 bits");const c=new i(n);let a=0;for(let t=e.blockSize+s-(e.blockSize+s&e.blockSize-1);o>=t;t+=e.blockSize)e.U(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}W(){const t=this;let e=t.B;const n=t.P;e=V.concat(e,[V.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.D/4294967296)),e.push(0|t.D);e.length;)t.U(e.splice(0,16));return t.reset(),n}_(t,e,n,s){return t>19?t>39?t>59?t>79?void 0:e^n^s:e&n|e&s|n&s:e^n^s:e&n|~e&s}T(t,e){return e<<t|e>>>32-t}U(e){const n=this,r=n.P,o=t(80);for(let t=0;16>t;t++)o[t]=e[t];let c=r[0],i=r[1],a=r[2],f=r[3],l=r[4];for(let t=0;79>=t;t++){16>t||(o[t]=n.T(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n.T(5,c)+n._(t,i,a,f)+l+o[t]+n.M[s.floor(t/20)]|0;l=f,f=a,a=n.T(30,i),i=c,c=e}r[0]=r[0]+c|0,r[1]=r[1]+i|0,r[2]=r[2]+a|0,r[3]=r[3]+f|0,r[4]=r[4]+l|0}},F={importKey:t=>new F.V(K.bytes.A(t)),K(t,e,n,s){if(n=n||1e4,0>s||0>n)throw new r("invalid params to pbkdf2");const o=1+(s>>5)<<2;let c,i,a,f,u;const w=new ArrayBuffer(o),h=new l(w);let p=0;const d=V;for(e=K.bytes.A(e),u=1;(o||1)>p;u++){for(c=i=t.encrypt(d.concat(e,[u])),a=1;n>a;a++)for(i=t.encrypt(i),f=0;f<i.length;f++)c[f]^=i[f];for(a=0;(o||1)>p&&a<c.length;a++)h.setInt32(p,c[a]),p+=4}return w.slice(0,s/8)},V:class{constructor(t){const e=this,n=e.F=E,s=[[],[]];e.L=[new n,new n];const r=e.L[0].blockSize/32;t.length>r&&(t=(new n).update(t).W());for(let e=0;r>e;e++)s[0][e]=909522486^t[e],s[1][e]=1549556828^t[e];e.L[0].update(s[0]),e.L[1].update(s[1]),e.O=new n(e.L[0])}reset(){const t=this;t.O=new t.F(t.L[0]),t.j=!1}update(t){this.j=!0,this.O.update(t)}digest(){const t=this,e=t.O.W(),n=new t.F(t.L[1]).update(e).W();return t.reset(),n}encrypt(t){if(this.j)throw new r("encrypt on already updated hmac called!");return this.update(t),this.digest(t)}}},L=typeof h!=b&&typeof h.getRandomValues==k,O="Invalid password",j="Invalid signature",H=j,Z="zipjs-abort-check-password";function N(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const q=16,G={name:"PBKDF2"},J=e.assign({hash:{name:"HMAC"}},G),Q=e.assign({iterations:1e3,hash:{name:"SHA-1"}},G),X=["deriveBits"],Y=[8,12,16],$=[16,24,32],tt=10,et=[0,0,0,0],nt=typeof h!=b,st=nt&&h.subtle,rt=nt&&typeof st!=b,ot=K.bytes,ct=class{constructor(t){const e=this;e.H=[[[],[],[],[],[]],[[],[],[],[],[]]],e.H[0][0][0]||e.Z();const n=e.H[0][4],s=e.H[1],o=t.length;let c,i,a,f=1;if(4!==o&&6!==o&&8!==o)throw new r("invalid aes key size");for(e.M=[i=t.slice(0),a=[]],c=o;4*o+28>c;c++){let t=i[c-1];(c%o===0||8===o&&c%o===4)&&(t=n[t>>>24]<<24^n[t>>16&255]<<16^n[t>>8&255]<<8^n[255&t],c%o===0&&(t=t<<8^t>>>24^f<<24,f=f<<1^283*(f>>7))),i[c]=i[c-o]^t}for(let t=0;c;t++,c--){const e=i[3&t?c:c-4];a[t]=4>=c||4>t?e:s[0][n[e>>>24]]^s[1][n[e>>16&255]]^s[2][n[e>>8&255]]^s[3][n[255&e]]}}encrypt(t){return this.N(t,0)}decrypt(t){return this.N(t,1)}Z(){const t=this.H[0],e=this.H[1],n=t[4],s=e[4],r=[],o=[];let c,i,a,f;for(let t=0;256>t;t++)o[(r[t]=t<<1^283*(t>>7))^t]=t;for(let l=c=0;!n[l];l^=i||1,c=o[c]||1){let o=c^c<<1^c<<2^c<<3^c<<4;o=o>>8^255&o^99,n[l]=o,s[o]=l,f=r[a=r[i=r[l]]];let u=16843009*f^65537*a^257*i^16843008*l,w=257*r[o]^16843008*o;for(let n=0;4>n;n++)t[n][l]=w=w<<24^w>>>8,e[n][o]=u=u<<24^u>>>8}for(let n=0;5>n;n++)t[n]=t[n].slice(0),e[n]=e[n].slice(0)}N(t,e){if(4!==t.length)throw new r("invalid aes block size");const n=this.M[e],s=n.length/4-2,o=[0,0,0,0],c=this.H[e],i=c[0],a=c[1],f=c[2],l=c[3],u=c[4];let w,h,p,d=t[0]^n[0],y=t[e?3:1]^n[1],m=t[2]^n[2],g=t[e?1:3]^n[3],S=4;for(let t=0;s>t;t++)w=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&g]^n[S],h=i[y>>>24]^a[m>>16&255]^f[g>>8&255]^l[255&d]^n[S+1],p=i[m>>>24]^a[g>>16&255]^f[d>>8&255]^l[255&y]^n[S+2],g=i[g>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[S+3],S+=4,d=w,y=h,m=p;for(let t=0;4>t;t++)o[e?3&-t:t]=u[d>>>24]<<24^u[y>>16&255]<<16^u[m>>8&255]<<8^u[255&g]^n[S++],w=d,d=y,y=m,m=g,g=w;return o}},it=class{constructor(t,e){this.G=t,this.J=e,this.X=e}reset(){this.X=this.J}update(t){return this.Y(this.G,t,this.X)}$(t){if(255&~(t>>24))t+=1<<24;else{let e=t>>16&255,n=t>>8&255,s=255&t;255===e?(e=0,255===n?(n=0,255===s?s=0:++s):++n):++e,t=0,t+=e<<16,t+=n<<8,t+=s}return t}et(t){0===(t[0]=this.$(t[0]))&&(t[1]=this.$(t[1]))}Y(t,e,n){let s;if(!(s=e.length))return[];const r=V.m(e);for(let r=0;s>r;r+=4){this.et(n);const s=t.encrypt(n);e[r]^=s[0],e[r+1]^=s[1],e[r+2]^=s[2],e[r+3]^=s[3]}return V.S(e,r)}},at=F.V;let ft=nt&&rt&&typeof st.importKey==k,lt=nt&&rt&&typeof st.deriveBits==k;class ut extends d{constructor({password:t,rawPassword:e,encryptionStrength:n,checkPasswordOnly:s,checkAuthenticationCode:c=!0}){super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:c,strength:i,nt:a,ready:f}=n;c?(await(async(t,e,n,s)=>{const o=await dt(t,e,n,mt(s,0,Y[e])),c=mt(s,Y[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,mt(t,0,Y[i]+2)),t=mt(t,Y[i]+2),s?e.error(new r(Z)):a()):await f;const l=new o(t.length-tt-(t.length-tt)%q);e.enqueue(pt(n,t,l,0,tt,!0))},async flush(t){const{st:e,ot:n,pending:s,ready:o}=this;if(n&&e){await o;const i=mt(s,0,s.length-tt),a=mt(s,s.length-tt);let f=z;if(i.length){const t=St(ot,i);n.update(t);const s=e.update(t);f=gt(ot,s)}const l=mt(gt(ot,n.digest()),0,tt);let u=s.length<tt?1:0;for(let t=0;tt>t;t++)u|=l[t]^a[t];if(u&&c)throw new r(H);t.enqueue(f)}}})}}class wt extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){let s;super({start(){ht(this,t,e,n)},async transform(t,e){const n=this,{password:s,strength:r,nt:c,ready:i}=n;let a=z;s?(a=await(async(t,e,n)=>{const s=N(new o(Y[e]));return _(s,await dt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%q);f.set(a,0),e.enqueue(pt(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:r,ready:o}=this;if(n&&e){await o;let c=z;if(r.length){const t=e.update(St(ot,r));n.update(t),c=gt(ot,t)}s.signature=gt(ot,n.digest()).slice(0,tt),t.enqueue(_(c,s.signature))}}}),s=this}}function ht(t,n,s,r){e.assign(t,{ready:new u(e=>t.nt=e),password:yt(n,s),strength:r-1,pending:z})}function pt(t,e,n,s,r,c){const{st:i,ot:a,pending:f}=t;f.length&&(e=_(f,e));const l=e.length-r;let u;for(n=((t,e)=>{if(e&&e>t.length){const n=t;(t=new o(e)).set(n,0)}return t})(n,s+(l-l%q)),u=0;l-q>=u;u+=q){const t=St(ot,mt(e,u,u+q));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(gt(ot,r),u+s)}return t.pending=mt(e,u),n}async function dt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!ft)return F.importKey(e);try{return await st.importKey("raw",e,n,!1,r)}catch{return ft=!1,F.importKey(e)}})(0,r,J,0,X),a=await(async(t,e,n)=>{if(!lt)return F.K(e,t.salt,Q.iterations,n);try{return await st.deriveBits(t,e,n)}catch{return lt=!1,F.K(e,t.salt,Q.iterations,n)}})(e.assign({salt:c},Q),i,8*(2*$[s]+2)),f=new o(a),l=St(ot,mt(f,0,$[s])),u=St(ot,mt(f,$[s],2*$[s])),w=mt(f,2*$[s]);return e.assign(n,{keys:{key:l,ct:u,passwordVerification:w},st:new it(new ct(l),t.from(et)),ot:new at(u)}),w}function yt(t,e){return e===v?(t=>{if(typeof w==b){const e=new o((t=unescape(encodeURIComponent(t))).length);for(let n=0;n<e.length;n++)e[n]=t.charCodeAt(n);return e}return(new w).encode(t)})(t):e}function mt(t,e,n){return t.subarray(e,n)}function gt(t,e){return t.C(e)}function St(t,e){return t.A(e)}class vt extends d{constructor({password:t,rawPassword:e,passwordVerification:n,checkPasswordOnly:s}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;if(n.password||n.rawPassword){const e=zt(n,t.subarray(0,12));if(n.password=n.rawPassword=null,0!=(e[11]^n.passwordVerification))throw new r(O);t=t.subarray(12)}s?e.error(new r(Z)):e.enqueue(zt(n,t))}})}}class bt extends d{constructor({password:t,rawPassword:e,passwordVerification:n}){super({start(){kt(this,t,e,n)},transform(t,e){const n=this;let s,r;if(n.password||n.rawPassword){n.password=n.rawPassword=null;const e=N(new o(12));e[11]=n.passwordVerification,s=new o(t.length+e.length),s.set(Ct(n,e),0),r=12}else s=new o(t.length),r=0;s.set(Ct(n,t),r),e.enqueue(s)}})}}function kt(t,n,s,r){e.assign(t,{password:n,rawPassword:s,passwordVerification:r}),((t,n,s)=>{const r=[305419896,591751049,878082192];if(e.assign(t,{keys:r,it:new U(r[0]),ft:new U(r[2])}),s)for(let e=0;e<s.length;e++)At(t,s[e]);else for(let e=0;e<n.length;e++)At(t,n.charCodeAt(e))})(t,n,s)}function zt(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,n[s]);return n}function Ct(t,e){const n=new o(e.length);for(let s=0;s<e.length;s++)n[s]=It(t)^e[s],At(t,e[s]);return n}function At(t,e){let[,n]=t.keys;t.it.append([e]);const r=~t.it.get();n=Mt(s.imul(Mt(n+xt(r)),134775813)+1),t.ft.append([n>>>24]);const o=~t.ft.get();t.keys=[r,n,o]}function It(t){const e=2|t.keys[2];return xt(s.imul(e,1^e)>>>8)}function xt(t){return 255&t}function Mt(t){return 4294967295&t}const Pt=new f;function Bt(t){return Pt.get(t)}const Dt="Invalid uncompressed size",Rt=j,Ut="deflate-raw",Wt="gzip",_t=[31,139,8];class Tt extends d{constructor(t,{chunkSize:e,CompressionStreamZlib:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:u,format:w,compressionMethod:h}=t,p=this;let d,y,m,g=super.readable;const S=w&&Bt(w),v=a&&r&&!u&&!S&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new W,g=jt(g,d)),r)if(S)g=Ht(g,Lt(S.CompressionStream,w,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new Vt,g=Ht(g,new s(Wt)),g=jt(g,m);else try{g=Ot(g,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Wt)}catch{throw t}g=Ht(g,e),g=jt(g,new Vt)}o&&(i?g=jt(g,new bt(t)):(y=new wt(t),g=jt(g,y))),Ft(p,g,()=>{let t;o&&!i&&(t=y.signature),o&&!i||!a||(t=v?m.signature:new l(d.value.buffer).getUint32(0)),p.signature=t})}}class Vt extends d{constructor(){let t,e=10,n=new o(0);super({transform(t,r){if(e){const n=s.min(e,t.length);if(e-=n,!(t=t.subarray(n)).length)return}const o=n.length+t.length;if(8>=o)return void(n=_(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(_(n.subarray(0,i),t.subarray(0,c-i))),n=_(n.subarray(i),t.subarray(c-i))},flush(){const e=T(n);t.signature=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Kt extends d{constructor(t,{chunkSize:e,DecompressionStreamZlib:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,signature:f,compressed:w,useCompressionStream:h,deflate64:p,format:m,compressionMethod:g,rawBitFlag:S,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=jt(C,new vt(t)):(z=new ut(t),C=jt(C,z))),w){const t=m&&Bt(m);if(t)C=Ht(C,Lt(t.DecompressionStream,m,{chunkSize:e,compressionMethod:g,rawBitFlag:S,uncompressedSize:b}));else try{C=Ot(C,h,{chunkSize:e,deflate64:p},s,n)}catch(t){if(p||b===v)throw t;let e;try{e=new s(Wt)}catch{throw t}C=((t,e,n)=>{const s=new U;let c,i,a,f=0,l=!1;const w=new u((t,e)=>{i=t,a=e});w.catch(()=>{}),n||i();const h=new d({start(t){const e=new o(10);e.set(_t),t.enqueue(e)},transform(t,e){e.enqueue(t)},async flush(t){l=!0,y();try{await w}finally{m()}const e=new o(8),r=T(e);r.setUint32(0,s.get(),!0),r.setUint32(4,n,!0),t.enqueue(e)},cancel(t){a(t)}}),p=new d({transform(t,e){s.append(t),f+=t.length,n>f?l&&y():i(),e.enqueue(t)},cancel(t){a(t)}});return t=jt(t,h),jt(t=Ht(t,e),p);function y(){m(),c=setTimeout(()=>a(new r(Dt)),5e3)}function m(){clearTimeout(c)}})(C,e,b)}C=(t=>{const e=t.getReader();return new y({async pull(t){let n;try{n=await e.read()}catch(t){if(t&&t.message)throw t;const e=new r("Invalid compressed data");throw e.cause=t,e}const{value:s,done:o}=n;o?t.close():t.enqueue(s)},cancel:t=>e.cancel(t)})})(C)}a&&(k=new W,C=jt(C,k)),Ft(this,C,()=>{if(a){const t=new l(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r(Rt)}})}}const Et=new f;function Ft(t,n,s){n=jt(n,new d({flush:s})),e.defineProperty(t,"readable",{get:()=>n})}function Lt(t,e,n){if(!t)throw new r("Compression method not supported");return new t(e,n)}function Ot(t,e,n,s,r){const o=e&&s?s:r||s,c=n.deflate64?"deflate64-raw":Ut;let i;try{i=new o(c,n)}catch(t){if(!e||!r||o==r)throw t;i=new r(c,n)}return Ht(t,i)}function jt(t,e){return(t=>{if(t instanceof y)return t;const e=t.getReader();return new y({async pull(t){const{value:n,done:s}=await e.read();s?t.close():t.enqueue(n)},cancel:t=>e.cancel(t)})})(t).pipeThrough(e)}function Ht(t,e){const n=e.writable.getWriter(),s=t.getReader();return(async()=>{try{for(;;){await n.ready;const t=await s.read();if(t.done){await n.close();break}await n.write(t.value)}}catch(t){await(async(t,e)=>{try{await t.abort(e)}catch{}})(n,t),await(async(t,e)=>{try{await t.cancel(e)}catch{}})(s,t)}})(),e.readable}const Zt="data",Nt="close",qt="deflate";class Gt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(qt)?c=Tt:o.startsWith("inflate")&&(c=Kt),s.outputSize=0;let i=0;const a=new c(t,n),f=super.readable,l=new d({transform(t,e){t&&t.length&&(i+=t.length,e.enqueue(t))},flush(){e.assign(s,{inputSize:i})}}),u=new d({transform(e,n){if(e&&e.length&&(n.enqueue(e),s.outputSize+=e.length,t.outputSize!==v&&s.outputSize>t.outputSize))throw new r(Dt)},flush(){const{signature:t}=a;e.assign(s,{signature:t,inputSize:i})}});e.defineProperty(s,"readable",{get:()=>f.pipeThrough(l).pipeThrough(a).pipeThrough(u)})}}class Jt extends d{constructor(t){const e=[];let s=0;function r(){const n=new o(t);let r=0;for(;t>r;){const s=e[0],o=t-r;s.length>o?(n.set(s.subarray(0,o),r),e[0]=s.subarray(o),r+=o):(n.set(s,r),r+=s.length,e.shift())}return s-=t,n}n.isFinite(t)&&t>=1||(t=65536),super({transform(n,o){for(e.push(n),s+=n.length;s>t;)o.enqueue(r())},flush(t){s&&t.enqueue(((t,e)=>{const n=new o(e);let s=0;for(const e of t)n.set(e,s),s+=e.length;return n})(e,s))}})}}let Qt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Qt=navigator.hardwareConcurrency)}catch{}const Xt=new f,Yt=new f;let $t,te,ee,ne,se,re,oe=0;async function ce(t){let e,o;try{const{options:c,config:i}=t;if(c.format&&await(async(t,e)=>{!Pt.has(t)&&e&&((t,e)=>{const{CompressionStream:n,DecompressionStream:s}=e;if(typeof n!=k&&typeof s!=k)throw new r("Invalid codec module");Pt.set(t,{CompressionStream:n,DecompressionStream:s})})(t,await(import(e)))})(c.format,c.codecURI),i.CompressionStream=self.CompressionStream,i.DecompressionStream=self.DecompressionStream,c.compressed&&!c.format)if(c.useCompressionStream){if(!((t,e)=>{if(!t)return!1;let n=Et.get(t);n||(n=new f,Et.set(t,n));let s=n.get(e);if(s===v){try{new t(e),s=!0}catch{s=!1}n.set(e,s)}return s})(c.codecType.startsWith(qt)?i.CompressionStream:i.DecompressionStream,Ut))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new u(t=>Xt.set(oe,t));ie({type:"pull",messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER;const{value:s,done:r}=await e;t.enqueue(s),r&&t.close()}},a);o=t.writable||new m({async write(t){let e;const s=new u(t=>e=t);Yt.set(oe,e),ie({type:Zt,value:t,messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Gt(c,i),$t=new AbortController;const{signal:w}=$t;await l.pipeThrough(e).pipeThrough(new Jt((t=>s.max(t.chunkSize,64))(i))).pipeTo(o,{signal:w,preventClose:!0,preventAbort:!0}),await o.getWriter().close();const{signature:h,inputSize:p,outputSize:d}=e;ie({type:Nt,result:{signature:h,inputSize:p,outputSize:d}})}catch(t){if(t.outputSize=e?e.outputSize:0,o&&!o.locked)try{await o.getWriter().close()}catch{}ae(t)}}function ie(t){const{value:e}=t;if(e)if(e.length)try{t.value=(n=e,n.byteOffset||n.byteLength!=n.buffer.byteLength?new o(n):n).buffer,p(t,[t.value])}catch{p(t)}else p(t);else p(t);var n}function ae(t=new r("Unknown error")){const{message:e,stack:n,code:s,name:o,outputSize:c,cause:i}=t,a={message:e,stack:n,code:s,name:o,outputSize:c};i&&(a.cause={name:i.name,message:i.message}),p({error:a})}function fe(t,e,n={}){if(!te){const t=new r("WASM module not loaded");throw t.cause=re,t}const c="number"==typeof n.level?n.level:-1,i="number"==typeof n.outBuffer?n.outBuffer:65536,a="number"==typeof n.inBufferSize?n.inBufferSize:65536;return new d({start(){try{let n;if(this.lt=ee(i),this.in=ee(a),this.inBufferSize=a,!this.lt||!this.in)throw new r("allocation failed");if(this.ut=new o(i),t?(this.wt=te.deflate_process,this.ht=te.deflate_last_consumed,this.yt=te.deflate_end,this.gt=te.deflate_new(),n="gzip"===e?te.deflate_init_gzip(this.gt,c):"deflate-raw"===e?te.deflate_init_raw(this.gt,c):te.deflate_init(this.gt,c)):"deflate64-raw"===e?(this.wt=te.inflate9_process,this.ht=te.inflate9_last_consumed,this.yt=te.inflate9_end,this.gt=te.inflate9_new(),n=te.inflate9_init_raw(this.gt)):(this.wt=te.inflate_process,this.ht=te.inflate_last_consumed,this.yt=te.inflate_end,this.gt=te.inflate_new(),n="deflate-raw"===e?te.inflate_init_raw(this.gt):"gzip"===e?te.inflate_init_gzip(this.gt):te.inflate_init(this.gt)),0!==n)throw new r("init failed:"+n)}catch(t){throw f(this),t}},transform(e,n){try{const c=e,a=new o(se.buffer),f=this.wt,l=this.ht,u=this.lt,w=this.ut;let h=0;for(;h<c.length;){const e=s.min(c.length-h,32768);if((!this.in||this.inBufferSize<e)&&(this.in&&ne&&(ne(this.in),this.in=0),this.in=ee(e),this.inBufferSize=e,!this.in))throw new r("allocation failed");a.set(c.subarray(h,h+e),this.in);const o=f(this.gt,this.in,e,u,i,0),p=16777215&o;if(p&&(w.set(a.subarray(u,u+p),0),n.enqueue(w.slice(0,p))),!t){const t=o>>24&255,e=128&t?t-256:t;if(0>e)throw new r("process error:"+e)}const d=l(this.gt);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(se.buffer),s=this.wt,c=this.lt,a=this.ut;for(;;){const o=s(this.gt,0,0,c,i,4),f=16777215&o,l=o>>24&255;if(!t){const t=128&l?l-256:l;if(0>t)throw new r("process error:"+t)}if(f&&(a.set(n.subarray(c,c+f),0),e.enqueue(a.slice(0,f))),1===l||0===f)break}}catch(t){e.error(t)}finally{const t=f(this);0!==t&&e.error(new r("end error:"+t))}},cancel(){f(this)}});function f(t){let e=0;return t.gt&&t.yt&&(e=t.yt(t.gt)),t.gt=0,t.in&&ne&&ne(t.in),t.in=0,t.lt&&ne&&ne(t.lt),t.lt=0,e}}addEventListener("message",({data:t})=>{const{type:e,messageId:n,value:s,done:r}=t;try{if("start"==e&&ce(t),e==Zt){const t=Xt.get(n);Xt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Yt.get(n);Yt.delete(n),t()}e==Nt&&$t.abort()}catch(t){ae(t)}}),p({type:"ready"});class le{constructor(t="deflate",e){return fe(!0,t,e)}}class ue{constructor(t="deflate",e){return fe(!1,t,e)}}le.St=!0,ue.St=!0;let we=!1;self.initModule=async t=>{const e=await(async(t,{baseURI:e})=>{if(!we)try{await(async(t,e)=>{let n,s;try{try{s=new URL(t,e)}catch{}const r=await fetch(s);n=await r.arrayBuffer()}catch(e){if(!t.startsWith("data:application/wasm;base64,"))throw e;n=(t=>{const e=t.split(",")[1],n=atob(e),s=n.length,r=new o(s);for(let t=0;s>t;++t)r[t]=n.charCodeAt(t);return r.buffer})(t)}(t=>{if(te=t,({malloc:ee,free:ne,memory:se}=te),"function"!=typeof ee||"function"!=typeof ne||!se)throw te=ee=ne=se=null,new r("Invalid WASM module")})((await WebAssembly.instantiate(n)).instance.exports)})(t,e),we=!0}catch(t){throw(t=>{re=t})(t),t}})(t.wasmURI,t);return t.CompressionStreamZlib=le,t.DecompressionStreamZlib=ue,e}});\n';t({workerURI:t=>{const n="text/javascript";if(t){const t=new Blob([e],{type:n});return URL.createObjectURL(t)}return "data:"+n+","+encodeURIComponent(e)}});}
222
222
 
223
223
  /*
224
224
  Copyright (c) 2025 Gildas Lormeau. All rights reserved.
@@ -1365,6 +1365,7 @@ const GET_RANDOM_VALUES_SUPPORTED = typeof crypto != UNDEFINED_TYPE && typeof cr
1365
1365
 
1366
1366
  const ERR_INVALID_PASSWORD = "Invalid password";
1367
1367
  const ERR_INVALID_SIGNATURE = "Invalid signature";
1368
+ const ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_SIGNATURE;
1368
1369
  const ERR_ABORT_CHECK_PASSWORD = "zipjs-abort-check-password";
1369
1370
  const ERR_UNSUPPORTED_CRYPTO_API = "Crypto API not supported";
1370
1371
 
@@ -1431,7 +1432,7 @@ let DERIVE_BITS_SUPPORTED = CRYPTO_API_SUPPORTED && SUBTLE_API_SUPPORTED && type
1431
1432
 
1432
1433
  class AESDecryptionStream extends TransformStream {
1433
1434
 
1434
- constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly }) {
1435
+ constructor({ password, rawPassword, encryptionStrength, checkPasswordOnly, checkAuthenticationCode = true }) {
1435
1436
  super({
1436
1437
  start() {
1437
1438
  initAesCrypto(this, password, rawPassword, encryptionStrength);
@@ -1481,8 +1482,8 @@ class AESDecryptionStream extends TransformStream {
1481
1482
  for (let indexSignature = 0; indexSignature < SIGNATURE_LENGTH; indexSignature++) {
1482
1483
  invalidSignature |= signature[indexSignature] ^ originalSignature[indexSignature];
1483
1484
  }
1484
- if (invalidSignature) {
1485
- throw new Error(ERR_INVALID_SIGNATURE);
1485
+ if (invalidSignature && checkAuthenticationCode) {
1486
+ throw new Error(ERR_INVALID_AUTHENTICATION_CODE);
1486
1487
  }
1487
1488
  controller.enqueue(decryptedChunkArray);
1488
1489
  }
@@ -1920,6 +1921,7 @@ function toCompatibleWritable(writable) {
1920
1921
 
1921
1922
  const ERR_INVALID_UNCOMPRESSED_SIZE = "Invalid uncompressed size";
1922
1923
  const ERR_INVALID_COMPRESSED_DATA = "Invalid compressed data";
1924
+ const ERR_INVALID_CRC32 = ERR_INVALID_SIGNATURE;
1923
1925
  const ERR_UNSUPPORTED_COMPRESSION$2 = "Compression method not supported";
1924
1926
  const FORMAT_DEFLATE_RAW = "deflate-raw";
1925
1927
  const FORMAT_DEFLATE64_RAW = "deflate64-raw";
@@ -1933,14 +1935,14 @@ class DeflateStream extends TransformStream {
1933
1935
 
1934
1936
  constructor(options, { chunkSize, CompressionStreamZlib, CompressionStream }) {
1935
1937
  super({});
1936
- const { compressed, encrypted, useCompressionStream, zipCrypto, signed, level, deflate64, format, compressionMethod } = options;
1938
+ const { compressed, encrypted, useCompressionStream, zipCrypto, computeCrc32, level, deflate64, format, compressionMethod } = options;
1937
1939
  const stream = this;
1938
1940
  let crc32Stream, encryptionStream, gzipCrc32Stream;
1939
1941
  let readable = super.readable;
1940
1942
  const codecStreams = format && getCodecStreams(format);
1941
- const useGzipCrc32 = signed && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
1943
+ const useGzipCrc32 = computeCrc32 && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) &&
1942
1944
  Boolean(useCompressionStream && CompressionStream);
1943
- if ((!encrypted || zipCrypto) && signed && !useGzipCrc32) {
1945
+ if ((!encrypted || zipCrypto) && computeCrc32 && !useGzipCrc32) {
1944
1946
  crc32Stream = new Crc32Stream();
1945
1947
  readable = pipeThrough(readable, crc32Stream);
1946
1948
  }
@@ -1979,7 +1981,7 @@ class DeflateStream extends TransformStream {
1979
1981
  if (encrypted && !zipCrypto) {
1980
1982
  signature = encryptionStream.signature;
1981
1983
  }
1982
- if ((!encrypted || zipCrypto) && signed) {
1984
+ if ((!encrypted || zipCrypto) && computeCrc32) {
1983
1985
  signature = useGzipCrc32 ? gzipCrc32Stream.signature : new DataView(crc32Stream.value.buffer).getUint32(0);
1984
1986
  }
1985
1987
  stream.signature = signature;
@@ -2102,7 +2104,7 @@ class InflateStream extends TransformStream {
2102
2104
 
2103
2105
  constructor(options, { chunkSize, DecompressionStreamZlib, DecompressionStream }) {
2104
2106
  super({});
2105
- const { zipCrypto, encrypted, signed, signature, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
2107
+ const { zipCrypto, encrypted, checkCrc32, signature, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
2106
2108
  let crc32Stream, decryptionStream;
2107
2109
  let readable = super.readable;
2108
2110
  if (encrypted) {
@@ -2135,15 +2137,15 @@ class InflateStream extends TransformStream {
2135
2137
  }
2136
2138
  readable = mapInflateStreamError(readable);
2137
2139
  }
2138
- if ((!encrypted || zipCrypto) && signed) {
2140
+ if (checkCrc32) {
2139
2141
  crc32Stream = new Crc32Stream();
2140
2142
  readable = pipeThrough(readable, crc32Stream);
2141
2143
  }
2142
2144
  setReadable(this, readable, () => {
2143
- if ((!encrypted || zipCrypto) && signed) {
2145
+ if (checkCrc32) {
2144
2146
  const dataViewSignature = new DataView(crc32Stream.value.buffer);
2145
2147
  if (signature != dataViewSignature.getUint32(0, false)) {
2146
- throw new Error(ERR_INVALID_SIGNATURE);
2148
+ throw new Error(ERR_INVALID_CRC32);
2147
2149
  }
2148
2150
  }
2149
2151
  });
@@ -3038,7 +3040,7 @@ let indexWorker = 0;
3038
3040
 
3039
3041
  async function runWorker(stream, workerOptions) {
3040
3042
  const { options, config } = workerOptions;
3041
- const { transferStreams, useWebWorkers, useCompressionStream, compressed, signed, encrypted, format, codecURI } = options;
3043
+ const { transferStreams, useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
3042
3044
  const { workerURI, maxWorkers } = config;
3043
3045
  if (format) {
3044
3046
  if (codecURI) {
@@ -3047,7 +3049,7 @@ async function runWorker(stream, workerOptions) {
3047
3049
  await ensureCodecStreams(format, options.codecURI);
3048
3050
  }
3049
3051
  workerOptions.transferStreams = transferStreams || (transferStreams === UNDEFINED_VALUE && config.transferStreams);
3050
- const streamCopy = !compressed && !signed && !encrypted;
3052
+ const streamCopy = !compressed && !checkCrc32 && !computeCrc32 && !encrypted;
3051
3053
  const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
3052
3054
  workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
3053
3055
  workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
@@ -4271,6 +4273,7 @@ const PROPERTY_NAME_DIRECTORY = "directory";
4271
4273
  const PROPERTY_NAME_EXECUTABLE = "executable";
4272
4274
  const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
4273
4275
  const PROPERTY_NAME_SIGNATURE = "signature";
4276
+ const PROPERTY_NAME_CRC32 = "crc32";
4274
4277
  const PROPERTY_NAME_EXTRA_FIELD = "extraField";
4275
4278
  const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
4276
4279
  const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
@@ -4319,6 +4322,7 @@ const PROPERTY_NAMES = [
4319
4322
  PROPERTY_NAME_EXECUTABLE,
4320
4323
  PROPERTY_NAME_COMPRESSION_METHOD,
4321
4324
  PROPERTY_NAME_SIGNATURE,
4325
+ PROPERTY_NAME_CRC32,
4322
4326
  PROPERTY_NAME_EXTRA_FIELD,
4323
4327
  PROPERTY_NAME_EXTRA_FIELD_UNIX,
4324
4328
  PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
@@ -4390,6 +4394,8 @@ const OPTION_CHECK_OVERLAPPING_ENTRY_ONLY = "checkOverlappingEntryOnly";
4390
4394
  const OPTION_CHECK_OVERLAPPING_ENTRY = "checkOverlappingEntry";
4391
4395
  const OPTION_CHECK_AMBIGUITY = "checkAmbiguity";
4392
4396
  const OPTION_CHECK_SIGNATURE = "checkSignature";
4397
+ const OPTION_CHECK_CRC32 = "checkCrc32";
4398
+ const OPTION_CHECK_AUTHENTICATION_CODE = "checkAuthenticationCode";
4393
4399
  const OPTION_USE_WEB_WORKERS = "useWebWorkers";
4394
4400
  const OPTION_USE_COMPRESSION_STREAM = "useCompressionStream";
4395
4401
  const OPTION_TRANSFER_STREAMS = "transferStreams";
@@ -4461,6 +4467,7 @@ const CHARSET_UTF8 = "utf-8";
4461
4467
  const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
4462
4468
  const CHARSET_CP437 = "cp437";
4463
4469
  const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
4470
+ const VENDOR_VERSION_AE_1 = 1;
4464
4471
  const ZIP64_PROPERTIES = [
4465
4472
  [PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
4466
4473
  [PROPERTY_NAME_COMPRESSED_SIZE, MAX_32_BITS],
@@ -4940,6 +4947,11 @@ let ZipEntry$1 = class ZipEntry {
4940
4947
  if (deflate64) {
4941
4948
  useCompressionStream = false;
4942
4949
  }
4950
+ const checkCrc32Option = getOptionValue$1(zipEntry, options, OPTION_CHECK_CRC32);
4951
+ const checkCrc32 = (checkCrc32Option === UNDEFINED_VALUE ?
4952
+ getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) :
4953
+ checkCrc32Option) && !passThrough &&
4954
+ (!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1));
4943
4955
  const workerOptions = {
4944
4956
  options: {
4945
4957
  codecType: CODEC_INFLATE,
@@ -4947,7 +4959,8 @@ let ZipEntry$1 = class ZipEntry {
4947
4959
  rawPassword,
4948
4960
  zipCrypto,
4949
4961
  encryptionStrength: extraFieldAES && extraFieldAES.strength,
4950
- signed: getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) && !passThrough,
4962
+ checkCrc32,
4963
+ checkAuthenticationCode: getOptionValue$1(zipEntry, options, OPTION_CHECK_AUTHENTICATION_CODE),
4951
4964
  passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((signature >>> 24) & MAX_8_BITS)),
4952
4965
  outputSize: passThrough ? compressedSize : uncompressedSize,
4953
4966
  signature,
@@ -5063,6 +5076,7 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
5063
5076
  const compressionMethod = getUint16(dataView, offset + 4);
5064
5077
  Object.assign(directory, {
5065
5078
  signature: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5079
+ crc32: getUint32(dataView, offset + HEADER_OFFSET_SIGNATURE),
5066
5080
  compressedSize: getUint32(dataView, offset + HEADER_OFFSET_COMPRESSED_SIZE),
5067
5081
  uncompressedSize: getUint32(dataView, offset + HEADER_OFFSET_UNCOMPRESSED_SIZE)
5068
5082
  });
@@ -5164,6 +5178,9 @@ function readExtraFieldAES(extraFieldAES, directory, compressionMethod) {
5164
5178
  compressionMethod: getUint16(extraFieldView, 5)
5165
5179
  });
5166
5180
  directory.compressionMethod = extraFieldAES.compressionMethod;
5181
+ if (extraFieldAES.vendorVersion != VENDOR_VERSION_AE_1) {
5182
+ directory.crc32 = UNDEFINED_VALUE;
5183
+ }
5167
5184
  }
5168
5185
 
5169
5186
  function readExtraFieldNTFS(extraFieldNTFS, directory) {
@@ -5182,26 +5199,22 @@ function readExtraFieldNTFS(extraFieldNTFS, directory) {
5182
5199
  } catch {
5183
5200
  // ignored
5184
5201
  }
5185
- try {
5186
- if (tag1Data && tag1Data.length == 24) {
5187
- const tag1View = getDataView(tag1Data);
5188
- const rawLastModDate = tag1View.getBigUint64(0, true);
5189
- const rawLastAccessDate = tag1View.getBigUint64(8, true);
5190
- const rawCreationDate = tag1View.getBigUint64(16, true);
5191
- Object.assign(extraFieldNTFS, {
5192
- rawLastModDate,
5193
- rawLastAccessDate,
5194
- rawCreationDate
5195
- });
5196
- const lastModDate = getDateNTFS(rawLastModDate);
5197
- const lastAccessDate = getDateNTFS(rawLastAccessDate);
5198
- const creationDate = getDateNTFS(rawCreationDate);
5199
- const extraFieldData = { lastModDate, lastAccessDate, creationDate };
5200
- Object.assign(extraFieldNTFS, extraFieldData);
5201
- Object.assign(directory, extraFieldData);
5202
- }
5203
- } catch {
5204
- // ignored
5202
+ if (tag1Data && tag1Data.length == 24) {
5203
+ const tag1View = getDataView(tag1Data);
5204
+ const rawLastModDate = tag1View.getBigUint64(0, true);
5205
+ const rawLastAccessDate = tag1View.getBigUint64(8, true);
5206
+ const rawCreationDate = tag1View.getBigUint64(16, true);
5207
+ Object.assign(extraFieldNTFS, {
5208
+ rawLastModDate,
5209
+ rawLastAccessDate,
5210
+ rawCreationDate
5211
+ });
5212
+ const lastModDate = getDateNTFS(rawLastModDate);
5213
+ const lastAccessDate = getDateNTFS(rawLastAccessDate);
5214
+ const creationDate = getDateNTFS(rawCreationDate);
5215
+ const extraFieldData = { lastModDate, lastAccessDate, creationDate };
5216
+ Object.assign(extraFieldNTFS, extraFieldData);
5217
+ Object.assign(directory, extraFieldData);
5205
5218
  }
5206
5219
  }
5207
5220
 
@@ -5504,11 +5517,7 @@ function getOptionValue$1(zipReader, options, name) {
5504
5517
 
5505
5518
  function getDate(timeRaw) {
5506
5519
  const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;
5507
- try {
5508
- return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
5509
- } catch {
5510
- // ignored
5511
- }
5520
+ return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
5512
5521
  }
5513
5522
 
5514
5523
  function getDateNTFS(timeRaw) {
@@ -5541,7 +5550,9 @@ var zipReader = /*#__PURE__*/Object.freeze({
5541
5550
  ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND: ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND,
5542
5551
  ERR_EOCDR_NOT_FOUND: ERR_EOCDR_NOT_FOUND,
5543
5552
  ERR_EXTRAFIELD_ZIP64_NOT_FOUND: ERR_EXTRAFIELD_ZIP64_NOT_FOUND,
5553
+ ERR_INVALID_AUTHENTICATION_CODE: ERR_INVALID_AUTHENTICATION_CODE,
5544
5554
  ERR_INVALID_COMPRESSED_DATA: ERR_INVALID_COMPRESSED_DATA,
5555
+ ERR_INVALID_CRC32: ERR_INVALID_CRC32,
5545
5556
  ERR_INVALID_PASSWORD: ERR_INVALID_PASSWORD,
5546
5557
  ERR_INVALID_SIGNATURE: ERR_INVALID_SIGNATURE,
5547
5558
  ERR_INVALID_UNCOMPRESSED_SIZE: ERR_INVALID_UNCOMPRESSED_SIZE,
@@ -5595,6 +5606,8 @@ const ERR_INVALID_EXTRAFIELD_DATA = "Extra field data exceeds 64KB";
5595
5606
  const ERR_UNSUPPORTED_COMPRESSION = "Compression method not supported";
5596
5607
  const MIN_UNIX_TIME = -2147483648;
5597
5608
  const MAX_UNIX_TIME = 2147483647;
5609
+ const MIN_NTFS_TIME = BigInt(0);
5610
+ const MAX_NTFS_TIME = BigInt("0x7fffffffffffffff");
5598
5611
  const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (set the 'zip64' option to 'true')";
5599
5612
  const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
5600
5613
  const ERR_UNDEFINED_READER = "Undefined reader";
@@ -6488,9 +6501,12 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6488
6501
  msdosAttributes
6489
6502
  };
6490
6503
  let {
6491
- signature,
6504
+ crc32: signature,
6492
6505
  uncompressedSize
6493
6506
  } = options;
6507
+ if (signature === UNDEFINED_VALUE) {
6508
+ ({ signature } = options);
6509
+ }
6494
6510
  let compressedSize = 0;
6495
6511
  if (!passThrough) {
6496
6512
  uncompressedSize = 0;
@@ -6508,7 +6524,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6508
6524
  encryptionStrength,
6509
6525
  zipCrypto: encrypted && zipCrypto,
6510
6526
  passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
6511
- signed: !passThrough,
6527
+ computeCrc32: !passThrough,
6512
6528
  compressed: compressed && !passThrough,
6513
6529
  encrypted: encrypted && !passThrough,
6514
6530
  useWebWorkers,
@@ -6527,7 +6543,9 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6527
6543
  writer.size += compressedSize;
6528
6544
  if (!passThrough) {
6529
6545
  uncompressedSize = result.inputSize;
6530
- signature = result.signature;
6546
+ if (!encrypted || zipCrypto) {
6547
+ signature = result.signature;
6548
+ }
6531
6549
  }
6532
6550
  if ((!zip64CompressedSize && compressedSize >= MAX_32_BITS) ||
6533
6551
  (!zip64UncompressedSize && uncompressedSize >= MAX_32_BITS)) {
@@ -6566,6 +6584,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lock }, entryI
6566
6584
  headerArray,
6567
6585
  headerView,
6568
6586
  signature,
6587
+ crc32: encrypted && !zipCrypto ? UNDEFINED_VALUE : signature,
6569
6588
  extraFieldExtendedTimestampFlag,
6570
6589
  zip64UncompressedSize,
6571
6590
  zip64CompressedSize
@@ -6666,8 +6685,8 @@ function getHeaderInfo(options) {
6666
6685
  extraFieldNTFS.uint16(EXTRAFIELD_TYPE_NTFS_TAG1);
6667
6686
  extraFieldNTFS.uint16(24);
6668
6687
  extraFieldNTFS.uint64(lastModTimeNTFS);
6669
- extraFieldNTFS.uint64(getTimeNTFS(lastAccessDate) || lastModTimeNTFS);
6670
- extraFieldNTFS.uint64(getTimeNTFS(creationDate) || lastModTimeNTFS);
6688
+ extraFieldNTFS.uint64(lastAccessDate ? getTimeNTFS(lastAccessDate) : lastModTimeNTFS);
6689
+ extraFieldNTFS.uint64(creationDate ? getTimeNTFS(creationDate) : lastModTimeNTFS);
6671
6690
  rawExtraFieldNTFS = extraFieldNTFS.array;
6672
6691
  } catch {
6673
6692
  rawExtraFieldNTFS = EMPTY_UINT8_ARRAY;
@@ -6727,7 +6746,7 @@ function getHeaderInfo(options) {
6727
6746
  if (extraFieldLength > MAX_16_BITS) {
6728
6747
  throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
6729
6748
  }
6730
- const dosLastModDate = new Date(Math.ceil(lastModDate.getTime() / 2000) * 2000);
6749
+ const dosLastModDate = new Date(Math.ceil(Math.floor(lastModDate.getTime() / 1000) / 2) * 2000);
6731
6750
  const {
6732
6751
  headerArray,
6733
6752
  headerView,
@@ -7236,7 +7255,8 @@ async function flushBufferedData(readable, writer, signal, onChunkWritten) {
7236
7255
 
7237
7256
  function getTimeNTFS(date) {
7238
7257
  if (date) {
7239
- return ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));
7258
+ const timeNTFS = ((BigInt(date.getTime()) + BigInt(11644473600000)) * BigInt(10000));
7259
+ return timeNTFS < MIN_NTFS_TIME ? MIN_NTFS_TIME : timeNTFS > MAX_NTFS_TIME ? MAX_NTFS_TIME : timeNTFS;
7240
7260
  }
7241
7261
  }
7242
7262
 
@@ -10928,10 +10948,12 @@ exports.ERR_EOCDR_NOT_FOUND = ERR_EOCDR_NOT_FOUND;
10928
10948
  exports.ERR_EXTRAFIELD_ZIP64_NOT_FOUND = ERR_EXTRAFIELD_ZIP64_NOT_FOUND;
10929
10949
  exports.ERR_HTTP_RANGE = ERR_HTTP_RANGE;
10930
10950
  exports.ERR_HTTP_RESOURCE_CHANGED = ERR_HTTP_RESOURCE_CHANGED;
10951
+ exports.ERR_INVALID_AUTHENTICATION_CODE = ERR_INVALID_AUTHENTICATION_CODE;
10931
10952
  exports.ERR_INVALID_CODEC_DEFINITION = ERR_INVALID_CODEC_DEFINITION;
10932
10953
  exports.ERR_INVALID_CODEC_MODULE = ERR_INVALID_CODEC_MODULE;
10933
10954
  exports.ERR_INVALID_COMMENT = ERR_INVALID_COMMENT;
10934
10955
  exports.ERR_INVALID_COMPRESSED_DATA = ERR_INVALID_COMPRESSED_DATA;
10956
+ exports.ERR_INVALID_CRC32 = ERR_INVALID_CRC32;
10935
10957
  exports.ERR_INVALID_ENCRYPTION_STRENGTH = ERR_INVALID_ENCRYPTION_STRENGTH;
10936
10958
  exports.ERR_INVALID_ENTRY_COMMENT = ERR_INVALID_ENTRY_COMMENT;
10937
10959
  exports.ERR_INVALID_ENTRY_NAME = ERR_INVALID_ENTRY_NAME;
package/index.d.cts CHANGED
@@ -1164,8 +1164,8 @@ export interface ZipReaderOptions {
1164
1164
  * file header of the entry disagrees with its central directory record in a way that could make other tools
1165
1165
  * (e.g. streaming readers based on local file headers) interpret the entry differently. This detects mismatched
1166
1166
  * filenames, general purpose bit flags (encryption, data descriptor and language encoding flags), compression
1167
- * methods, signatures and sizes. The extra fields are not compared because the zip specification allows them
1168
- * to differ.
1167
+ * methods, CRC-32 checksums and sizes. The extra fields are not compared because the zip specification allows
1168
+ * them to differ.
1169
1169
  *
1170
1170
  * @defaultValue false
1171
1171
  */
@@ -1177,7 +1177,24 @@ export interface ZipReaderOptions {
1177
1177
  */
1178
1178
  checkPasswordOnly?: boolean;
1179
1179
  /**
1180
- * `true` to check the signature of the entry.
1180
+ * `true` to verify the CRC-32 checksum of the entry against the value stored in the zip file. The verification
1181
+ * is run on the decompressed data and covers the whole read pipeline. It also applies to entries encrypted with
1182
+ * AES in AE-1 format. It is skipped for entries in AE-2 format because they store a zeroed CRC-32 value.
1183
+ *
1184
+ * @defaultValue false
1185
+ */
1186
+ checkCrc32?: boolean;
1187
+ /**
1188
+ * `true` to verify the authentication code of entries encrypted with AES. The verification detects encrypted
1189
+ * data tampered or corrupted after the encryption.
1190
+ *
1191
+ * @defaultValue true
1192
+ */
1193
+ checkAuthenticationCode?: boolean;
1194
+ /**
1195
+ * `true` to check the CRC-32 checksum of the entry.
1196
+ *
1197
+ * @deprecated Use {@link ZipReaderOptions#checkCrc32} instead.
1181
1198
  *
1182
1199
  * @defaultValue false
1183
1200
  */
@@ -1261,6 +1278,15 @@ export interface EntryExtraFieldAES extends EntryExtraField {
1261
1278
  * The encryption strength (1, 2 or 3).
1262
1279
  */
1263
1280
  strength?: number;
1281
+ /**
1282
+ * The vendor version (1 for AE-1, 2 for AE-2). Entries in AE-1 format store the CRC-32 checksum of the content,
1283
+ * entries in AE-2 format store a zeroed value.
1284
+ */
1285
+ vendorVersion?: number;
1286
+ /**
1287
+ * The vendor identifier.
1288
+ */
1289
+ vendorId?: number;
1264
1290
  /**
1265
1291
  * The compression method stored in the AES extra field.
1266
1292
  */
@@ -1319,8 +1345,14 @@ export interface LocalDirectory {
1319
1345
  * The extra field.
1320
1346
  */
1321
1347
  extraField?: Map<number, EntryExtraField>;
1348
+ /**
1349
+ * The CRC-32 checksum of the content.
1350
+ */
1351
+ crc32?: number;
1322
1352
  /**
1323
1353
  * The signature (CRC32 checksum) of the content.
1354
+ *
1355
+ * @deprecated Use {@link LocalDirectory#crc32} instead.
1324
1356
  */
1325
1357
  signature?: number;
1326
1358
  /**
@@ -1462,9 +1494,17 @@ export interface EntryMetaData {
1462
1494
  */
1463
1495
  commentUTF8: boolean;
1464
1496
  /**
1465
- * The signature (CRC32 checksum) of the content.
1497
+ * The CRC-32 checksum of the content. It is `undefined` when the zip file does not store it, e.g. for entries
1498
+ * encrypted with AES in AE-2 format.
1466
1499
  */
1467
- signature: number;
1500
+ crc32?: number;
1501
+ /**
1502
+ * The signature (CRC32 checksum) of the content. It is `undefined` for entries encrypted with AES returned by
1503
+ * {@link ZipWriter#add}.
1504
+ *
1505
+ * @deprecated Use {@link EntryMetaData#crc32} instead.
1506
+ */
1507
+ signature?: number;
1468
1508
  /**
1469
1509
  * The extra field.
1470
1510
  */
@@ -1935,8 +1975,14 @@ export interface ZipWriterAddDataOptions
1935
1975
  * The uncompressed size of the entry. This option is ignored if the {@link ZipWriterConstructorOptions#passThrough} option is not set to `true`.
1936
1976
  */
1937
1977
  uncompressedSize?: number;
1978
+ /**
1979
+ * The CRC-32 checksum of the content. This option is ignored if the {@link ZipWriterConstructorOptions#passThrough} option is not set to `true`.
1980
+ */
1981
+ crc32?: number;
1938
1982
  /**
1939
1983
  * The signature (CRC32 checksum) of the content. This option is ignored if the {@link ZipWriterConstructorOptions#passThrough} option is not set to `true`.
1984
+ *
1985
+ * @deprecated Use {@link ZipWriterAddDataOptions#crc32} instead.
1940
1986
  */
1941
1987
  signature?: number;
1942
1988
  }
@@ -2013,6 +2059,13 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
2013
2059
  keepOrder?: boolean;
2014
2060
  /**
2015
2061
  * The password used to encrypt the content of the entry.
2062
+ *
2063
+ * @remarks
2064
+ * When a password is set and the {@link ZipWriterConstructorOptions#zipCrypto} option is not set to `true`, the
2065
+ * entry is encrypted in AES AE-2 format: the CRC-32 checksum of the content is stored as `0` so that the zip
2066
+ * file reveals no information about the encrypted content. A stored checksum would allow an attacker to verify
2067
+ * guessed content without knowing the password. The integrity of the data is guaranteed by the authentication
2068
+ * code instead.
2016
2069
  */
2017
2070
  password?: string;
2018
2071
  /**
@@ -2057,7 +2110,7 @@ export interface ZipWriterConstructorOptions extends WorkerConfiguration {
2057
2110
  /**
2058
2111
  * `true` to store extended timestamp extra fields.
2059
2112
  *
2060
- * When set to `false`, the maximum last modification date cannot exceed December 31, 2107 and the maximum accuracy is 2 seconds.
2113
+ * When set to `false`, the maximum last modification date cannot exceed December 31, 2107 and the maximum accuracy is 2 seconds, dates being truncated to the whole second and odd seconds rounded up to the next even second.
2061
2114
  *
2062
2115
  * @defaultValue true
2063
2116
  */
@@ -2935,8 +2988,28 @@ export const ERR_RESERVED_COMPRESSION_METHOD: string;
2935
2988
  * Invalid codec module error
2936
2989
  */
2937
2990
  export const ERR_INVALID_CODEC_MODULE: string;
2991
+ /**
2992
+ * Invalid CRC-32 checksum error, thrown when the {@link ZipReaderOptions#checkCrc32} option is set and the CRC-32
2993
+ * checksum of an entry does not match the value stored in the zip file.
2994
+ *
2995
+ * @remarks
2996
+ * This constant and {@link ERR_INVALID_AUTHENTICATION_CODE} share the same value as {@link ERR_INVALID_SIGNATURE}
2997
+ * for backward compatibility. They will become distinct strings in the next minor version.
2998
+ */
2999
+ export const ERR_INVALID_CRC32: string;
3000
+ /**
3001
+ * Invalid authentication code error, thrown when the authentication code of an entry encrypted with AES does not
3002
+ * match the encrypted data, e.g. when the data was tampered or corrupted after the encryption.
3003
+ *
3004
+ * @remarks
3005
+ * This constant and {@link ERR_INVALID_CRC32} share the same value as {@link ERR_INVALID_SIGNATURE} for backward
3006
+ * compatibility. They will become distinct strings in the next minor version.
3007
+ */
3008
+ export const ERR_INVALID_AUTHENTICATION_CODE: string;
2938
3009
  /**
2939
3010
  * Invalid signature error
3011
+ *
3012
+ * @deprecated Use {@link ERR_INVALID_CRC32} or {@link ERR_INVALID_AUTHENTICATION_CODE} instead.
2940
3013
  */
2941
3014
  export const ERR_INVALID_SIGNATURE: string;
2942
3015
  /**
@@ -2954,7 +3027,7 @@ export const ERR_INVALID_UNCOMPRESSED_SIZE: string;
2954
3027
  * native `DecompressionStream` with its own `TypeError` (on Node,
2955
3028
  * `ERR_TRAILING_JUNK_AFTER_STREAM_END`) rather than this error. Any data that is
2956
3029
  * returned is always validated against the entry's uncompressed size (and CRC
2957
- * when `checkSignature` is set), so it is never silently truncated; the backends
3030
+ * when `checkCrc32` is set), so it is never silently truncated; the backends
2958
3031
  * differ only in whether trailing bytes are ignored or raised as an error.
2959
3032
  */
2960
3033
  export const ERR_INVALID_COMPRESSED_DATA: string;