proper diskmap hashing

This commit is contained in:
zefie
2025-08-10 20:10:10 -04:00
parent 23570f8a04
commit 511d78941c
2 changed files with 25 additions and 2 deletions

View File

@@ -234,7 +234,7 @@ if (request_headers['wtv-request-type'] == 'download') {
if (wtvshared.getFileExt(diskmap_data_file).toLowerCase() == "gz") { if (wtvshared.getFileExt(diskmap_data_file).toLowerCase() == "gz") {
var diskmap_data_filename = path.basename(diskmap_data_file); var diskmap_data_filename = path.basename(diskmap_data_file);
var gunzipped = zlib.gunzipSync(diskmap_file_data); var gunzipped = zlib.gunzipSync(diskmap_file_data);
diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(gunzipped)).toString(CryptoJS.enc.Hex).toLowerCase(); diskmap_group_data.files[k].checksum = CryptoJS.MD5(CryptoJS.lib.WordArray.create(diskmap_file_data)).toString(CryptoJS.enc.Hex).toLowerCase();
var gzip_fn_end = diskmap_file_data.indexOf("\0", 10); var gzip_fn_end = diskmap_file_data.indexOf("\0", 10);
if (!diskmap_group_data.files[k].dont_extract_filename) { if (!diskmap_group_data.files[k].dont_extract_filename) {
diskmap_group_data.files[k].original_filename = diskmap_group_data.files[k].file.replace(diskmap_group_data.base,"").replace(diskmap_data_filename, diskmap_file_data.toString('utf8', 10, gzip_fn_end)); diskmap_group_data.files[k].original_filename = diskmap_group_data.files[k].file.replace(diskmap_group_data.base,"").replace(diskmap_data_filename, diskmap_file_data.toString('utf8', 10, gzip_fn_end));

View File

@@ -346,7 +346,30 @@ class WTVSec {
* @notice This function is an alias for Encrypt, as WTVSec uses the same method for both encryption and decryption. * @notice This function is an alias for Encrypt, as WTVSec uses the same method for both encryption and decryption.
*/ */
Decrypt(keynum, data) { Decrypt(keynum, data) {
return this.Encrypt(keynum, data) // Decryption must use the paired RC4 session for the opposite direction
// Sessions:
// 0 = encrypt with key1, 1 = decrypt with key1
// 2 = encrypt with key2, 3 = decrypt with key2
let session_id;
if (keynum === 0) {
session_id = 1;
} else if (keynum === 1) {
session_id = 3;
} else {
throw new Error("Invalid key option (0 or 1 only)");
}
if (!this.RC4Session[session_id]) {
this.SecureOn(session_id);
}
if (data.words) {
data = this.wtvshared.wordArrayToBuffer(data);
} else if (data instanceof ArrayBuffer || typeof data === 'string') {
data = Buffer.from(data);
}
return this.RC4Session[session_id].updateFromBuffer(data);
} }
} }