@zip.js/zip.js 2.8.44 → 2.8.46
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 +28 -2
- package/deno.json +32 -2
- package/dist/zip-core-external.js +199 -149
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +196 -120
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +251 -157
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +227 -126
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +272 -1751
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +273 -1726
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +273 -1726
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +198 -122
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +200 -124
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip-web-worker.js +1 -1
- package/dist/zip.js +200 -124
- package/dist/zip.min.js +1 -1
- package/eslint.config.mjs +31 -2
- package/index-native.cjs +273 -1726
- package/index-native.min.js +1 -1
- package/index.cjs +273 -1726
- package/index.d.cts +140 -2
- package/index.d.ts +140 -2
- package/index.min.js +1 -1
- package/lib/core/codec-pool.js +3 -2
- package/lib/core/codec-worker.js +30 -14
- package/lib/core/configuration.js +20 -2
- package/lib/core/constants.js +4 -0
- package/lib/core/options.js +2 -0
- package/lib/core/streams/aes-crypto-stream.js +15 -18
- package/lib/core/streams/codec-stream.js +2 -2
- package/lib/core/streams/zip-entry-stream.js +13 -18
- package/lib/core/util/mime-type-data.js +3 -0
- package/lib/core/util/mime-type.js +23 -1596
- package/lib/core/web-worker-base.js +29 -2
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/web-worker-native.js +7 -9
- package/lib/core/web-worker-wasm.js +9 -12
- package/lib/core/zip-entry.js +8 -1
- package/lib/core/zip-fs.js +62 -5
- package/lib/core/zip-reader.js +45 -17
- package/lib/core/zip-writer.js +58 -44
- package/lib/{core/web-worker-inline-template.js → zip-core-custom.js} +13 -20
- package/lib/zip-core-external.js +2 -0
- package/lib/zip-fs-core-external.js +2 -0
- package/lib/zip-fs-external.js +2 -0
- package/lib/zip-mime-types.js +2 -0
- package/lib/zip-module-native.js +3 -3
- package/lib/zip-module-wasm-base.js +3 -3
- package/package.json +28 -4
- package/worker-message-property-names.js +1 -1
- package/lib/core/web-worker-inline-template-native.js +0 -48
- package/lib/core/zlib-streams-inline-template.js +0 -45
package/dist/zip.js
CHANGED
|
@@ -71,6 +71,8 @@
|
|
|
71
71
|
const EXTRAFIELD_TYPE_USDZ = 0x1986;
|
|
72
72
|
const EXTRAFIELD_TYPE_INFOZIP = 0x7875;
|
|
73
73
|
const EXTRAFIELD_TYPE_UNIX = 0x7855;
|
|
74
|
+
const EXTRAFIELD_TYPE_UNIX_TYPE1 = 0x5855;
|
|
75
|
+
const EXTRAFIELD_TYPE_PKWARE_UNIX = 0x000d;
|
|
74
76
|
|
|
75
77
|
const BITFLAG_ENCRYPTED = 0b1;
|
|
76
78
|
const BITFLAG_LEVEL = 0b0110;
|
|
@@ -174,6 +176,7 @@
|
|
|
174
176
|
"baseURI",
|
|
175
177
|
"wasmURI",
|
|
176
178
|
"workerURI",
|
|
179
|
+
"createWorker",
|
|
177
180
|
"chunkSize",
|
|
178
181
|
"maxWorkers",
|
|
179
182
|
"terminateWorkerTimeout",
|
|
@@ -184,8 +187,8 @@
|
|
|
184
187
|
"transferStreams",
|
|
185
188
|
"CompressionStream",
|
|
186
189
|
"DecompressionStream",
|
|
187
|
-
"
|
|
188
|
-
"
|
|
190
|
+
"CompressionStreamFallback",
|
|
191
|
+
"DecompressionStreamFallback"
|
|
189
192
|
];
|
|
190
193
|
|
|
191
194
|
const config = { ...DEFAULT_CONFIGURATION };
|
|
@@ -199,6 +202,7 @@
|
|
|
199
202
|
}
|
|
200
203
|
|
|
201
204
|
function configure(configuration) {
|
|
205
|
+
configuration = normalizeConfiguration(configuration);
|
|
202
206
|
for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
|
|
203
207
|
const propertyValue = configuration[propertyName];
|
|
204
208
|
if (propertyValue !== UNDEFINED_VALUE) {
|
|
@@ -207,7 +211,23 @@
|
|
|
207
211
|
}
|
|
208
212
|
}
|
|
209
213
|
|
|
214
|
+
function normalizeConfiguration(configuration) {
|
|
215
|
+
const { CompressionStreamZlib, DecompressionStreamZlib } = configuration;
|
|
216
|
+
if (CompressionStreamZlib === UNDEFINED_VALUE && DecompressionStreamZlib === UNDEFINED_VALUE) {
|
|
217
|
+
return configuration;
|
|
218
|
+
}
|
|
219
|
+
const normalizedConfiguration = Object.assign({}, configuration);
|
|
220
|
+
if (normalizedConfiguration.CompressionStreamFallback === UNDEFINED_VALUE) {
|
|
221
|
+
normalizedConfiguration.CompressionStreamFallback = CompressionStreamZlib;
|
|
222
|
+
}
|
|
223
|
+
if (normalizedConfiguration.DecompressionStreamFallback === UNDEFINED_VALUE) {
|
|
224
|
+
normalizedConfiguration.DecompressionStreamFallback = DecompressionStreamZlib;
|
|
225
|
+
}
|
|
226
|
+
return normalizedConfiguration;
|
|
227
|
+
}
|
|
228
|
+
|
|
210
229
|
function setDefaultConfiguration(configuration) {
|
|
230
|
+
configuration = normalizeConfiguration(configuration);
|
|
211
231
|
for (const propertyName of CONFIGURABLE_PROPERTY_NAMES) {
|
|
212
232
|
const propertyValue = configuration[propertyName];
|
|
213
233
|
if (propertyValue !== UNDEFINED_VALUE) {
|
|
@@ -224,7 +244,7 @@
|
|
|
224
244
|
Object.assign(config, DEFAULT_CONFIGURATION);
|
|
225
245
|
}
|
|
226
246
|
|
|
227
|
-
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)}});}
|
|
247
|
+
const t$1=new Uint8Array(288);t$1.fill(8,0,144),t$1.fill(9,144,256),t$1.fill(7,256,280),t$1.fill(8,280,288),new Uint8Array(30).fill(5);const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n$1=t=>t({workerURI:t=>{const n="text/javascript";let s='(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:S,DecompressionStream:g}=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,D,B,F]=C;class R{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=F[255&t]^B[t>>>8&255]^D[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 U extends d{constructor(){let t;const e=new R;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 W(t,e){const n=new o(t.length+e.length);return n.set(t),n.set(e,t.length),n}function _(t){return new l(t.buffer,t.byteOffset,t.byteLength)}const T={concat(t,e){if(0===t.length||0===e.length)return t.concat(e);const n=t[t.length-1],s=T.l(n);return 32===s?t.concat(e):T.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)+T.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]=T.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=T.l(r);return s.push(T.v(e+o&31,e+o>32?n:s.pop(),1)),s}},V={bytes:{C(t){const e=T.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(T.v(8*(3&n),s)),e}}},K=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.D=t.D.slice(0),e.B=t.B):e.reset()}reset(){const t=this;return t.P=t.I.slice(0),t.D=[],t.B=0,t}update(t){const e=this;"string"==typeof t&&(t=V.F.A(t));const n=e.D=T.concat(e.D,t),s=e.B,o=e.B=s+T.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.R(c.subarray(16*a,16*(a+1))),a+=1;return n.splice(0,16*a),e}U(){const t=this;let e=t.D;const n=t.P;e=T.concat(e,[T.v(1,1)]);for(let t=e.length+2;15&t;t++)e.push(0);for(e.push(s.floor(t.B/4294967296)),e.push(0|t.B);e.length;)t.R(e.splice(0,16));return t.reset(),n}W(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,e){return e<<t|e>>>32-t}R(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._(1,o[t-3]^o[t-8]^o[t-14]^o[t-16]));const e=n._(5,c)+n.W(t,i,a,f)+l+o[t]+n.M[s.floor(t/20)]|0;l=f,f=a,a=n._(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}},E={importKey:t=>new E.T(V.bytes.A(t)),V(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=T;for(e=V.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)},T:class{constructor(t){const e=this,n=e.K=K,s=[[],[]];e.L=[new n,new n];const r=e.L[0].blockSize/32;t.length>r&&(t=(new n).update(t).U());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.K(t.L[0]),t.j=!1}update(t){this.j=!0,this.O.update(t)}digest(){const t=this,e=t.O.U(),n=new t.K(t.L[1]).update(e).U();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,N="zipjs-abort-check-password";function q(t){if(L)return h.getRandomValues(t);throw new r("Crypto API not supported")}const G=16,J={name:"PBKDF2"},Q=e.assign({hash:{name:"HMAC"}},J),X=e.assign({iterations:1e3,hash:{name:"SHA-1"}},J),Y=["deriveBits"],Z=[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=V.bytes,ct=class{constructor(t){const e=this;e.H=[[[],[],[],[],[]],[[],[],[],[],[]]],e.H[0][0][0]||e.N();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.G(t,0)}decrypt(t){return this.G(t,1)}N(){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)}G(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],S=t[e?1:3]^n[3],g=4;for(let t=0;s>t;t++)u=i[d>>>24]^a[y>>16&255]^f[m>>8&255]^l[255&S]^n[g],h=i[y>>>24]^a[m>>16&255]^f[S>>8&255]^l[255&d]^n[g+1],p=i[m>>>24]^a[S>>16&255]^f[d>>8&255]^l[255&y]^n[g+2],S=i[S>>>24]^a[d>>16&255]^f[y>>8&255]^l[255&m]^n[g+3],g+=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&S]^n[g++],u=d,d=y,y=m,m=S,S=u;return o}},it=class{constructor(t,e){this.J=t,this.X=e,this.Y=e}reset(){this.Y=this.X}update(t){return this.Z(this.J,t,this.Y)}$(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]))}Z(t,e,n){let s;if(!(s=e.length))return[];const r=T.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 T.S(e,r)}},at=E.T;let ft=nt&&rt&&typeof st.importKey==k,lt=nt&&rt&&typeof st.deriveBits==k;class wt 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,Z[e])),c=mt(s,Z[e]);if(o[0]!=c[0]||o[1]!=c[1])throw new r(O)})(n,i,c,mt(t,0,Z[i]+2)),t=mt(t,Z[i]+2),s?e.error(new r(N)):a()):await f;const l=new o(t.length-tt-(t.length-tt)%G);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=gt(ot,i);n.update(t);const s=e.update(t);f=St(ot,s)}const l=mt(St(ot,n.digest()),0,tt);let w=s.length<tt?1:0;for(let t=0;tt>t;t++)w|=l[t]^a[t];if(w&&c)throw new r(H);t.enqueue(f)}}})}}class ut extends d{constructor({password:t,rawPassword:e,encryptionStrength:n}){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=q(new o(Z[e]));return W(s,await dt(t,e,n,s))})(n,r,s),c()):await i;const f=new o(a.length+t.length-t.length%G);f.set(a,0),e.enqueue(pt(n,t,f,a.length,0))},async flush(t){const{st:e,ot:n,pending:s,ready:r}=this;if(n&&e){await r;let o=z;if(s.length){const t=e.update(gt(ot,s));n.update(t),o=St(ot,t)}const c=St(ot,n.digest()).slice(0,tt);t.enqueue(W(o,c))}}})}}function ht(t,n,s,r){e.assign(t,{ready:new w(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=W(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%G)),w=0;l-G>=w;w+=G){const t=gt(ot,mt(e,w,w+G));c&&a.update(t);const r=i.update(t);c||a.update(r),n.set(St(ot,r),w+s)}return t.pending=mt(e,w),n}async function dt(n,s,r,c){n.password=null;const i=await(async(t,e,n,s,r)=>{if(!ft)return E.importKey(e);try{return await st.importKey("raw",e,n,!1,r)}catch{return ft=!1,E.importKey(e)}})(0,r,Q,0,Y),a=await(async(t,e,n)=>{if(!lt)return E.V(e,t.salt,X.iterations,n);try{return await st.deriveBits(t,e,n)}catch{return lt=!1,E.V(e,t.salt,X.iterations,n)}})(e.assign({salt:c},X),i,8*(2*$[s]+2)),f=new o(a),l=gt(ot,mt(f,0,$[s])),w=gt(ot,mt(f,$[s],2*$[s])),u=mt(f,2*$[s]);return e.assign(n,{keys:{key:l,ct:w,passwordVerification:u},st:new it(new ct(l),t.from(et)),ot:new at(w)}),u}function yt(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 mt(t,e,n){return t.subarray(e,n)}function St(t,e){return t.C(e)}function gt(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(N)):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=q(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 R(r[0]),ft:new R(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 Dt(t){return Pt.get(t)}const Bt="Invalid uncompressed size",Ft=j,Rt="deflate-raw",Ut="gzip",Wt=[31,139,8];class _t extends d{constructor(t,{chunkSize:e,CompressionStreamFallback:n,CompressionStream:s}){super({});const{compressed:r,encrypted:o,useCompressionStream:c,zipCrypto:i,computeCrc32:a,level:f,deflate64:w,format:u,compressionMethod:h}=t,p=this;let d,y,m,S=super.readable;const g=u&&Dt(u),v=a&&r&&!w&&!g&&(!o||i)&&!(!c||!s);if(o&&!i||!a||v||(d=new U,S=jt(S,d)),r)if(g)S=Ht(S,Lt(g.CompressionStream,u,{level:f,chunkSize:e,compressionMethod:h}));else if(v)m=new Tt,S=Ht(S,new s(Ut)),S=jt(S,m);else try{S=Ot(S,c,{level:f,chunkSize:e},s,n)}catch(t){let e;try{e=new s(Ut)}catch{throw t}S=Ht(S,e),S=jt(S,new Tt)}o&&(i?S=jt(S,new bt(t)):(y=new ut(t),S=jt(S,y))),Et(p,S,()=>{o&&!i||!a||(p.crc32=v?m.crc32:new l(d.value.buffer).getUint32(0))})}}class Tt 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=W(n,t));const c=o-8,i=s.min(c,n.length);r.enqueue(W(n.subarray(0,i),t.subarray(0,c-i))),n=W(n.subarray(i),t.subarray(c-i))},flush(){const e=_(n);t.crc32=e.getUint32(0,!0),t.uncompressedSize=e.getUint32(4,!0)}}),t=this}}class Vt extends d{constructor(t,{chunkSize:e,DecompressionStreamFallback:n,DecompressionStream:s}){super({});const{zipCrypto:c,encrypted:i,checkCrc32:a,crc32:f,compressed:u,useCompressionStream:h,deflate64:p,format:m,compressionMethod:S,rawBitFlag:g,outputSize:b}=t;let k,z,C=super.readable;if(i&&(c?C=jt(C,new vt(t)):(z=new wt(t),C=jt(C,z))),u){const t=m&&Dt(m);if(t)C=Ht(C,Lt(t.DecompressionStream,m,{chunkSize:e,compressionMethod:S,rawBitFlag:g,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(Ut)}catch{throw t}C=((t,e,n)=>{const s=new R;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(Wt),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=_(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(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)}a&&(k=new U,C=jt(C,k)),Et(this,C,()=>{if(a){const t=new l(k.value.buffer);if(f!=t.getUint32(0,!1))throw new r(Ft)}})}}const Kt=new f;function Et(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":Rt;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 Nt="data",qt="close",Gt="deflate";class Jt extends d{constructor(t,n){super({});const s=this,{codecType:o}=t;let c;o.startsWith(Gt)?c=_t:o.startsWith("inflate")&&(c=Vt),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{crc32:t}=a;e.assign(s,{crc32: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 Xt=2;try{typeof navigator!=b&&navigator.hardwareConcurrency&&(Xt=navigator.hardwareConcurrency)}catch{}const Yt=new f,Zt=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=Kt.get(t);n||(n=new f,Kt.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(Gt)?i.CompressionStream:i.DecompressionStream,Rt))try{await self.initModule(t.config)}catch{}}else try{await self.initModule(t.config)}catch{c.useCompressionStream=!0}!i.CompressionStreamFallback&&i.CompressionStreamZlib&&(i.CompressionStreamFallback=i.CompressionStreamZlib),!i.DecompressionStreamFallback&&i.DecompressionStreamZlib&&(i.DecompressionStreamFallback=i.DecompressionStreamZlib);const a={highWaterMark:1},l=t.readable||new y({async pull(t){const e=new w(t=>Yt.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 w(t=>e=t);Zt.set(oe,e),ie({type:Nt,value:t,messageId:oe}),oe=(oe+1)%n.MAX_SAFE_INTEGER,await s}},a),e=new Jt(c,i),$t=new AbortController;const{signal:u}=$t;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{crc32:h,inputSize:p,outputSize:d}=e;ie({type:qt,result:{crc32: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.wt=new o(i),t?(this.ut=te.deflate_process,this.ht=te.deflate_last_consumed,this.yt=te.deflate_end,this.St=te.deflate_new(),n="gzip"===e?te.deflate_init_gzip(this.St,c):"deflate-raw"===e?te.deflate_init_raw(this.St,c):te.deflate_init(this.St,c)):"deflate64-raw"===e?(this.ut=te.inflate9_process,this.ht=te.inflate9_last_consumed,this.yt=te.inflate9_end,this.St=te.inflate9_new(),n=te.inflate9_init_raw(this.St)):(this.ut=te.inflate_process,this.ht=te.inflate_last_consumed,this.yt=te.inflate_end,this.St=te.inflate_new(),n="deflate-raw"===e?te.inflate_init_raw(this.St):"gzip"===e?te.inflate_init_gzip(this.St):te.inflate_init(this.St)),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.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&&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.St,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.St);if(0===d)break;h+=d}}catch(t){f(this),n.error(t)}},flush(e){try{const n=new o(se.buffer),s=this.ut,c=this.lt,a=this.wt;for(;;){const o=s(this.St,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.St&&t.yt&&(e=t.yt(t.St)),t.St=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==Nt){const t=Yt.get(n);Yt.delete(n),t({value:s||new o,done:r})}if("ack"==e){const t=Zt.get(n);Zt.delete(n),t()}e==qt&&$t.abort()}catch(t){ae(t)}}),p({type:"ready"});class le{constructor(t="deflate",e){return fe(!0,t,e)}}class we{constructor(t="deflate",e){return fe(!1,t,e)}}le.gt=!0,we.gt=!0;let ue=!1;((t={})=>{const{init:e}=t,n=t.CompressionStreamFallback||t.CompressionStreamZlib,s=t.DecompressionStreamFallback||t.DecompressionStreamZlib;self.initModule=async t=>{e&&await e(t),n&&(t.CompressionStreamFallback=n),s&&(t.DecompressionStreamFallback=s)}})({CompressionStreamFallback:le,DecompressionStreamFallback:we,init:t=>(async(t,{baseURI:e})=>{if(!ue)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),ue=!0}catch(t){throw(t=>{re=t})(t),t}})(t.wasmURI,t)})});\n';if("string"==typeof s&&(s=(new TextEncoder).encode(s)),t){const t=new Blob([s],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+(t=>{let n="";const s=t.length;let r=0;for(;s>r+2;r+=3){const s=t[r]<<16|t[r+1]<<8|t[r+2];n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+e[63&s];}const o=s-r;if(1===o){const s=t[r]<<16;n+=e[s>>18&63]+e[s>>12&63]+"==";}else if(2===o){const s=t[r]<<16|t[r+1]<<8;n+=e[s>>18&63]+e[s>>12&63]+e[s>>6&63]+"=";}return n})(s)}});
|
|
228
248
|
|
|
229
249
|
/*
|
|
230
250
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -1422,7 +1442,7 @@
|
|
|
1422
1442
|
const DERIVED_BITS_USAGE = ["deriveBits"];
|
|
1423
1443
|
const SALT_LENGTH = [8, 12, 16];
|
|
1424
1444
|
const KEY_LENGTH = [16, 24, 32];
|
|
1425
|
-
const
|
|
1445
|
+
const AUTHENTICATION_CODE_LENGTH = 10;
|
|
1426
1446
|
const COUNTER_DEFAULT_VALUE = [0, 0, 0, 0];
|
|
1427
1447
|
// deno-lint-ignore valid-typeof
|
|
1428
1448
|
const CRYPTO_API_SUPPORTED = typeof crypto != UNDEFINED_TYPE;
|
|
@@ -1462,8 +1482,8 @@
|
|
|
1462
1482
|
} else {
|
|
1463
1483
|
await ready;
|
|
1464
1484
|
}
|
|
1465
|
-
const output = new Uint8Array(chunk.length -
|
|
1466
|
-
controller.enqueue(append(aesCrypto, chunk, output, 0,
|
|
1485
|
+
const output = new Uint8Array(chunk.length - AUTHENTICATION_CODE_LENGTH - ((chunk.length - AUTHENTICATION_CODE_LENGTH) % BLOCK_LENGTH));
|
|
1486
|
+
controller.enqueue(append(aesCrypto, chunk, output, 0, AUTHENTICATION_CODE_LENGTH, true));
|
|
1467
1487
|
},
|
|
1468
1488
|
async flush(controller) {
|
|
1469
1489
|
const {
|
|
@@ -1474,8 +1494,8 @@
|
|
|
1474
1494
|
} = this;
|
|
1475
1495
|
if (hmac && ctr) {
|
|
1476
1496
|
await ready;
|
|
1477
|
-
const chunkToDecrypt = subarray(pending, 0, pending.length -
|
|
1478
|
-
const
|
|
1497
|
+
const chunkToDecrypt = subarray(pending, 0, pending.length - AUTHENTICATION_CODE_LENGTH);
|
|
1498
|
+
const originalAuthenticationCode = subarray(pending, pending.length - AUTHENTICATION_CODE_LENGTH);
|
|
1479
1499
|
let decryptedChunkArray = EMPTY_UINT8_ARRAY;
|
|
1480
1500
|
if (chunkToDecrypt.length) {
|
|
1481
1501
|
const encryptedChunk = toBits(codecBytes, chunkToDecrypt);
|
|
@@ -1483,12 +1503,12 @@
|
|
|
1483
1503
|
const decryptedChunk = ctr.update(encryptedChunk);
|
|
1484
1504
|
decryptedChunkArray = fromBits(codecBytes, decryptedChunk);
|
|
1485
1505
|
}
|
|
1486
|
-
const
|
|
1487
|
-
let
|
|
1488
|
-
for (let
|
|
1489
|
-
|
|
1506
|
+
const authenticationCode = subarray(fromBits(codecBytes, hmac.digest()), 0, AUTHENTICATION_CODE_LENGTH);
|
|
1507
|
+
let invalidAuthenticationCode = pending.length < AUTHENTICATION_CODE_LENGTH ? 1 : 0;
|
|
1508
|
+
for (let indexByte = 0; indexByte < AUTHENTICATION_CODE_LENGTH; indexByte++) {
|
|
1509
|
+
invalidAuthenticationCode |= authenticationCode[indexByte] ^ originalAuthenticationCode[indexByte];
|
|
1490
1510
|
}
|
|
1491
|
-
if (
|
|
1511
|
+
if (invalidAuthenticationCode && checkAuthenticationCode) {
|
|
1492
1512
|
throw new Error(ERR_INVALID_AUTHENTICATION_CODE);
|
|
1493
1513
|
}
|
|
1494
1514
|
controller.enqueue(decryptedChunkArray);
|
|
@@ -1501,8 +1521,6 @@
|
|
|
1501
1521
|
class AESEncryptionStream extends TransformStream {
|
|
1502
1522
|
|
|
1503
1523
|
constructor({ password, rawPassword, encryptionStrength }) {
|
|
1504
|
-
// deno-lint-ignore prefer-const
|
|
1505
|
-
let stream;
|
|
1506
1524
|
super({
|
|
1507
1525
|
start() {
|
|
1508
1526
|
initAesCrypto(this, password, rawPassword, encryptionStrength);
|
|
@@ -1541,12 +1559,11 @@
|
|
|
1541
1559
|
hmac.update(encryptedChunk);
|
|
1542
1560
|
encryptedChunkArray = fromBits(codecBytes, encryptedChunk);
|
|
1543
1561
|
}
|
|
1544
|
-
|
|
1545
|
-
controller.enqueue(concat(encryptedChunkArray,
|
|
1562
|
+
const authenticationCode = fromBits(codecBytes, hmac.digest()).slice(0, AUTHENTICATION_CODE_LENGTH);
|
|
1563
|
+
controller.enqueue(concat(encryptedChunkArray, authenticationCode));
|
|
1546
1564
|
}
|
|
1547
1565
|
}
|
|
1548
1566
|
});
|
|
1549
|
-
stream = this;
|
|
1550
1567
|
}
|
|
1551
1568
|
}
|
|
1552
1569
|
|
|
@@ -1559,7 +1576,7 @@
|
|
|
1559
1576
|
});
|
|
1560
1577
|
}
|
|
1561
1578
|
|
|
1562
|
-
function append(aesCrypto, input, output, paddingStart, paddingEnd,
|
|
1579
|
+
function append(aesCrypto, input, output, paddingStart, paddingEnd, verifyAuthenticationCode) {
|
|
1563
1580
|
const {
|
|
1564
1581
|
ctr,
|
|
1565
1582
|
hmac,
|
|
@@ -1573,11 +1590,11 @@
|
|
|
1573
1590
|
let offset;
|
|
1574
1591
|
for (offset = 0; offset <= inputLength - BLOCK_LENGTH; offset += BLOCK_LENGTH) {
|
|
1575
1592
|
const inputChunk = toBits(codecBytes, subarray(input, offset, offset + BLOCK_LENGTH));
|
|
1576
|
-
if (
|
|
1593
|
+
if (verifyAuthenticationCode) {
|
|
1577
1594
|
hmac.update(inputChunk);
|
|
1578
1595
|
}
|
|
1579
1596
|
const outputChunk = ctr.update(inputChunk);
|
|
1580
|
-
if (!
|
|
1597
|
+
if (!verifyAuthenticationCode) {
|
|
1581
1598
|
hmac.update(outputChunk);
|
|
1582
1599
|
}
|
|
1583
1600
|
output.set(fromBits(codecBytes, outputChunk), offset + paddingStart);
|
|
@@ -1939,7 +1956,7 @@
|
|
|
1939
1956
|
|
|
1940
1957
|
class DeflateStream extends TransformStream {
|
|
1941
1958
|
|
|
1942
|
-
constructor(options, { chunkSize,
|
|
1959
|
+
constructor(options, { chunkSize, CompressionStreamFallback, CompressionStream }) {
|
|
1943
1960
|
super({});
|
|
1944
1961
|
const { compressed, encrypted, useCompressionStream, zipCrypto, computeCrc32, level, deflate64, format, compressionMethod } = options;
|
|
1945
1962
|
const stream = this;
|
|
@@ -1961,7 +1978,7 @@
|
|
|
1961
1978
|
readable = pipeThrough(readable, gzipCrc32Stream);
|
|
1962
1979
|
} else {
|
|
1963
1980
|
try {
|
|
1964
|
-
readable = pipeThroughCompressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream,
|
|
1981
|
+
readable = pipeThroughCompressionStream(readable, useCompressionStream, { level, chunkSize }, CompressionStream, CompressionStreamFallback);
|
|
1965
1982
|
} catch (error) {
|
|
1966
1983
|
let gzipStream;
|
|
1967
1984
|
try {
|
|
@@ -1983,14 +2000,9 @@
|
|
|
1983
2000
|
}
|
|
1984
2001
|
}
|
|
1985
2002
|
setReadable(stream, readable, () => {
|
|
1986
|
-
let signature;
|
|
1987
|
-
if (encrypted && !zipCrypto) {
|
|
1988
|
-
signature = encryptionStream.signature;
|
|
1989
|
-
}
|
|
1990
2003
|
if ((!encrypted || zipCrypto) && computeCrc32) {
|
|
1991
|
-
|
|
2004
|
+
stream.crc32 = useGzipCrc32 ? gzipCrc32Stream.crc32 : new DataView(crc32Stream.value.buffer).getUint32(0);
|
|
1992
2005
|
}
|
|
1993
|
-
stream.signature = signature;
|
|
1994
2006
|
});
|
|
1995
2007
|
}
|
|
1996
2008
|
}
|
|
@@ -2028,7 +2040,7 @@
|
|
|
2028
2040
|
},
|
|
2029
2041
|
flush() {
|
|
2030
2042
|
const dataView = getDataView(trailerCandidate);
|
|
2031
|
-
stream.
|
|
2043
|
+
stream.crc32 = dataView.getUint32(0, true);
|
|
2032
2044
|
stream.uncompressedSize = dataView.getUint32(4, true);
|
|
2033
2045
|
}
|
|
2034
2046
|
});
|
|
@@ -2108,9 +2120,9 @@
|
|
|
2108
2120
|
|
|
2109
2121
|
class InflateStream extends TransformStream {
|
|
2110
2122
|
|
|
2111
|
-
constructor(options, { chunkSize,
|
|
2123
|
+
constructor(options, { chunkSize, DecompressionStreamFallback, DecompressionStream }) {
|
|
2112
2124
|
super({});
|
|
2113
|
-
const { zipCrypto, encrypted, checkCrc32,
|
|
2125
|
+
const { zipCrypto, encrypted, checkCrc32, crc32, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
|
|
2114
2126
|
let crc32Stream, decryptionStream;
|
|
2115
2127
|
let readable = super.readable;
|
|
2116
2128
|
if (encrypted) {
|
|
@@ -2127,7 +2139,7 @@
|
|
|
2127
2139
|
readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.DecompressionStream, format, { chunkSize, compressionMethod, rawBitFlag, uncompressedSize: outputSize }));
|
|
2128
2140
|
} else {
|
|
2129
2141
|
try {
|
|
2130
|
-
readable = pipeThroughCompressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream,
|
|
2142
|
+
readable = pipeThroughCompressionStream(readable, useCompressionStream, { chunkSize, deflate64 }, DecompressionStream, DecompressionStreamFallback);
|
|
2131
2143
|
} catch (error) {
|
|
2132
2144
|
if (deflate64 || outputSize === UNDEFINED_VALUE) {
|
|
2133
2145
|
throw error;
|
|
@@ -2149,8 +2161,8 @@
|
|
|
2149
2161
|
}
|
|
2150
2162
|
setReadable(this, readable, () => {
|
|
2151
2163
|
if (checkCrc32) {
|
|
2152
|
-
const
|
|
2153
|
-
if (
|
|
2164
|
+
const computedCrc32View = new DataView(crc32Stream.value.buffer);
|
|
2165
|
+
if (crc32 != computedCrc32View.getUint32(0, false)) {
|
|
2154
2166
|
throw new Error(ERR_INVALID_CRC32);
|
|
2155
2167
|
}
|
|
2156
2168
|
}
|
|
@@ -2206,17 +2218,17 @@
|
|
|
2206
2218
|
return new CodecStreamClass(format, options);
|
|
2207
2219
|
}
|
|
2208
2220
|
|
|
2209
|
-
function pipeThroughCompressionStream(readable, useCompressionStream, options, CompressionStreamNative,
|
|
2221
|
+
function pipeThroughCompressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamFallback) {
|
|
2210
2222
|
const Stream = useCompressionStream && CompressionStreamNative ?
|
|
2211
2223
|
CompressionStreamNative :
|
|
2212
|
-
|
|
2224
|
+
CompressionStreamFallback || CompressionStreamNative;
|
|
2213
2225
|
const format = options.deflate64 ? FORMAT_DEFLATE64_RAW : FORMAT_DEFLATE_RAW;
|
|
2214
2226
|
let codecStream;
|
|
2215
2227
|
try {
|
|
2216
2228
|
codecStream = new Stream(format, options);
|
|
2217
2229
|
} catch (error) {
|
|
2218
|
-
if (useCompressionStream &&
|
|
2219
|
-
codecStream = new
|
|
2230
|
+
if (useCompressionStream && CompressionStreamFallback && Stream != CompressionStreamFallback) {
|
|
2231
|
+
codecStream = new CompressionStreamFallback(format, options);
|
|
2220
2232
|
} else {
|
|
2221
2233
|
throw error;
|
|
2222
2234
|
}
|
|
@@ -2375,9 +2387,9 @@
|
|
|
2375
2387
|
}
|
|
2376
2388
|
},
|
|
2377
2389
|
flush() {
|
|
2378
|
-
const {
|
|
2390
|
+
const { crc32 } = stream;
|
|
2379
2391
|
Object.assign(codec, {
|
|
2380
|
-
|
|
2392
|
+
crc32,
|
|
2381
2393
|
inputSize
|
|
2382
2394
|
});
|
|
2383
2395
|
}
|
|
@@ -2479,7 +2491,7 @@
|
|
|
2479
2491
|
const MESSAGE_ERROR_EVENT_TYPE = "messageerror";
|
|
2480
2492
|
const ERR_WORKER_STARTUP_TIMEOUT = "Worker startup timeout";
|
|
2481
2493
|
|
|
2482
|
-
let webWorkerSupported, webWorkerSource, webWorkerURI, webWorkerOptions;
|
|
2494
|
+
let webWorkerSupported, webWorkerSource, webWorkerURI, webWorkerOptions, createWorkerFailed;
|
|
2483
2495
|
let transferStreamsSupported = true;
|
|
2484
2496
|
try {
|
|
2485
2497
|
transferStreamsSupported = typeof structuredClone == FUNCTION_TYPE && structuredClone(new DOMException("", "AbortError")).code !== UNDEFINED_VALUE;
|
|
@@ -2493,14 +2505,14 @@
|
|
|
2493
2505
|
}
|
|
2494
2506
|
|
|
2495
2507
|
async function supportsDeflate(config) {
|
|
2496
|
-
const { CompressionStream: NativeStream,
|
|
2497
|
-
if (
|
|
2508
|
+
const { CompressionStream: NativeStream, CompressionStreamFallback: FallbackStream } = config;
|
|
2509
|
+
if (FallbackStream && !FallbackStream.requiresModule) {
|
|
2498
2510
|
return true;
|
|
2499
2511
|
}
|
|
2500
2512
|
if (supportsDeflateRaw(NativeStream) || supportsGzip(NativeStream)) {
|
|
2501
2513
|
return true;
|
|
2502
2514
|
}
|
|
2503
|
-
if (
|
|
2515
|
+
if (FallbackStream) {
|
|
2504
2516
|
try {
|
|
2505
2517
|
await initModule$1(config);
|
|
2506
2518
|
return true;
|
|
@@ -2513,12 +2525,16 @@
|
|
|
2513
2525
|
|
|
2514
2526
|
function resetWebWorkerSupport() {
|
|
2515
2527
|
webWorkerSupported = UNDEFINED_VALUE;
|
|
2528
|
+
createWorkerFailed = false;
|
|
2516
2529
|
}
|
|
2517
2530
|
|
|
2518
2531
|
class CodecWorker {
|
|
2519
2532
|
|
|
2520
|
-
constructor(workerData, { readable, writable }, { options, config, streamOptions, useWebWorkers, transferStreams, workerURI }, onTaskFinished) {
|
|
2533
|
+
constructor(workerData, { readable, writable }, { options, config, streamOptions, useWebWorkers, transferStreams, workerURI, createWorker }, onTaskFinished) {
|
|
2521
2534
|
const { signal } = streamOptions;
|
|
2535
|
+
if (createWorkerFailed) {
|
|
2536
|
+
createWorker = UNDEFINED_VALUE;
|
|
2537
|
+
}
|
|
2522
2538
|
Object.assign(workerData, {
|
|
2523
2539
|
busy: true,
|
|
2524
2540
|
generation: (workerData.generation || 0) + 1,
|
|
@@ -2528,6 +2544,7 @@
|
|
|
2528
2544
|
writable,
|
|
2529
2545
|
options: Object.assign({}, options),
|
|
2530
2546
|
workerURI,
|
|
2547
|
+
createWorker,
|
|
2531
2548
|
transferStreams,
|
|
2532
2549
|
terminate() {
|
|
2533
2550
|
return new Promise(resolve => {
|
|
@@ -2563,7 +2580,7 @@
|
|
|
2563
2580
|
// deno-lint-ignore valid-typeof
|
|
2564
2581
|
webWorkerSupported = typeof Worker != UNDEFINED_TYPE;
|
|
2565
2582
|
}
|
|
2566
|
-
return (useWebWorkers && webWorkerSupported ? createWebWorkerInterface : createWorkerInterface)(workerData, config);
|
|
2583
|
+
return (useWebWorkers && ((webWorkerSupported && workerURI) || createWorker) ? createWebWorkerInterface : createWorkerInterface)(workerData, config);
|
|
2567
2584
|
}
|
|
2568
2585
|
}
|
|
2569
2586
|
|
|
@@ -2620,7 +2637,11 @@
|
|
|
2620
2637
|
try {
|
|
2621
2638
|
worker = getWebWorker(workerData.workerURI, baseURI, workerData);
|
|
2622
2639
|
} catch {
|
|
2623
|
-
|
|
2640
|
+
if (workerData.createWorker) {
|
|
2641
|
+
createWorkerFailed = true;
|
|
2642
|
+
} else {
|
|
2643
|
+
webWorkerSupported = false;
|
|
2644
|
+
}
|
|
2624
2645
|
return createWorkerInterface(workerData, config);
|
|
2625
2646
|
}
|
|
2626
2647
|
Object.assign(workerData, {
|
|
@@ -2633,7 +2654,11 @@
|
|
|
2633
2654
|
return await runWebWorker(workerData, { chunkSize, wasmURI, baseURI, workerStartupTimeout });
|
|
2634
2655
|
} catch (error) {
|
|
2635
2656
|
if (error && error.workerStartupFailed) {
|
|
2636
|
-
|
|
2657
|
+
if (workerData.createWorker) {
|
|
2658
|
+
createWorkerFailed = true;
|
|
2659
|
+
} else {
|
|
2660
|
+
webWorkerSupported = false;
|
|
2661
|
+
}
|
|
2637
2662
|
const { reader } = workerData;
|
|
2638
2663
|
if (reader) {
|
|
2639
2664
|
reader.releaseLock();
|
|
@@ -2656,17 +2681,17 @@
|
|
|
2656
2681
|
try {
|
|
2657
2682
|
if (options.compressed && !options.format) {
|
|
2658
2683
|
const deflate = options.codecType.startsWith(CODEC_DEFLATE);
|
|
2659
|
-
const
|
|
2684
|
+
const FallbackStream = deflate ? config.CompressionStreamFallback : config.DecompressionStreamFallback;
|
|
2660
2685
|
const NativeStream = deflate ? config.CompressionStream : config.DecompressionStream;
|
|
2661
2686
|
if (!options.useCompressionStream) {
|
|
2662
2687
|
try {
|
|
2663
2688
|
await initModule$1(config);
|
|
2664
2689
|
} catch {
|
|
2665
|
-
if (!
|
|
2690
|
+
if (!FallbackStream || FallbackStream.requiresModule) {
|
|
2666
2691
|
options.useCompressionStream = true;
|
|
2667
2692
|
}
|
|
2668
2693
|
}
|
|
2669
|
-
} else if (
|
|
2694
|
+
} else if (FallbackStream && FallbackStream.requiresModule && !supportsDeflateRaw(NativeStream)) {
|
|
2670
2695
|
try {
|
|
2671
2696
|
await initModule$1(config);
|
|
2672
2697
|
} catch {
|
|
@@ -2680,12 +2705,12 @@
|
|
|
2680
2705
|
.pipeThrough(new ChunkStream(getChunkSize(config)))
|
|
2681
2706
|
.pipeTo(writable, { preventClose: true, preventAbort: true });
|
|
2682
2707
|
const {
|
|
2683
|
-
|
|
2708
|
+
crc32,
|
|
2684
2709
|
inputSize,
|
|
2685
2710
|
outputSize
|
|
2686
2711
|
} = codecStream;
|
|
2687
2712
|
return {
|
|
2688
|
-
|
|
2713
|
+
crc32,
|
|
2689
2714
|
inputSize,
|
|
2690
2715
|
outputSize
|
|
2691
2716
|
};
|
|
@@ -2791,8 +2816,11 @@
|
|
|
2791
2816
|
}
|
|
2792
2817
|
|
|
2793
2818
|
function getWebWorker(url, baseURI, workerData, isModuleType, useBlobURI = true) {
|
|
2819
|
+
const { createWorker } = workerData;
|
|
2794
2820
|
let worker, resolvedURI, resolvedOptions;
|
|
2795
|
-
if (
|
|
2821
|
+
if (createWorker) {
|
|
2822
|
+
worker = createWorker();
|
|
2823
|
+
} else if (webWorkerURI === UNDEFINED_VALUE || webWorkerSource !== url) {
|
|
2796
2824
|
// deno-lint-ignore valid-typeof
|
|
2797
2825
|
const isFunctionURI = typeof url == FUNCTION_TYPE;
|
|
2798
2826
|
if (isFunctionURI) {
|
|
@@ -3047,7 +3075,7 @@
|
|
|
3047
3075
|
async function runWorker(stream, workerOptions) {
|
|
3048
3076
|
const { options, config } = workerOptions;
|
|
3049
3077
|
const { transferStreams, useWebWorkers, useCompressionStream, compressed, checkCrc32, computeCrc32, encrypted, format, codecURI } = options;
|
|
3050
|
-
const { workerURI, maxWorkers } = config;
|
|
3078
|
+
const { workerURI, createWorker, maxWorkers } = config;
|
|
3051
3079
|
if (format) {
|
|
3052
3080
|
if (codecURI) {
|
|
3053
3081
|
options.codecURI = resolveCodecURI(codecURI, config.baseURI);
|
|
@@ -3059,6 +3087,7 @@
|
|
|
3059
3087
|
const workerSupported = format === UNDEFINED_VALUE || Boolean(options.codecURI);
|
|
3060
3088
|
workerOptions.useWebWorkers = !streamCopy && workerSupported && (useWebWorkers || (useWebWorkers === UNDEFINED_VALUE && config.useWebWorkers));
|
|
3061
3089
|
workerOptions.workerURI = workerOptions.useWebWorkers && workerURI ? workerURI : UNDEFINED_VALUE;
|
|
3090
|
+
workerOptions.createWorker = workerOptions.useWebWorkers && createWorker ? createWorker : UNDEFINED_VALUE;
|
|
3062
3091
|
options.useCompressionStream = useCompressionStream || (useCompressionStream === UNDEFINED_VALUE && config.useCompressionStream);
|
|
3063
3092
|
return (await getWorker()).run();
|
|
3064
3093
|
|
|
@@ -3122,7 +3151,7 @@
|
|
|
3122
3151
|
starvationTimeout = null;
|
|
3123
3152
|
if (pendingRequests.length) {
|
|
3124
3153
|
const [{ resolve, stream, workerOptions }] = pendingRequests.splice(0, 1);
|
|
3125
|
-
const inlineWorkerOptions = Object.assign({}, workerOptions, { useWebWorkers: false, workerURI: UNDEFINED_VALUE });
|
|
3154
|
+
const inlineWorkerOptions = Object.assign({}, workerOptions, { useWebWorkers: false, workerURI: UNDEFINED_VALUE, createWorker: UNDEFINED_VALUE });
|
|
3126
3155
|
resolve(new CodecWorker({}, stream, inlineWorkerOptions, onInlineTaskFinished));
|
|
3127
3156
|
armStarvationTimeout();
|
|
3128
3157
|
}
|
|
@@ -4283,6 +4312,8 @@
|
|
|
4283
4312
|
const PROPERTY_NAME_EXTRA_FIELD = "extraField";
|
|
4284
4313
|
const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
|
|
4285
4314
|
const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
|
|
4315
|
+
const PROPERTY_NAME_EXTRA_FIELD_UNIX_TYPE1 = "extraFieldUnixType1";
|
|
4316
|
+
const PROPERTY_NAME_EXTRA_FIELD_PKWARE_UNIX = "extraFieldPkwareUnix";
|
|
4286
4317
|
const PROPERTY_NAME_UID = "uid";
|
|
4287
4318
|
const PROPERTY_NAME_GID = "gid";
|
|
4288
4319
|
const PROPERTY_NAME_UNIX_MODE = "unixMode";
|
|
@@ -4299,6 +4330,7 @@
|
|
|
4299
4330
|
const PROPERTY_NAME_EXTRA_FIELD_AES = "extraFieldAES";
|
|
4300
4331
|
const PROPERTY_NAME_EXTRA_FIELD_NTFS = "extraFieldNTFS";
|
|
4301
4332
|
const PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP = "extraFieldExtendedTimestamp";
|
|
4333
|
+
const PROPERTY_NAME_EXTRA_FIELD_USDZ = "extraFieldUSDZ";
|
|
4302
4334
|
|
|
4303
4335
|
const PROPERTY_NAMES = [
|
|
4304
4336
|
PROPERTY_NAME_FILENAME,
|
|
@@ -4310,6 +4342,7 @@
|
|
|
4310
4342
|
PROPERTY_NAME_COMMENT,
|
|
4311
4343
|
PROPERTY_NAME_RAW_COMMENT,
|
|
4312
4344
|
PROPERTY_NAME_LAST_ACCESS_DATE,
|
|
4345
|
+
PROPERTY_NAME_RAW_LAST_ACCESS_DATE,
|
|
4313
4346
|
PROPERTY_NAME_CREATION_DATE,
|
|
4314
4347
|
PROPERTY_NAME_RAW_CREATION_DATE,
|
|
4315
4348
|
PROPERTY_NAME_OFFSET,
|
|
@@ -4332,6 +4365,8 @@
|
|
|
4332
4365
|
PROPERTY_NAME_EXTRA_FIELD,
|
|
4333
4366
|
PROPERTY_NAME_EXTRA_FIELD_UNIX,
|
|
4334
4367
|
PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
|
|
4368
|
+
PROPERTY_NAME_EXTRA_FIELD_UNIX_TYPE1,
|
|
4369
|
+
PROPERTY_NAME_EXTRA_FIELD_PKWARE_UNIX,
|
|
4335
4370
|
PROPERTY_NAME_UID,
|
|
4336
4371
|
PROPERTY_NAME_GID,
|
|
4337
4372
|
PROPERTY_NAME_UNIX_MODE,
|
|
@@ -4347,7 +4382,8 @@
|
|
|
4347
4382
|
PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT,
|
|
4348
4383
|
PROPERTY_NAME_EXTRA_FIELD_AES,
|
|
4349
4384
|
PROPERTY_NAME_EXTRA_FIELD_NTFS,
|
|
4350
|
-
PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP
|
|
4385
|
+
PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP,
|
|
4386
|
+
PROPERTY_NAME_EXTRA_FIELD_USDZ
|
|
4351
4387
|
];
|
|
4352
4388
|
|
|
4353
4389
|
class Entry {
|
|
@@ -4421,6 +4457,7 @@
|
|
|
4421
4457
|
const OPTION_OFFSET = "offset";
|
|
4422
4458
|
const OPTION_USDZ = "usdz";
|
|
4423
4459
|
const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
|
|
4460
|
+
const OPTION_LOCAL_EXTRA_FIELD = "localExtraField";
|
|
4424
4461
|
const OPTION_STRICTNESS = "strictness";
|
|
4425
4462
|
const OPTION_MAX_APPENDED_DATA_SIZE = "maxAppendedDataSize";
|
|
4426
4463
|
const STRICTNESS_STRICT = "strict";
|
|
@@ -4473,7 +4510,7 @@
|
|
|
4473
4510
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
4474
4511
|
const CHARSET_CP437 = "cp437";
|
|
4475
4512
|
const BITFLAG_AMBIGUITY_MASK = BITFLAG_ENCRYPTED | BITFLAG_DATA_DESCRIPTOR | BITFLAG_LANG_ENCODING_FLAG;
|
|
4476
|
-
const VENDOR_VERSION_AE_1 = 1;
|
|
4513
|
+
const VENDOR_VERSION_AE_1$1 = 1;
|
|
4477
4514
|
const ZIP64_PROPERTIES = [
|
|
4478
4515
|
[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
|
|
4479
4516
|
[PROPERTY_NAME_COMPRESSED_SIZE, MAX_32_BITS],
|
|
@@ -4866,7 +4903,7 @@
|
|
|
4866
4903
|
config,
|
|
4867
4904
|
bitFlag,
|
|
4868
4905
|
rawBitFlag,
|
|
4869
|
-
|
|
4906
|
+
crc32,
|
|
4870
4907
|
rawLastModDate,
|
|
4871
4908
|
uncompressedSize,
|
|
4872
4909
|
compressedSize
|
|
@@ -4957,7 +4994,7 @@
|
|
|
4957
4994
|
const checkCrc32 = (checkCrc32Option === UNDEFINED_VALUE ?
|
|
4958
4995
|
getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) :
|
|
4959
4996
|
checkCrc32Option) && !passThrough &&
|
|
4960
|
-
(!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1));
|
|
4997
|
+
(!encrypted || zipCrypto || (extraFieldAES && extraFieldAES.vendorVersion == VENDOR_VERSION_AE_1$1));
|
|
4961
4998
|
const workerOptions = {
|
|
4962
4999
|
options: {
|
|
4963
5000
|
codecType: CODEC_INFLATE,
|
|
@@ -4967,9 +5004,9 @@
|
|
|
4967
5004
|
encryptionStrength: extraFieldAES && extraFieldAES.strength,
|
|
4968
5005
|
checkCrc32,
|
|
4969
5006
|
checkAuthenticationCode: getOptionValue$1(zipEntry, options, OPTION_CHECK_AUTHENTICATION_CODE),
|
|
4970
|
-
passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((
|
|
5007
|
+
passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((crc32 >>> 24) & MAX_8_BITS)),
|
|
4971
5008
|
outputSize: passThrough ? compressedSize : uncompressedSize,
|
|
4972
|
-
|
|
5009
|
+
crc32,
|
|
4973
5010
|
compressed: compressionMethod != 0 && !passThrough,
|
|
4974
5011
|
encrypted,
|
|
4975
5012
|
useWebWorkers: getOptionValue$1(zipEntry, options, OPTION_USE_WEB_WORKERS),
|
|
@@ -4991,7 +5028,7 @@
|
|
|
4991
5028
|
fileEntry,
|
|
4992
5029
|
index,
|
|
4993
5030
|
offset: localHeaderOffset,
|
|
4994
|
-
|
|
5031
|
+
crc32,
|
|
4995
5032
|
compressedSize,
|
|
4996
5033
|
uncompressedSize,
|
|
4997
5034
|
dataOffset,
|
|
@@ -5108,6 +5145,16 @@
|
|
|
5108
5145
|
} else {
|
|
5109
5146
|
directory.compressionMethod = compressionMethod;
|
|
5110
5147
|
}
|
|
5148
|
+
const extraFieldPkwareUnix = extraField.get(EXTRAFIELD_TYPE_PKWARE_UNIX);
|
|
5149
|
+
if (extraFieldPkwareUnix) {
|
|
5150
|
+
readExtraFieldUnixDates(extraFieldPkwareUnix, directory);
|
|
5151
|
+
directory.extraFieldPkwareUnix = extraFieldPkwareUnix;
|
|
5152
|
+
}
|
|
5153
|
+
const extraFieldUnixType1 = extraField.get(EXTRAFIELD_TYPE_UNIX_TYPE1);
|
|
5154
|
+
if (extraFieldUnixType1) {
|
|
5155
|
+
readExtraFieldUnixDates(extraFieldUnixType1, directory);
|
|
5156
|
+
directory.extraFieldUnixType1 = extraFieldUnixType1;
|
|
5157
|
+
}
|
|
5111
5158
|
const extraFieldNTFS = extraField.get(EXTRAFIELD_TYPE_NTFS);
|
|
5112
5159
|
if (extraFieldNTFS) {
|
|
5113
5160
|
readExtraFieldNTFS(extraFieldNTFS, directory);
|
|
@@ -5157,15 +5204,15 @@
|
|
|
5157
5204
|
return;
|
|
5158
5205
|
}
|
|
5159
5206
|
const extraFieldView = getDataView(extraFieldUnicode.data);
|
|
5160
|
-
const
|
|
5161
|
-
|
|
5162
|
-
const
|
|
5163
|
-
|
|
5164
|
-
const
|
|
5207
|
+
const computedCrc32 = new Crc32();
|
|
5208
|
+
computedCrc32.append(fileEntry[rawPropertyName]);
|
|
5209
|
+
const computedCrc32View = getDataView(new Uint8Array(4));
|
|
5210
|
+
computedCrc32View.setUint32(0, computedCrc32.get(), true);
|
|
5211
|
+
const nameCrc32 = getUint32(extraFieldView, 1);
|
|
5165
5212
|
Object.assign(extraFieldUnicode, {
|
|
5166
5213
|
version: getUint8(extraFieldView, 0),
|
|
5167
5214
|
[propertyName]: decodeText(extraFieldUnicode.data.subarray(5)),
|
|
5168
|
-
valid: !fileEntry.bitFlag.languageEncodingFlag &&
|
|
5215
|
+
valid: !fileEntry.bitFlag.languageEncodingFlag && nameCrc32 == getUint32(computedCrc32View, 0)
|
|
5169
5216
|
});
|
|
5170
5217
|
if (extraFieldUnicode.valid) {
|
|
5171
5218
|
directory[propertyName] = extraFieldUnicode[propertyName];
|
|
@@ -5184,7 +5231,7 @@
|
|
|
5184
5231
|
compressionMethod: getUint16(extraFieldView, 5)
|
|
5185
5232
|
});
|
|
5186
5233
|
directory.compressionMethod = extraFieldAES.compressionMethod;
|
|
5187
|
-
if (extraFieldAES.vendorVersion != VENDOR_VERSION_AE_1) {
|
|
5234
|
+
if (extraFieldAES.vendorVersion != VENDOR_VERSION_AE_1$1) {
|
|
5188
5235
|
directory.crc32 = UNDEFINED_VALUE;
|
|
5189
5236
|
}
|
|
5190
5237
|
}
|
|
@@ -5224,6 +5271,22 @@
|
|
|
5224
5271
|
}
|
|
5225
5272
|
}
|
|
5226
5273
|
|
|
5274
|
+
function readExtraFieldUnixDates(extraField, directory) {
|
|
5275
|
+
if (extraField.data.length < 8) {
|
|
5276
|
+
return;
|
|
5277
|
+
}
|
|
5278
|
+
const extraFieldView = getDataView(extraField.data);
|
|
5279
|
+
const lastAccessDate = new Date(getUint32(extraFieldView, 0) * 1000);
|
|
5280
|
+
const lastModDate = new Date(getUint32(extraFieldView, 4) * 1000);
|
|
5281
|
+
const extraFieldData = { lastAccessDate, lastModDate };
|
|
5282
|
+
if (extraField.data.length >= 12) {
|
|
5283
|
+
extraFieldData.uid = getUint16(extraFieldView, 8);
|
|
5284
|
+
extraFieldData.gid = getUint16(extraFieldView, 10);
|
|
5285
|
+
}
|
|
5286
|
+
Object.assign(extraField, extraFieldData);
|
|
5287
|
+
Object.assign(directory, extraFieldData);
|
|
5288
|
+
}
|
|
5289
|
+
|
|
5227
5290
|
function readExtraFieldUnix(extraField, directory, isInfoZip) {
|
|
5228
5291
|
try {
|
|
5229
5292
|
const view = getDataView(extraField.data);
|
|
@@ -5302,7 +5365,7 @@
|
|
|
5302
5365
|
fileEntry,
|
|
5303
5366
|
index,
|
|
5304
5367
|
offset,
|
|
5305
|
-
|
|
5368
|
+
crc32,
|
|
5306
5369
|
compressedSize,
|
|
5307
5370
|
uncompressedSize,
|
|
5308
5371
|
dataOffset,
|
|
@@ -5323,7 +5386,7 @@
|
|
|
5323
5386
|
const dataDescriptorSignature = dataDescriptorArray.length == dataDescriptorLength + DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH &&
|
|
5324
5387
|
getUint32(getDataView(dataDescriptorArray), 0) == DATA_DESCRIPTOR_RECORD_SIGNATURE;
|
|
5325
5388
|
if (dataDescriptorSignature) {
|
|
5326
|
-
const
|
|
5389
|
+
const readCrc32 = getUint32(getDataView(dataDescriptorArray), 4);
|
|
5327
5390
|
let readCompressedSize;
|
|
5328
5391
|
let readUncompressedSize;
|
|
5329
5392
|
if (extraFieldZip64) {
|
|
@@ -5333,8 +5396,8 @@
|
|
|
5333
5396
|
readCompressedSize = getUint32(getDataView(dataDescriptorArray), 8);
|
|
5334
5397
|
readUncompressedSize = getUint32(getDataView(dataDescriptorArray), 12);
|
|
5335
5398
|
}
|
|
5336
|
-
const
|
|
5337
|
-
if (
|
|
5399
|
+
const matchCrc32 = (fileEntry.encrypted && !fileEntry.zipCrypto) || readCrc32 == crc32;
|
|
5400
|
+
if (matchCrc32 &&
|
|
5338
5401
|
readCompressedSize == compressedSize &&
|
|
5339
5402
|
readUncompressedSize == uncompressedSize) {
|
|
5340
5403
|
dataDescriptorLength += DATA_DESCRIPTOR_RECORD_SIGNATURE_LENGTH;
|
|
@@ -5503,11 +5566,11 @@
|
|
|
5503
5566
|
throwAmbiguousArchive("mismatched local file header (compression method)");
|
|
5504
5567
|
}
|
|
5505
5568
|
if (!localDirectory.bitFlag.dataDescriptor &&
|
|
5506
|
-
(localDirectory.
|
|
5507
|
-
(localDirectory.
|
|
5569
|
+
(localDirectory.crc32 || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
|
|
5570
|
+
(localDirectory.crc32 != zipEntry.crc32 ||
|
|
5508
5571
|
localDirectory.compressedSize != zipEntry.compressedSize ||
|
|
5509
5572
|
localDirectory.uncompressedSize != zipEntry.uncompressedSize)) {
|
|
5510
|
-
throwAmbiguousArchive("mismatched local file header (
|
|
5573
|
+
throwAmbiguousArchive("mismatched local file header (crc32 or sizes)");
|
|
5511
5574
|
}
|
|
5512
5575
|
}
|
|
5513
5576
|
|
|
@@ -5627,6 +5690,8 @@
|
|
|
5627
5690
|
const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
|
|
5628
5691
|
|
|
5629
5692
|
const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
|
|
5693
|
+
const EXTRAFIELD_OFFSET_AES_VENDOR_VERSION = 4;
|
|
5694
|
+
const VENDOR_VERSION_AE_1 = 1;
|
|
5630
5695
|
const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
|
|
5631
5696
|
const UNIX_EXTRA_FIELD_TYPE = "unix";
|
|
5632
5697
|
|
|
@@ -5721,9 +5786,9 @@
|
|
|
5721
5786
|
zip64UncompressedSize,
|
|
5722
5787
|
extraFieldLength
|
|
5723
5788
|
});
|
|
5724
|
-
const {
|
|
5725
|
-
if (
|
|
5726
|
-
setUint32(headerView, HEADER_OFFSET_SIGNATURE,
|
|
5789
|
+
const { crc32 } = entry;
|
|
5790
|
+
if (crc32 !== UNDEFINED_VALUE) {
|
|
5791
|
+
setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
|
|
5727
5792
|
}
|
|
5728
5793
|
Object.assign(entry, {
|
|
5729
5794
|
zip64UncompressedSize,
|
|
@@ -5908,6 +5973,7 @@
|
|
|
5908
5973
|
internalFileAttribute: metadataInfo.resolvedOptions.internalFileAttributes,
|
|
5909
5974
|
externalFileAttribute: attributesInfo.resolvedOptions.externalFileAttributes,
|
|
5910
5975
|
signature: options[PROPERTY_NAME_SIGNATURE],
|
|
5976
|
+
crc32: options.crc32 === UNDEFINED_VALUE ? options[PROPERTY_NAME_SIGNATURE] : options.crc32,
|
|
5911
5977
|
offset: zipWriter.offset - diskOffset,
|
|
5912
5978
|
diskNumberStart: diskNumber
|
|
5913
5979
|
});
|
|
@@ -6124,27 +6190,8 @@
|
|
|
6124
6190
|
if (!zipCrypto && (password !== UNDEFINED_VALUE || rawPassword !== UNDEFINED_VALUE) && !(encryptionStrength >= 1 && encryptionStrength <= 3)) {
|
|
6125
6191
|
throw new Error(ERR_INVALID_ENCRYPTION_STRENGTH);
|
|
6126
6192
|
}
|
|
6127
|
-
|
|
6128
|
-
const
|
|
6129
|
-
if (extraField) {
|
|
6130
|
-
let extraFieldSize = 0;
|
|
6131
|
-
let offset = 0;
|
|
6132
|
-
extraField.forEach(data => extraFieldSize += 4 + getLength(data));
|
|
6133
|
-
rawExtraField = new Uint8Array(extraFieldSize);
|
|
6134
|
-
const rawExtraFieldView = getDataView(rawExtraField);
|
|
6135
|
-
extraField.forEach((data, type) => {
|
|
6136
|
-
if (type > MAX_16_BITS) {
|
|
6137
|
-
throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6138
|
-
}
|
|
6139
|
-
if (getLength(data) > MAX_16_BITS) {
|
|
6140
|
-
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
6141
|
-
}
|
|
6142
|
-
setUint16(rawExtraFieldView, offset, type);
|
|
6143
|
-
setUint16(rawExtraFieldView, offset + 2, getLength(data));
|
|
6144
|
-
arraySet(rawExtraField, data, offset + 4);
|
|
6145
|
-
offset += 4 + getLength(data);
|
|
6146
|
-
});
|
|
6147
|
-
}
|
|
6193
|
+
const rawExtraField = serializeExtraField(options[PROPERTY_NAME_EXTRA_FIELD]);
|
|
6194
|
+
const rawLocalExtraField = serializeExtraField(options[OPTION_LOCAL_EXTRA_FIELD]);
|
|
6148
6195
|
return {
|
|
6149
6196
|
comment,
|
|
6150
6197
|
resolvedOptions: {
|
|
@@ -6178,11 +6225,36 @@
|
|
|
6178
6225
|
useCompressionStream,
|
|
6179
6226
|
dataDescriptor,
|
|
6180
6227
|
zip64,
|
|
6181
|
-
rawExtraField
|
|
6228
|
+
rawExtraField,
|
|
6229
|
+
rawLocalExtraField
|
|
6182
6230
|
}
|
|
6183
6231
|
};
|
|
6184
6232
|
}
|
|
6185
6233
|
|
|
6234
|
+
function serializeExtraField(extraField) {
|
|
6235
|
+
if (!extraField) {
|
|
6236
|
+
return EMPTY_UINT8_ARRAY;
|
|
6237
|
+
}
|
|
6238
|
+
let extraFieldSize = 0;
|
|
6239
|
+
let offset = 0;
|
|
6240
|
+
extraField.forEach(data => extraFieldSize += 4 + getLength(data));
|
|
6241
|
+
const rawExtraField = new Uint8Array(extraFieldSize);
|
|
6242
|
+
const rawExtraFieldView = getDataView(rawExtraField);
|
|
6243
|
+
extraField.forEach((data, type) => {
|
|
6244
|
+
if (type > MAX_16_BITS) {
|
|
6245
|
+
throw new Error(ERR_INVALID_EXTRAFIELD_TYPE);
|
|
6246
|
+
}
|
|
6247
|
+
if (getLength(data) > MAX_16_BITS) {
|
|
6248
|
+
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
6249
|
+
}
|
|
6250
|
+
setUint16(rawExtraFieldView, offset, type);
|
|
6251
|
+
setUint16(rawExtraFieldView, offset + 2, getLength(data));
|
|
6252
|
+
arraySet(rawExtraField, data, offset + 4);
|
|
6253
|
+
offset += 4 + getLength(data);
|
|
6254
|
+
});
|
|
6255
|
+
return rawExtraField;
|
|
6256
|
+
}
|
|
6257
|
+
|
|
6186
6258
|
async function resolveSizes(zipWriter, reader, { resolvedOptions: metadata }, options) {
|
|
6187
6259
|
const { passThrough, zipCrypto, password, rawPassword, encryptionStrength } = metadata;
|
|
6188
6260
|
let { dataDescriptor, zip64, level, compressionMethod } = metadata;
|
|
@@ -6507,12 +6579,9 @@
|
|
|
6507
6579
|
msdosAttributes
|
|
6508
6580
|
};
|
|
6509
6581
|
let {
|
|
6510
|
-
crc32
|
|
6582
|
+
crc32,
|
|
6511
6583
|
uncompressedSize
|
|
6512
6584
|
} = options;
|
|
6513
|
-
if (signature === UNDEFINED_VALUE) {
|
|
6514
|
-
({ signature } = options);
|
|
6515
|
-
}
|
|
6516
6585
|
let compressedSize = 0;
|
|
6517
6586
|
if (!passThrough) {
|
|
6518
6587
|
uncompressedSize = 0;
|
|
@@ -6550,7 +6619,7 @@
|
|
|
6550
6619
|
if (!passThrough) {
|
|
6551
6620
|
uncompressedSize = result.inputSize;
|
|
6552
6621
|
if (!encrypted || zipCrypto) {
|
|
6553
|
-
|
|
6622
|
+
crc32 = result.crc32;
|
|
6554
6623
|
}
|
|
6555
6624
|
}
|
|
6556
6625
|
if ((!zip64CompressedSize && compressedSize >= MAX_32_BITS) ||
|
|
@@ -6566,7 +6635,7 @@
|
|
|
6566
6635
|
|
|
6567
6636
|
}
|
|
6568
6637
|
setEntryInfo({
|
|
6569
|
-
|
|
6638
|
+
crc32,
|
|
6570
6639
|
compressedSize,
|
|
6571
6640
|
uncompressedSize,
|
|
6572
6641
|
headerInfo,
|
|
@@ -6589,8 +6658,8 @@
|
|
|
6589
6658
|
version,
|
|
6590
6659
|
headerArray,
|
|
6591
6660
|
headerView,
|
|
6592
|
-
signature,
|
|
6593
|
-
crc32: encrypted && !zipCrypto ? UNDEFINED_VALUE :
|
|
6661
|
+
signature: crc32,
|
|
6662
|
+
crc32: encrypted && !zipCrypto && !passThrough ? UNDEFINED_VALUE : crc32,
|
|
6594
6663
|
extraFieldExtendedTimestampFlag,
|
|
6595
6664
|
zip64UncompressedSize,
|
|
6596
6665
|
zip64CompressedSize
|
|
@@ -6611,6 +6680,7 @@
|
|
|
6611
6680
|
dataDescriptor,
|
|
6612
6681
|
directory,
|
|
6613
6682
|
rawExtraField,
|
|
6683
|
+
rawLocalExtraField,
|
|
6614
6684
|
encryptionStrength,
|
|
6615
6685
|
extendedTimestamp,
|
|
6616
6686
|
ntfsTimestamp,
|
|
@@ -6618,7 +6688,8 @@
|
|
|
6618
6688
|
encrypted,
|
|
6619
6689
|
zip64UncompressedSize,
|
|
6620
6690
|
zip64CompressedSize,
|
|
6621
|
-
uncompressedSize
|
|
6691
|
+
uncompressedSize,
|
|
6692
|
+
crc32
|
|
6622
6693
|
} = options;
|
|
6623
6694
|
let { version, compressionMethod } = options;
|
|
6624
6695
|
const compressed = !directory && (compressionMethod === UNDEFINED_VALUE
|
|
@@ -6744,11 +6815,14 @@
|
|
|
6744
6815
|
}
|
|
6745
6816
|
if (encrypted && !zipCrypto) {
|
|
6746
6817
|
version = version > VERSION_AES ? version : VERSION_AES;
|
|
6818
|
+
if (passThrough && crc32 !== UNDEFINED_VALUE) {
|
|
6819
|
+
rawExtraFieldAES[EXTRAFIELD_OFFSET_AES_VENDOR_VERSION] = VENDOR_VERSION_AE_1;
|
|
6820
|
+
}
|
|
6747
6821
|
rawExtraFieldAES[9] = compressionMethod;
|
|
6748
6822
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
6749
6823
|
}
|
|
6750
6824
|
const localExtraFieldZip64Length = writeLocalExtraFieldZip64 ? getLength(rawLocalExtraFieldZip64) : 0;
|
|
6751
|
-
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
6825
|
+
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawLocalExtraField);
|
|
6752
6826
|
if (extraFieldLength > MAX_16_BITS) {
|
|
6753
6827
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
6754
6828
|
}
|
|
@@ -6782,6 +6856,7 @@
|
|
|
6782
6856
|
localHeader.bytes(rawExtraFieldNTFS);
|
|
6783
6857
|
localHeader.bytes(rawExtraFieldUnix);
|
|
6784
6858
|
localHeader.bytes(rawExtraField);
|
|
6859
|
+
localHeader.bytes(rawLocalExtraField);
|
|
6785
6860
|
if (dataDescriptor) {
|
|
6786
6861
|
if (!zip64CompressedSize) {
|
|
6787
6862
|
setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + LOCAL_HEADER_COMMON_OFFSET, 0);
|
|
@@ -6900,7 +6975,7 @@
|
|
|
6900
6975
|
}
|
|
6901
6976
|
|
|
6902
6977
|
function setEntryInfo({
|
|
6903
|
-
|
|
6978
|
+
crc32,
|
|
6904
6979
|
compressedSize,
|
|
6905
6980
|
uncompressedSize,
|
|
6906
6981
|
headerInfo,
|
|
@@ -6908,6 +6983,7 @@
|
|
|
6908
6983
|
}, {
|
|
6909
6984
|
zip64,
|
|
6910
6985
|
zipCrypto,
|
|
6986
|
+
passThrough,
|
|
6911
6987
|
dataDescriptor
|
|
6912
6988
|
}) {
|
|
6913
6989
|
const {
|
|
@@ -6918,10 +6994,10 @@
|
|
|
6918
6994
|
dataDescriptorView,
|
|
6919
6995
|
dataDescriptorOffset
|
|
6920
6996
|
} = dataDescriptorInfo;
|
|
6921
|
-
if ((!encrypted || zipCrypto) &&
|
|
6922
|
-
setUint32(headerView, HEADER_OFFSET_SIGNATURE,
|
|
6997
|
+
if ((!encrypted || zipCrypto || passThrough) && crc32 !== UNDEFINED_VALUE) {
|
|
6998
|
+
setUint32(headerView, HEADER_OFFSET_SIGNATURE, crc32);
|
|
6923
6999
|
if (dataDescriptor) {
|
|
6924
|
-
setUint32(dataDescriptorView, dataDescriptorOffset,
|
|
7000
|
+
setUint32(dataDescriptorView, dataDescriptorOffset, crc32);
|
|
6925
7001
|
}
|
|
6926
7002
|
}
|
|
6927
7003
|
if (zip64) {
|
|
@@ -6944,15 +7020,15 @@
|
|
|
6944
7020
|
encrypted,
|
|
6945
7021
|
zip64,
|
|
6946
7022
|
localExtraFieldZip64Length,
|
|
6947
|
-
|
|
7023
|
+
crc32,
|
|
6948
7024
|
compressedSize,
|
|
6949
7025
|
uncompressedSize,
|
|
6950
7026
|
zip64UncompressedSize,
|
|
6951
7027
|
zip64CompressedSize
|
|
6952
|
-
}, localHeaderView, { dataDescriptor }) {
|
|
7028
|
+
}, localHeaderView, { dataDescriptor, passThrough }) {
|
|
6953
7029
|
if (!dataDescriptor) {
|
|
6954
|
-
if (!encrypted) {
|
|
6955
|
-
setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET,
|
|
7030
|
+
if (!encrypted || (passThrough && crc32 !== UNDEFINED_VALUE)) {
|
|
7031
|
+
setUint32(localHeaderView, HEADER_OFFSET_SIGNATURE + LOCAL_HEADER_COMMON_OFFSET, crc32);
|
|
6956
7032
|
}
|
|
6957
7033
|
if (!zip64CompressedSize) {
|
|
6958
7034
|
setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + LOCAL_HEADER_COMMON_OFFSET, compressedSize);
|
|
@@ -8214,8 +8290,8 @@
|
|
|
8214
8290
|
}
|
|
8215
8291
|
});
|
|
8216
8292
|
setDefaultConfiguration({
|
|
8217
|
-
CompressionStreamZlib,
|
|
8218
|
-
DecompressionStreamZlib
|
|
8293
|
+
CompressionStreamFallback: CompressionStreamZlib,
|
|
8294
|
+
DecompressionStreamFallback: DecompressionStreamZlib
|
|
8219
8295
|
});
|
|
8220
8296
|
|
|
8221
8297
|
function terminateWorkersAndModule() {
|
|
@@ -8284,7 +8360,7 @@
|
|
|
8284
8360
|
*/
|
|
8285
8361
|
|
|
8286
8362
|
|
|
8287
|
-
|
|
8363
|
+
n$1(setDefaultConfiguration);
|
|
8288
8364
|
|
|
8289
8365
|
exports.BlobReader = BlobReader;
|
|
8290
8366
|
exports.BlobWriter = BlobWriter;
|