Files
edentext/tests/unit/deobfuscate-odttf.test.ts
T

28 lines
1.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { deobfuscateOdttf } from '../../src/lib/fonts/embeddedFonts';
const GUID = '{01020304-0506-0708-090A-0B0C0D0E0F10}';
// The XOR key is the GUID's 16 bytes in reverse order.
const REVERSED_KEY = [0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01];
describe('deobfuscateOdttf', () => {
it('XORs the first 32 bytes with the reversed fontKey GUID', () => {
const data = new Uint8Array([...REVERSED_KEY, ...REVERSED_KEY, 0xaa, 0xbb]);
deobfuscateOdttf(data, GUID);
expect(Array.from(data.slice(0, 32))).toEqual(new Array(32).fill(0));
expect(Array.from(data.slice(32))).toEqual([0xaa, 0xbb]);
});
it('is symmetric (obfuscation and de-obfuscation are the same XOR)', () => {
const original = Uint8Array.from({ length: 40 }, (_, i) => (i * 7) & 0xff);
const roundTrip = deobfuscateOdttf(deobfuscateOdttf(original.slice(), GUID), GUID);
expect(Array.from(roundTrip)).toEqual(Array.from(original));
});
it('leaves data untouched when the key has fewer than 32 hex chars', () => {
const data = Uint8Array.from({ length: 32 }, (_, i) => i);
deobfuscateOdttf(data, 'not-a-guid');
expect(Array.from(data)).toEqual(Array.from({ length: 32 }, (_, i) => i));
});
});