@zip.js/zip.js 2.14.0 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BENCHMARKS.md +342 -454
- package/deno.json +1 -1
- package/dist/zip-core-external.js +262 -81
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +260 -74
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +262 -81
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +260 -74
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +262 -81
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +262 -76
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +266 -85
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +262 -76
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-module.wasm +0 -0
- package/dist/zip-native.js +262 -76
- 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 +266 -85
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +262 -76
- package/index-native.min.js +1 -1
- package/index.cjs +266 -85
- package/index.min.js +1 -1
- package/lib/core/codec-worker.js +6 -5
- package/lib/core/streams/codecs/aes-hmac-sha1.js +194 -56
- package/lib/core/streams/zlib-wasm/zlib-streams.js +2 -7
- package/lib/core/streams/zlib-wasm/zlib-streams.wasm +0 -0
- package/lib/core/version.js +1 -1
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-reader.js +53 -6
- package/lib/core/zlib-streams-inline.js +1 -1
- package/package.json +1 -1
package/dist/zip-core.js
CHANGED
|
@@ -736,7 +736,7 @@
|
|
|
736
736
|
const ROUND_KEYS_LENGTH = 60;
|
|
737
737
|
const SHA1_BLOCK_LENGTH = 64;
|
|
738
738
|
const SHA1_DIGEST_LENGTH = 20;
|
|
739
|
-
const SHA1_SCHEDULE_LENGTH =
|
|
739
|
+
const SHA1_SCHEDULE_LENGTH = 16;
|
|
740
740
|
const SHA1_LENGTH_OFFSET = 56;
|
|
741
741
|
const SHA1_PADDING = new Uint8Array([0x80]);
|
|
742
742
|
const SHA1_ZERO = new Uint8Array(1);
|
|
@@ -755,9 +755,12 @@
|
|
|
755
755
|
initTables();
|
|
756
756
|
const roundKeys = new Int32Array(ROUND_KEYS_LENGTH);
|
|
757
757
|
const rounds = expandKey(key, roundKeys);
|
|
758
|
-
const counter = new Uint8Array(BLOCK_LENGTH$1);
|
|
759
758
|
const keystream = new Int32Array(BLOCK_LENGTH$1 / 4);
|
|
760
759
|
const hmac = createHmac(authenticationKey);
|
|
760
|
+
let counter0 = 0;
|
|
761
|
+
let counter1 = 0;
|
|
762
|
+
let counter2 = 0;
|
|
763
|
+
let counter3 = 0;
|
|
761
764
|
return {
|
|
762
765
|
process(data, decrypt) {
|
|
763
766
|
if (decrypt) {
|
|
@@ -793,31 +796,83 @@
|
|
|
793
796
|
}
|
|
794
797
|
|
|
795
798
|
function nextKeystream() {
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
let
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
799
|
+
counter0 = (counter0 + 1) | 0;
|
|
800
|
+
if (!counter0) {
|
|
801
|
+
counter1 = (counter1 + 1) | 0;
|
|
802
|
+
if (!counter1) {
|
|
803
|
+
counter2 = (counter2 + 1) | 0;
|
|
804
|
+
if (!counter2) {
|
|
805
|
+
counter3 = (counter3 + 1) | 0;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
let s0 = swapBytes(counter0) ^ roundKeys[0];
|
|
810
|
+
let s1 = swapBytes(counter1) ^ roundKeys[1];
|
|
811
|
+
let s2 = swapBytes(counter2) ^ roundKeys[2];
|
|
812
|
+
let s3 = swapBytes(counter3) ^ roundKeys[3];
|
|
813
|
+
let t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[4];
|
|
814
|
+
let t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[5];
|
|
815
|
+
let t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[6];
|
|
816
|
+
let t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[7];
|
|
817
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[8];
|
|
818
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[9];
|
|
819
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[10];
|
|
820
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[11];
|
|
821
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[12];
|
|
822
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[13];
|
|
823
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[14];
|
|
824
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[15];
|
|
825
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[16];
|
|
826
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[17];
|
|
827
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[18];
|
|
828
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[19];
|
|
829
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[20];
|
|
830
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[21];
|
|
831
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[22];
|
|
832
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[23];
|
|
833
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[24];
|
|
834
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[25];
|
|
835
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[26];
|
|
836
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[27];
|
|
837
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[28];
|
|
838
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[29];
|
|
839
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[30];
|
|
840
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[31];
|
|
841
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[32];
|
|
842
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[33];
|
|
843
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[34];
|
|
844
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[35];
|
|
845
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[36];
|
|
846
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[37];
|
|
847
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[38];
|
|
848
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[39];
|
|
849
|
+
let indexKey = 40;
|
|
850
|
+
if (rounds > 10) {
|
|
851
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[40];
|
|
852
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[41];
|
|
853
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[42];
|
|
854
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[43];
|
|
855
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[44];
|
|
856
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[45];
|
|
857
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[46];
|
|
858
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[47];
|
|
859
|
+
indexKey = 48;
|
|
860
|
+
}
|
|
861
|
+
if (rounds > 12) {
|
|
862
|
+
s0 = T0[t0 >>> 24] ^ T1[(t1 >>> 16) & 255] ^ T2[(t2 >>> 8) & 255] ^ T3[t3 & 255] ^ roundKeys[48];
|
|
863
|
+
s1 = T0[t1 >>> 24] ^ T1[(t2 >>> 16) & 255] ^ T2[(t3 >>> 8) & 255] ^ T3[t0 & 255] ^ roundKeys[49];
|
|
864
|
+
s2 = T0[t2 >>> 24] ^ T1[(t3 >>> 16) & 255] ^ T2[(t0 >>> 8) & 255] ^ T3[t1 & 255] ^ roundKeys[50];
|
|
865
|
+
s3 = T0[t3 >>> 24] ^ T1[(t0 >>> 16) & 255] ^ T2[(t1 >>> 8) & 255] ^ T3[t2 & 255] ^ roundKeys[51];
|
|
866
|
+
t0 = T0[s0 >>> 24] ^ T1[(s1 >>> 16) & 255] ^ T2[(s2 >>> 8) & 255] ^ T3[s3 & 255] ^ roundKeys[52];
|
|
867
|
+
t1 = T0[s1 >>> 24] ^ T1[(s2 >>> 16) & 255] ^ T2[(s3 >>> 8) & 255] ^ T3[s0 & 255] ^ roundKeys[53];
|
|
868
|
+
t2 = T0[s2 >>> 24] ^ T1[(s3 >>> 16) & 255] ^ T2[(s0 >>> 8) & 255] ^ T3[s1 & 255] ^ roundKeys[54];
|
|
869
|
+
t3 = T0[s3 >>> 24] ^ T1[(s0 >>> 16) & 255] ^ T2[(s1 >>> 8) & 255] ^ T3[s2 & 255] ^ roundKeys[55];
|
|
870
|
+
indexKey = 56;
|
|
871
|
+
}
|
|
872
|
+
keystream[0] = ((S_BOX[t0 >>> 24] << 24) | (S_BOX[(t1 >>> 16) & 255] << 16) | (S_BOX[(t2 >>> 8) & 255] << 8) | S_BOX[t3 & 255]) ^ roundKeys[indexKey];
|
|
873
|
+
keystream[1] = ((S_BOX[t1 >>> 24] << 24) | (S_BOX[(t2 >>> 16) & 255] << 16) | (S_BOX[(t3 >>> 8) & 255] << 8) | S_BOX[t0 & 255]) ^ roundKeys[indexKey + 1];
|
|
874
|
+
keystream[2] = ((S_BOX[t2 >>> 24] << 24) | (S_BOX[(t3 >>> 16) & 255] << 16) | (S_BOX[(t0 >>> 8) & 255] << 8) | S_BOX[t1 & 255]) ^ roundKeys[indexKey + 2];
|
|
875
|
+
keystream[3] = ((S_BOX[t3 >>> 24] << 24) | (S_BOX[(t0 >>> 16) & 255] << 16) | (S_BOX[(t1 >>> 8) & 255] << 8) | S_BOX[t2 & 255]) ^ roundKeys[indexKey + 3];
|
|
821
876
|
}
|
|
822
877
|
}
|
|
823
878
|
|
|
@@ -941,47 +996,126 @@
|
|
|
941
996
|
for (let index = 0; index < 16; index++) {
|
|
942
997
|
schedule[index] = view.getInt32(offset + 4 * index);
|
|
943
998
|
}
|
|
944
|
-
for (let index = 16; index < SHA1_SCHEDULE_LENGTH; index++) {
|
|
945
|
-
const word = schedule[index - 3] ^ schedule[index - 8] ^ schedule[index - 14] ^ schedule[index - 16];
|
|
946
|
-
schedule[index] = (word << 1) | (word >>> 31);
|
|
947
|
-
}
|
|
948
999
|
let a = state[0];
|
|
949
1000
|
let b = state[1];
|
|
950
1001
|
let c = state[2];
|
|
951
1002
|
let d = state[3];
|
|
952
1003
|
let e = state[4];
|
|
953
1004
|
let t;
|
|
954
|
-
for (let index = 0; index <
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
d = c;
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1005
|
+
for (let index = 0; index < 15; index += 5) {
|
|
1006
|
+
e = (((a << 5) | (a >>> 27)) + (((c ^ d) & b) ^ d) + e + 0x5A827999 + schedule[index]) | 0;
|
|
1007
|
+
b = (b << 30) | (b >>> 2);
|
|
1008
|
+
d = (((e << 5) | (e >>> 27)) + (((b ^ c) & a) ^ c) + d + 0x5A827999 + schedule[index + 1]) | 0;
|
|
1009
|
+
a = (a << 30) | (a >>> 2);
|
|
1010
|
+
c = (((d << 5) | (d >>> 27)) + (((a ^ b) & e) ^ b) + c + 0x5A827999 + schedule[index + 2]) | 0;
|
|
1011
|
+
e = (e << 30) | (e >>> 2);
|
|
1012
|
+
b = (((c << 5) | (c >>> 27)) + (((e ^ a) & d) ^ a) + b + 0x5A827999 + schedule[index + 3]) | 0;
|
|
1013
|
+
d = (d << 30) | (d >>> 2);
|
|
1014
|
+
a = (((b << 5) | (b >>> 27)) + (((d ^ e) & c) ^ e) + a + 0x5A827999 + schedule[index + 4]) | 0;
|
|
1015
|
+
c = (c << 30) | (c >>> 2);
|
|
1016
|
+
}
|
|
1017
|
+
e = (((a << 5) | (a >>> 27)) + (((c ^ d) & b) ^ d) + e + 0x5A827999 + schedule[15]) | 0;
|
|
1018
|
+
b = (b << 30) | (b >>> 2);
|
|
1019
|
+
t = schedule[13] ^ schedule[8] ^ schedule[2] ^ schedule[0];
|
|
1020
|
+
t = (t << 1) | (t >>> 31);
|
|
1021
|
+
schedule[0] = t;
|
|
1022
|
+
d = (((e << 5) | (e >>> 27)) + (((b ^ c) & a) ^ c) + d + 0x5A827999 + t) | 0;
|
|
1023
|
+
a = (a << 30) | (a >>> 2);
|
|
1024
|
+
t = schedule[14] ^ schedule[9] ^ schedule[3] ^ schedule[1];
|
|
1025
|
+
t = (t << 1) | (t >>> 31);
|
|
1026
|
+
schedule[1] = t;
|
|
1027
|
+
c = (((d << 5) | (d >>> 27)) + (((a ^ b) & e) ^ b) + c + 0x5A827999 + t) | 0;
|
|
1028
|
+
e = (e << 30) | (e >>> 2);
|
|
1029
|
+
t = schedule[15] ^ schedule[10] ^ schedule[4] ^ schedule[2];
|
|
1030
|
+
t = (t << 1) | (t >>> 31);
|
|
1031
|
+
schedule[2] = t;
|
|
1032
|
+
b = (((c << 5) | (c >>> 27)) + (((e ^ a) & d) ^ a) + b + 0x5A827999 + t) | 0;
|
|
1033
|
+
d = (d << 30) | (d >>> 2);
|
|
1034
|
+
t = schedule[0] ^ schedule[11] ^ schedule[5] ^ schedule[3];
|
|
1035
|
+
t = (t << 1) | (t >>> 31);
|
|
1036
|
+
schedule[3] = t;
|
|
1037
|
+
a = (((b << 5) | (b >>> 27)) + (((d ^ e) & c) ^ e) + a + 0x5A827999 + t) | 0;
|
|
1038
|
+
c = (c << 30) | (c >>> 2);
|
|
1039
|
+
for (let index = 20; index < 40; index += 5) {
|
|
1040
|
+
t = schedule[(index - 3) & 15] ^ schedule[(index - 8) & 15] ^ schedule[(index - 14) & 15] ^ schedule[(index) & 15];
|
|
1041
|
+
t = (t << 1) | (t >>> 31);
|
|
1042
|
+
schedule[(index) & 15] = t;
|
|
1043
|
+
e = (((a << 5) | (a >>> 27)) + (b ^ c ^ d) + e + 0x6ED9EBA1 + t) | 0;
|
|
1044
|
+
b = (b << 30) | (b >>> 2);
|
|
1045
|
+
t = schedule[(index - 2) & 15] ^ schedule[(index - 7) & 15] ^ schedule[(index - 13) & 15] ^ schedule[(index + 1) & 15];
|
|
1046
|
+
t = (t << 1) | (t >>> 31);
|
|
1047
|
+
schedule[(index + 1) & 15] = t;
|
|
1048
|
+
d = (((e << 5) | (e >>> 27)) + (a ^ b ^ c) + d + 0x6ED9EBA1 + t) | 0;
|
|
1049
|
+
a = (a << 30) | (a >>> 2);
|
|
1050
|
+
t = schedule[(index - 1) & 15] ^ schedule[(index - 6) & 15] ^ schedule[(index - 12) & 15] ^ schedule[(index + 2) & 15];
|
|
1051
|
+
t = (t << 1) | (t >>> 31);
|
|
1052
|
+
schedule[(index + 2) & 15] = t;
|
|
1053
|
+
c = (((d << 5) | (d >>> 27)) + (e ^ a ^ b) + c + 0x6ED9EBA1 + t) | 0;
|
|
1054
|
+
e = (e << 30) | (e >>> 2);
|
|
1055
|
+
t = schedule[(index) & 15] ^ schedule[(index - 5) & 15] ^ schedule[(index - 11) & 15] ^ schedule[(index + 3) & 15];
|
|
1056
|
+
t = (t << 1) | (t >>> 31);
|
|
1057
|
+
schedule[(index + 3) & 15] = t;
|
|
1058
|
+
b = (((c << 5) | (c >>> 27)) + (d ^ e ^ a) + b + 0x6ED9EBA1 + t) | 0;
|
|
1059
|
+
d = (d << 30) | (d >>> 2);
|
|
1060
|
+
t = schedule[(index + 1) & 15] ^ schedule[(index - 4) & 15] ^ schedule[(index - 10) & 15] ^ schedule[(index + 4) & 15];
|
|
1061
|
+
t = (t << 1) | (t >>> 31);
|
|
1062
|
+
schedule[(index + 4) & 15] = t;
|
|
1063
|
+
a = (((b << 5) | (b >>> 27)) + (c ^ d ^ e) + a + 0x6ED9EBA1 + t) | 0;
|
|
1064
|
+
c = (c << 30) | (c >>> 2);
|
|
1065
|
+
}
|
|
1066
|
+
for (let index = 40; index < 60; index += 5) {
|
|
1067
|
+
t = schedule[(index - 3) & 15] ^ schedule[(index - 8) & 15] ^ schedule[(index - 14) & 15] ^ schedule[(index) & 15];
|
|
1068
|
+
t = (t << 1) | (t >>> 31);
|
|
1069
|
+
schedule[(index) & 15] = t;
|
|
1070
|
+
e = (((a << 5) | (a >>> 27)) + ((b & c) | ((b | c) & d)) + e + 0x8F1BBCDC + t) | 0;
|
|
1071
|
+
b = (b << 30) | (b >>> 2);
|
|
1072
|
+
t = schedule[(index - 2) & 15] ^ schedule[(index - 7) & 15] ^ schedule[(index - 13) & 15] ^ schedule[(index + 1) & 15];
|
|
1073
|
+
t = (t << 1) | (t >>> 31);
|
|
1074
|
+
schedule[(index + 1) & 15] = t;
|
|
1075
|
+
d = (((e << 5) | (e >>> 27)) + ((a & b) | ((a | b) & c)) + d + 0x8F1BBCDC + t) | 0;
|
|
1076
|
+
a = (a << 30) | (a >>> 2);
|
|
1077
|
+
t = schedule[(index - 1) & 15] ^ schedule[(index - 6) & 15] ^ schedule[(index - 12) & 15] ^ schedule[(index + 2) & 15];
|
|
1078
|
+
t = (t << 1) | (t >>> 31);
|
|
1079
|
+
schedule[(index + 2) & 15] = t;
|
|
1080
|
+
c = (((d << 5) | (d >>> 27)) + ((e & a) | ((e | a) & b)) + c + 0x8F1BBCDC + t) | 0;
|
|
1081
|
+
e = (e << 30) | (e >>> 2);
|
|
1082
|
+
t = schedule[(index) & 15] ^ schedule[(index - 5) & 15] ^ schedule[(index - 11) & 15] ^ schedule[(index + 3) & 15];
|
|
1083
|
+
t = (t << 1) | (t >>> 31);
|
|
1084
|
+
schedule[(index + 3) & 15] = t;
|
|
1085
|
+
b = (((c << 5) | (c >>> 27)) + ((d & e) | ((d | e) & a)) + b + 0x8F1BBCDC + t) | 0;
|
|
1086
|
+
d = (d << 30) | (d >>> 2);
|
|
1087
|
+
t = schedule[(index + 1) & 15] ^ schedule[(index - 4) & 15] ^ schedule[(index - 10) & 15] ^ schedule[(index + 4) & 15];
|
|
1088
|
+
t = (t << 1) | (t >>> 31);
|
|
1089
|
+
schedule[(index + 4) & 15] = t;
|
|
1090
|
+
a = (((b << 5) | (b >>> 27)) + ((c & d) | ((c | d) & e)) + a + 0x8F1BBCDC + t) | 0;
|
|
1091
|
+
c = (c << 30) | (c >>> 2);
|
|
1092
|
+
}
|
|
1093
|
+
for (let index = 60; index < 80; index += 5) {
|
|
1094
|
+
t = schedule[(index - 3) & 15] ^ schedule[(index - 8) & 15] ^ schedule[(index - 14) & 15] ^ schedule[(index) & 15];
|
|
1095
|
+
t = (t << 1) | (t >>> 31);
|
|
1096
|
+
schedule[(index) & 15] = t;
|
|
1097
|
+
e = (((a << 5) | (a >>> 27)) + (b ^ c ^ d) + e + 0xCA62C1D6 + t) | 0;
|
|
1098
|
+
b = (b << 30) | (b >>> 2);
|
|
1099
|
+
t = schedule[(index - 2) & 15] ^ schedule[(index - 7) & 15] ^ schedule[(index - 13) & 15] ^ schedule[(index + 1) & 15];
|
|
1100
|
+
t = (t << 1) | (t >>> 31);
|
|
1101
|
+
schedule[(index + 1) & 15] = t;
|
|
1102
|
+
d = (((e << 5) | (e >>> 27)) + (a ^ b ^ c) + d + 0xCA62C1D6 + t) | 0;
|
|
1103
|
+
a = (a << 30) | (a >>> 2);
|
|
1104
|
+
t = schedule[(index - 1) & 15] ^ schedule[(index - 6) & 15] ^ schedule[(index - 12) & 15] ^ schedule[(index + 2) & 15];
|
|
1105
|
+
t = (t << 1) | (t >>> 31);
|
|
1106
|
+
schedule[(index + 2) & 15] = t;
|
|
1107
|
+
c = (((d << 5) | (d >>> 27)) + (e ^ a ^ b) + c + 0xCA62C1D6 + t) | 0;
|
|
1108
|
+
e = (e << 30) | (e >>> 2);
|
|
1109
|
+
t = schedule[(index) & 15] ^ schedule[(index - 5) & 15] ^ schedule[(index - 11) & 15] ^ schedule[(index + 3) & 15];
|
|
1110
|
+
t = (t << 1) | (t >>> 31);
|
|
1111
|
+
schedule[(index + 3) & 15] = t;
|
|
1112
|
+
b = (((c << 5) | (c >>> 27)) + (d ^ e ^ a) + b + 0xCA62C1D6 + t) | 0;
|
|
1113
|
+
d = (d << 30) | (d >>> 2);
|
|
1114
|
+
t = schedule[(index + 1) & 15] ^ schedule[(index - 4) & 15] ^ schedule[(index - 10) & 15] ^ schedule[(index + 4) & 15];
|
|
1115
|
+
t = (t << 1) | (t >>> 31);
|
|
1116
|
+
schedule[(index + 4) & 15] = t;
|
|
1117
|
+
a = (((b << 5) | (b >>> 27)) + (c ^ d ^ e) + a + 0xCA62C1D6 + t) | 0;
|
|
1118
|
+
c = (c << 30) | (c >>> 2);
|
|
985
1119
|
}
|
|
986
1120
|
state[0] = (state[0] + a) | 0;
|
|
987
1121
|
state[1] = (state[1] + b) | 0;
|
|
@@ -1044,6 +1178,10 @@
|
|
|
1044
1178
|
return (S_BOX[word >>> 24] << 24) | (S_BOX[(word >>> 16) & 255] << 16) | (S_BOX[(word >>> 8) & 255] << 8) | S_BOX[word & 255];
|
|
1045
1179
|
}
|
|
1046
1180
|
|
|
1181
|
+
function swapBytes(value) {
|
|
1182
|
+
return (value << 24) | ((value & 0xff00) << 8) | ((value >>> 8) & 0xff00) | (value >>> 24);
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1047
1185
|
function multiplyByTwo(value) {
|
|
1048
1186
|
return ((value << 1) ^ ((value >> 7) * 0x1b)) & 255;
|
|
1049
1187
|
}
|
|
@@ -2333,7 +2471,8 @@
|
|
|
2333
2471
|
return new Promise(resolve => {
|
|
2334
2472
|
const { worker, busy } = workerData;
|
|
2335
2473
|
if (busy) {
|
|
2336
|
-
workerData.
|
|
2474
|
+
workerData.terminateResolvers = workerData.terminateResolvers || [];
|
|
2475
|
+
workerData.terminateResolvers.push(resolve);
|
|
2337
2476
|
} else {
|
|
2338
2477
|
if (worker) {
|
|
2339
2478
|
worker.terminate();
|
|
@@ -2346,14 +2485,14 @@
|
|
|
2346
2485
|
},
|
|
2347
2486
|
onTaskFinished() {
|
|
2348
2487
|
if (workerData.busy) {
|
|
2349
|
-
const {
|
|
2350
|
-
if (
|
|
2351
|
-
workerData.
|
|
2488
|
+
const { terminateResolvers, worker } = workerData;
|
|
2489
|
+
if (terminateResolvers) {
|
|
2490
|
+
workerData.terminateResolvers = null;
|
|
2352
2491
|
if (worker) {
|
|
2353
2492
|
workerData.terminated = true;
|
|
2354
2493
|
worker.terminate();
|
|
2355
2494
|
}
|
|
2356
|
-
|
|
2495
|
+
terminateResolvers.forEach(resolve => resolve());
|
|
2357
2496
|
}
|
|
2358
2497
|
workerData.busy = false;
|
|
2359
2498
|
onTaskFinished(workerData);
|
|
@@ -4519,7 +4658,7 @@
|
|
|
4519
4658
|
Object.assign(this, {
|
|
4520
4659
|
reader: new GenericReader(reader),
|
|
4521
4660
|
options,
|
|
4522
|
-
readRanges: new
|
|
4661
|
+
readRanges: { indexes: new Set(), sortedRanges: [], pendingRanges: [] }
|
|
4523
4662
|
});
|
|
4524
4663
|
}
|
|
4525
4664
|
|
|
@@ -5164,7 +5303,6 @@
|
|
|
5164
5303
|
throw new Error(ERR_ENTRY_DATA_OUT_OF_BOUNDS);
|
|
5165
5304
|
}
|
|
5166
5305
|
const size = compressedSize;
|
|
5167
|
-
const readable = toCompatibleReadable(reader.createReadable({ offset: dataOffset, size }));
|
|
5168
5306
|
const signal = checkSignalOption(getOptionValue$1(zipEntry, options, OPTION_SIGNAL));
|
|
5169
5307
|
throwIfAborted(signal);
|
|
5170
5308
|
let checkOverlappingEntry = getOptionValue$1(zipEntry, options, OPTION_CHECK_OVERLAPPING_ENTRY);
|
|
@@ -5238,6 +5376,7 @@
|
|
|
5238
5376
|
writer = new GenericWriter(writer);
|
|
5239
5377
|
await initStream(writer, getDecodableOutputSize(outputSize, compressedSize, compressed));
|
|
5240
5378
|
({ writable } = writer);
|
|
5379
|
+
const readable = toCompatibleReadable(reader.createReadable({ offset: dataOffset, size }));
|
|
5241
5380
|
const { outputSize: writtenSize } = await runWorker({ readable, writable }, workerOptions);
|
|
5242
5381
|
if (writtenSize != outputSize) {
|
|
5243
5382
|
throw Object.assign(new Error(ERR_INVALID_UNCOMPRESSED_SIZE), { outputSize: writtenSize });
|
|
@@ -5673,14 +5812,61 @@
|
|
|
5673
5812
|
end: dataOffset + compressedSize + dataDescriptorLength,
|
|
5674
5813
|
fileEntry
|
|
5675
5814
|
};
|
|
5676
|
-
|
|
5677
|
-
|
|
5815
|
+
const { indexes, sortedRanges, pendingRanges } = readRanges;
|
|
5816
|
+
if (!indexes.has(index)) {
|
|
5817
|
+
const overlappingRange = findOverlappingRange(sortedRanges, range) || pendingRanges.find(otherRange => rangesOverlap(range, otherRange));
|
|
5818
|
+
if (overlappingRange) {
|
|
5678
5819
|
const error = new Error(ERR_OVERLAPPING_ENTRY);
|
|
5679
|
-
error.overlappingEntry =
|
|
5820
|
+
error.overlappingEntry = overlappingRange.fileEntry;
|
|
5680
5821
|
throw error;
|
|
5681
5822
|
}
|
|
5823
|
+
indexes.add(index);
|
|
5824
|
+
pendingRanges.push(range);
|
|
5825
|
+
if (pendingRanges.length * pendingRanges.length > sortedRanges.length) {
|
|
5826
|
+
pendingRanges.sort((range, otherRange) => range.start - otherRange.start);
|
|
5827
|
+
readRanges.sortedRanges = mergeRanges(sortedRanges, pendingRanges);
|
|
5828
|
+
pendingRanges.length = 0;
|
|
5829
|
+
}
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
|
|
5833
|
+
function findOverlappingRange(sortedRanges, range) {
|
|
5834
|
+
let low = 0;
|
|
5835
|
+
let high = sortedRanges.length;
|
|
5836
|
+
while (low < high) {
|
|
5837
|
+
const middle = (low + high) >>> 1;
|
|
5838
|
+
if (sortedRanges[middle].start < range.start) {
|
|
5839
|
+
low = middle + 1;
|
|
5840
|
+
} else {
|
|
5841
|
+
high = middle;
|
|
5842
|
+
}
|
|
5843
|
+
}
|
|
5844
|
+
const previousRange = sortedRanges[low - 1];
|
|
5845
|
+
const nextRange = sortedRanges[low];
|
|
5846
|
+
if (previousRange && rangesOverlap(range, previousRange)) {
|
|
5847
|
+
return previousRange;
|
|
5848
|
+
}
|
|
5849
|
+
if (nextRange && rangesOverlap(range, nextRange)) {
|
|
5850
|
+
return nextRange;
|
|
5851
|
+
}
|
|
5852
|
+
}
|
|
5853
|
+
|
|
5854
|
+
function rangesOverlap(range, otherRange) {
|
|
5855
|
+
return range.start < otherRange.end && otherRange.start < range.end;
|
|
5856
|
+
}
|
|
5857
|
+
|
|
5858
|
+
function mergeRanges(sortedRanges, pendingRanges) {
|
|
5859
|
+
const mergedRanges = [];
|
|
5860
|
+
let indexSorted = 0;
|
|
5861
|
+
let indexPending = 0;
|
|
5862
|
+
while (indexSorted < sortedRanges.length || indexPending < pendingRanges.length) {
|
|
5863
|
+
if (indexPending == pendingRanges.length || (indexSorted < sortedRanges.length && sortedRanges[indexSorted].start < pendingRanges[indexPending].start)) {
|
|
5864
|
+
mergedRanges.push(sortedRanges[indexSorted++]);
|
|
5865
|
+
} else {
|
|
5866
|
+
mergedRanges.push(pendingRanges[indexPending++]);
|
|
5867
|
+
}
|
|
5682
5868
|
}
|
|
5683
|
-
|
|
5869
|
+
return mergedRanges;
|
|
5684
5870
|
}
|
|
5685
5871
|
|
|
5686
5872
|
function readDataDescriptor(dataDescriptorView, offset, extraFieldZip64) {
|
|
@@ -8513,7 +8699,7 @@
|
|
|
8513
8699
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8514
8700
|
*/
|
|
8515
8701
|
|
|
8516
|
-
const VERSION = "2.14.
|
|
8702
|
+
const VERSION = "2.14.1";
|
|
8517
8703
|
|
|
8518
8704
|
/*
|
|
8519
8705
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|