Fix crc generation

pull/558/head
tobspr 4 years ago
parent 2203d5fc6a
commit c1b1564d76

@ -2,7 +2,7 @@
import { Application } from "../application";
/* typehints:end */
import { sha1, CRC_PREFIX } from "./sensitive_utils.encrypt";
import { sha1, CRC_PREFIX, computeCrc } from "./sensitive_utils.encrypt";
import { createLogger } from "./logging";
import { FILE_NOT_FOUND } from "../platform/storage";
import { accessNestedPropertyReverse } from "./utils";
@ -11,7 +11,6 @@ import { ExplainedResult } from "./explained_result";
import { decompressX64, compressX64 } from "./lzstring";
import { asyncCompressor, compressionPrefix } from "./async_compression";
import { compressObject, decompressObject } from "../savegame/savegame_compressor";
import crc32 from "crc/crc32";
const logger = createLogger("read_write_proxy");
@ -85,7 +84,7 @@ export class ReadWriteProxy {
*/
static serializeObject(obj) {
const jsonString = JSON.stringify(compressObject(obj));
const checksum = CRC_PREFIX + crc32(jsonString + salt).toString(16);
const checksum = computeCrc(jsonString + salt);
return compressionPrefix + compressX64(checksum + jsonString);
}
@ -109,7 +108,7 @@ export class ReadWriteProxy {
const jsonString = decompressed.substr(40);
const desiredChecksum = checksum.startsWith(CRC_PREFIX)
? CRC_PREFIX + crc32(jsonString + salt).toString(16)
? computeCrc(jsonString + salt)
: sha1(jsonString + salt);
if (desiredChecksum !== checksum) {
@ -191,12 +190,14 @@ export class ReadWriteProxy {
const jsonString = decompressed.substr(40);
const desiredChecksum = checksum.startsWith(CRC_PREFIX)
? CRC_PREFIX + crc32(jsonString + salt).toString(16)
? computeCrc(jsonString + salt)
: sha1(jsonString + salt);
if (desiredChecksum !== checksum) {
// Checksum mismatch
return Promise.reject("bad-content / checksum-mismatch");
return Promise.reject(
"bad-content / checksum-mismatch: " + desiredChecksum + " vs " + checksum
);
}
return jsonString;
} else {

@ -1,5 +1,5 @@
import { createHash } from "rusha";
import crc32 from "crc/crc32";
import { decompressX64 } from "./lzstring";
export function sha1(str) {
@ -13,3 +13,11 @@ export function getNameOfProvider() {
// Distinguish legacy crc prefixes
export const CRC_PREFIX = "crc32".padEnd(32, "-");
/**
* Computes the crc for a given string
* @param {string} str
*/
export function computeCrc(str) {
return CRC_PREFIX + crc32(str).toString(16).padStart(8, "0");
}

@ -1,8 +1,7 @@
import { compressX64 } from "../core/lzstring";
import { globalConfig } from "../core/config";
import { compressX64 } from "../core/lzstring";
import { computeCrc } from "../core/sensitive_utils.encrypt";
import { compressObject } from "../savegame/savegame_compressor";
import { CRC_PREFIX } from "../core/sensitive_utils.encrypt";
import crc32 from "crc/crc32";
function accessNestedPropertyReverse(obj, keys) {
let result = obj;
@ -31,7 +30,7 @@ function performJob(job, data) {
const optimized = compressObject(data.obj);
const stringified = JSON.stringify(optimized);
const checksum = CRC_PREFIX + crc32(stringified + salt).toString(16);
const checksum = computeCrc(stringified + salt);
return data.compressionPrefix + compressX64(checksum + stringified);
}
default:

Loading…
Cancel
Save