feat: parse kwm v2 key from mmkv

This commit is contained in:
鲁树人
2023-06-17 03:18:15 +01:00
parent 53039567ba
commit 99b679817b
2 changed files with 59 additions and 14 deletions

View File

@@ -1,3 +1,4 @@
import type { StagingKWMv2Key } from '~/features/settings/keyFormats';
import { formatHex } from './formatHex';
const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true });
@@ -85,6 +86,15 @@ export class MMKVParser {
return result;
}
public skipContainer() {
// Container [
// len: int,
// data: variant
// ]
const containerLen = this.readInt();
this.offset += containerLen;
}
public static toStringMap(view: DataView): Map<string, string> {
const mmkv = new MMKVParser(view);
const result = new Map<string, string>();
@@ -96,7 +106,21 @@ export class MMKVParser {
return result;
}
public static parseKuwoEKey(_view: DataView): unknown[] {
return [];
public static parseKuwoEKey(view: DataView) {
const mmkv = new MMKVParser(view);
const result: Omit<StagingKWMv2Key, 'id'>[] = [];
while (!mmkv.eof) {
const key = mmkv.readString();
const idMatch = key.match(/^sec_ekey#(\d+)-(.+)/);
if (!idMatch) {
mmkv.skipContainer();
continue;
}
const [_, rid, quality] = idMatch;
const ekey = mmkv.readVariantString();
result.push({ rid, quality, ekey });
}
return result;
}
}