import fs from "fs"; import {QmcDecoder} from "@/decrypt/qmc"; import {BytesEqual} from "@/decrypt/utils"; function loadTestDataDecoder(name: string): { cipherText: Uint8Array, clearText: Uint8Array } { const cipherBody = fs.readFileSync(`./testdata/${name}_raw.bin`); const cipherSuffix = fs.readFileSync(`./testdata/${name}_suffix.bin`); const cipherText = new Uint8Array(cipherBody.length + cipherSuffix.length); cipherText.set(cipherBody); cipherText.set(cipherSuffix, cipherBody.length); return { cipherText, clearText: fs.readFileSync(`testdata/${name}_target.bin`) } } test("qmc: real file", async () => { const cases = ["mflac0_rc4", "mflac_map", "mgg_map", "qmc0_static"] for (const name of cases) { const {clearText, cipherText} = loadTestDataDecoder(name) const c = new QmcDecoder(cipherText) const buf = c.decrypt() expect(BytesEqual(buf, clearText)).toBeTruthy() } })