@rhyster/wow-casc-dbc 2.5.0 → 2.5.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/dist/index.cjs +15 -8
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +15 -8
- package/package.json +6 -6
package/dist/index.cjs
CHANGED
|
@@ -485,19 +485,22 @@ class BLTEReader {
|
|
|
485
485
|
offset += ivLength;
|
|
486
486
|
const encryptType = buffer.readUInt8(offset);
|
|
487
487
|
offset += 1;
|
|
488
|
-
assert__default(encryptType === ENC_TYPE_SALSA20, `[BLTE]: Invalid encrypt type: ${encryptType.toString(16).padStart(2, "0")}`);
|
|
488
|
+
assert__default(encryptType === ENC_TYPE_SALSA20, `[BLTE]: Invalid encrypt type: ${encryptType.toString(16).padStart(2, "0")} at block ${index.toString()}`);
|
|
489
489
|
const keyName = [...keyNameBE.matchAll(/.{2}/g)].map((v) => v[0]).reverse().join("").toLowerCase();
|
|
490
490
|
const key = this.keys.get(keyName);
|
|
491
491
|
if (!key) {
|
|
492
492
|
if (allowMissingKey) {
|
|
493
493
|
return keyName;
|
|
494
494
|
}
|
|
495
|
-
throw new Error(`[BLTE]: Missing key: ${keyName}`);
|
|
495
|
+
throw new Error(`[BLTE]: Missing key: ${keyName} at block ${index.toString()}`);
|
|
496
496
|
}
|
|
497
497
|
const iv = new Uint8Array(8);
|
|
498
498
|
for (let i = 0; i < 8; i += 1) {
|
|
499
|
-
|
|
500
|
-
|
|
499
|
+
if (i < ivLength) {
|
|
500
|
+
iv[i] = ivBuffer.readUInt8(i) ^ index >>> 8 * i & 255;
|
|
501
|
+
} else {
|
|
502
|
+
iv[i] = 0;
|
|
503
|
+
}
|
|
501
504
|
}
|
|
502
505
|
const handler = new Salsa20(key, iv);
|
|
503
506
|
const decrypted = handler.process(buffer.subarray(offset));
|
|
@@ -507,13 +510,13 @@ class BLTEReader {
|
|
|
507
510
|
return this.processBlock(Buffer.from(decrypted.buffer), index, false);
|
|
508
511
|
}
|
|
509
512
|
case 70:
|
|
510
|
-
throw new Error(
|
|
513
|
+
throw new Error(`[BLTE]: Frame (Recursive) block not supported at block ${index.toString()}`);
|
|
511
514
|
case 78:
|
|
512
515
|
return buffer.subarray(1);
|
|
513
516
|
case 90:
|
|
514
517
|
return zlib__default.inflateSync(buffer.subarray(1));
|
|
515
518
|
default:
|
|
516
|
-
throw new Error(`[BLTE]: Invalid block flag: ${flag.toString(16).padStart(2, "0")}`);
|
|
519
|
+
throw new Error(`[BLTE]: Invalid block flag: ${flag.toString(16).padStart(2, "0")} at block ${index.toString()}`);
|
|
517
520
|
}
|
|
518
521
|
}
|
|
519
522
|
processBytes(allowMissingKey = false, size = Infinity) {
|
|
@@ -1674,9 +1677,12 @@ class CASCClient {
|
|
|
1674
1677
|
const reader = new BLTEReader(blte, eKey, this.keys);
|
|
1675
1678
|
if (!allowMissingKey) {
|
|
1676
1679
|
reader.processBytes(allowMissingKey);
|
|
1680
|
+
const hash = crypto__default.createHash("md5").update(reader.buffer).digest("hex");
|
|
1681
|
+
assert__default(hash === cKey, `Invalid hash: expected ${cKey}, got ${hash}`);
|
|
1677
1682
|
return {
|
|
1678
1683
|
type: "full",
|
|
1679
|
-
buffer: reader.buffer
|
|
1684
|
+
buffer: reader.buffer,
|
|
1685
|
+
blocks: void 0
|
|
1680
1686
|
};
|
|
1681
1687
|
}
|
|
1682
1688
|
const blocks = reader.processBytes(allowMissingKey);
|
|
@@ -1685,7 +1691,8 @@ class CASCClient {
|
|
|
1685
1691
|
assert__default(hash === cKey, `Invalid hash: expected ${cKey}, got ${hash}`);
|
|
1686
1692
|
return {
|
|
1687
1693
|
type: "full",
|
|
1688
|
-
buffer: reader.buffer
|
|
1694
|
+
buffer: reader.buffer,
|
|
1695
|
+
blocks: void 0
|
|
1689
1696
|
};
|
|
1690
1697
|
}
|
|
1691
1698
|
return {
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -473,19 +473,22 @@ class BLTEReader {
|
|
|
473
473
|
offset += ivLength;
|
|
474
474
|
const encryptType = buffer.readUInt8(offset);
|
|
475
475
|
offset += 1;
|
|
476
|
-
assert(encryptType === ENC_TYPE_SALSA20, `[BLTE]: Invalid encrypt type: ${encryptType.toString(16).padStart(2, "0")}`);
|
|
476
|
+
assert(encryptType === ENC_TYPE_SALSA20, `[BLTE]: Invalid encrypt type: ${encryptType.toString(16).padStart(2, "0")} at block ${index.toString()}`);
|
|
477
477
|
const keyName = [...keyNameBE.matchAll(/.{2}/g)].map((v) => v[0]).reverse().join("").toLowerCase();
|
|
478
478
|
const key = this.keys.get(keyName);
|
|
479
479
|
if (!key) {
|
|
480
480
|
if (allowMissingKey) {
|
|
481
481
|
return keyName;
|
|
482
482
|
}
|
|
483
|
-
throw new Error(`[BLTE]: Missing key: ${keyName}`);
|
|
483
|
+
throw new Error(`[BLTE]: Missing key: ${keyName} at block ${index.toString()}`);
|
|
484
484
|
}
|
|
485
485
|
const iv = new Uint8Array(8);
|
|
486
486
|
for (let i = 0; i < 8; i += 1) {
|
|
487
|
-
|
|
488
|
-
|
|
487
|
+
if (i < ivLength) {
|
|
488
|
+
iv[i] = ivBuffer.readUInt8(i) ^ index >>> 8 * i & 255;
|
|
489
|
+
} else {
|
|
490
|
+
iv[i] = 0;
|
|
491
|
+
}
|
|
489
492
|
}
|
|
490
493
|
const handler = new Salsa20(key, iv);
|
|
491
494
|
const decrypted = handler.process(buffer.subarray(offset));
|
|
@@ -495,13 +498,13 @@ class BLTEReader {
|
|
|
495
498
|
return this.processBlock(Buffer.from(decrypted.buffer), index, false);
|
|
496
499
|
}
|
|
497
500
|
case 70:
|
|
498
|
-
throw new Error(
|
|
501
|
+
throw new Error(`[BLTE]: Frame (Recursive) block not supported at block ${index.toString()}`);
|
|
499
502
|
case 78:
|
|
500
503
|
return buffer.subarray(1);
|
|
501
504
|
case 90:
|
|
502
505
|
return zlib.inflateSync(buffer.subarray(1));
|
|
503
506
|
default:
|
|
504
|
-
throw new Error(`[BLTE]: Invalid block flag: ${flag.toString(16).padStart(2, "0")}`);
|
|
507
|
+
throw new Error(`[BLTE]: Invalid block flag: ${flag.toString(16).padStart(2, "0")} at block ${index.toString()}`);
|
|
505
508
|
}
|
|
506
509
|
}
|
|
507
510
|
processBytes(allowMissingKey = false, size = Infinity) {
|
|
@@ -1662,9 +1665,12 @@ class CASCClient {
|
|
|
1662
1665
|
const reader = new BLTEReader(blte, eKey, this.keys);
|
|
1663
1666
|
if (!allowMissingKey) {
|
|
1664
1667
|
reader.processBytes(allowMissingKey);
|
|
1668
|
+
const hash = crypto.createHash("md5").update(reader.buffer).digest("hex");
|
|
1669
|
+
assert(hash === cKey, `Invalid hash: expected ${cKey}, got ${hash}`);
|
|
1665
1670
|
return {
|
|
1666
1671
|
type: "full",
|
|
1667
|
-
buffer: reader.buffer
|
|
1672
|
+
buffer: reader.buffer,
|
|
1673
|
+
blocks: void 0
|
|
1668
1674
|
};
|
|
1669
1675
|
}
|
|
1670
1676
|
const blocks = reader.processBytes(allowMissingKey);
|
|
@@ -1673,7 +1679,8 @@ class CASCClient {
|
|
|
1673
1679
|
assert(hash === cKey, `Invalid hash: expected ${cKey}, got ${hash}`);
|
|
1674
1680
|
return {
|
|
1675
1681
|
type: "full",
|
|
1676
|
-
buffer: reader.buffer
|
|
1682
|
+
buffer: reader.buffer,
|
|
1683
|
+
blocks: void 0
|
|
1677
1684
|
};
|
|
1678
1685
|
}
|
|
1679
1686
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rhyster/wow-casc-dbc",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Fetch World of Warcraft data files from CASC and parse DBC/DB2 files.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -40,15 +40,15 @@
|
|
|
40
40
|
"@types/async": "^3.2.24",
|
|
41
41
|
"@types/cli-progress": "^3.11.5",
|
|
42
42
|
"@types/jest": "^29.5.12",
|
|
43
|
-
"@types/node": "^20.
|
|
44
|
-
"@typescript-eslint/eslint-plugin": "^7.
|
|
45
|
-
"@typescript-eslint/parser": "^7.
|
|
43
|
+
"@types/node": "^20.14.2",
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^7.12.0",
|
|
45
|
+
"@typescript-eslint/parser": "^7.12.0",
|
|
46
46
|
"eslint": "^8.57.0",
|
|
47
47
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
48
48
|
"eslint-config-airbnb-typescript": "^18.0.0",
|
|
49
49
|
"jest": "^29.7.0",
|
|
50
50
|
"ts-jest": "^29.1.4",
|
|
51
|
-
"tsx": "^4.11.
|
|
51
|
+
"tsx": "^4.11.2",
|
|
52
52
|
"typescript": "^5.4.5",
|
|
53
53
|
"unbuild": "^2.0.0"
|
|
54
54
|
},
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"async": "^3.2.5",
|
|
57
57
|
"cli-progress": "^3.12.0"
|
|
58
58
|
},
|
|
59
|
-
"packageManager": "pnpm@9.
|
|
59
|
+
"packageManager": "pnpm@9.2.0+sha512.98a80fd11c2e7096747762304106432b3ddc67dcf54b5a8c01c93f68a2cd5e05e6821849522a06fb76284d41a2660d5e334f2ee3bbf29183bf2e739b1dafa771"
|
|
60
60
|
}
|