mirror of
https://git.unlock-music.dev/um/um-react.git
synced 2025-05-23 16:27:41 +08:00
Co-authored-by: 鲁树人 <lu.shuren@um-react.app> Co-committed-by: 鲁树人 <lu.shuren@um-react.app>
28 lines
794 B
TypeScript
28 lines
794 B
TypeScript
import { DecipherInstance, DecipherOK, DecipherResult, Status } from '~/decrypt-worker/Deciphers.ts';
|
|
import { chunkBuffer } from '~/decrypt-worker/util/buffer.ts';
|
|
import { Migu3D } from '@unlock-music/crypto';
|
|
|
|
export class Migu3DKeylessDecipher implements DecipherInstance {
|
|
cipherName = 'Migu3D (Keyless)';
|
|
|
|
async decrypt(buffer: Uint8Array): Promise<DecipherResult | DecipherOK> {
|
|
const mg3d = Migu3D.fromHeader(buffer.subarray(0, 0x100));
|
|
const audioBuffer = new Uint8Array(buffer);
|
|
|
|
for (const [block, i] of chunkBuffer(audioBuffer)) {
|
|
mg3d.decrypt(block, i);
|
|
}
|
|
mg3d.free();
|
|
|
|
return {
|
|
cipherName: this.cipherName,
|
|
status: Status.OK,
|
|
data: audioBuffer,
|
|
};
|
|
}
|
|
|
|
public static make() {
|
|
return new Migu3DKeylessDecipher();
|
|
}
|
|
}
|