Files
tyx_AI_xhs/scripts/verify-wp4-03-font-source.mjs

41 lines
2.1 KiB
JavaScript

import { createHash } from "node:crypto";
import { existsSync, readFileSync, writeFileSync } from "node:fs";
import { homedir } from "node:os";
import { resolve } from "node:path";
const assetRoot = process.env.DADA_TEXT_ASSET_ROOT ?? resolve(homedir(), "Desktop", "sticker_text");
const fontRoot = resolve(assetRoot, "字体", "面板全量采集", "font_panel_full_20260722", "resources", "font_packages", "FONT081_Lexend Deca");
const metadataPath = resolve(fontRoot, "metadata.json");
const packagePath = resolve(fontRoot, "font_package.ztf");
const fontPath = resolve(fontRoot, "font_files", "02034l0o6r57rxed4027b5689e0dxe7e142r0vi8920akeqto.ttf");
if (![metadataPath, packagePath, fontPath].every(existsSync)) throw new Error("FONT081 archived source is unavailable.");
const metadata = JSON.parse(readFileSync(metadataPath, "utf8"));
const packageBytes = readFileSync(packagePath);
const fontBytes = readFileSync(fontPath);
const hash = (bytes) => createHash("sha256").update(bytes).digest("hex").toUpperCase();
const signature = fontBytes.subarray(0, 4).toString("hex").toUpperCase();
const validSignature = ["00010000", "4F54544F", "74746366"].includes(signature);
const packageSha256 = hash(packageBytes);
const expectedPackageSha256 = String(metadata.local_sha256 ?? "").toUpperCase();
if (metadata.candidate_id !== "FONT081" || metadata.font_family !== "Lexend Deca"
|| metadata.resource_status !== "verified_extracted" || packageSha256 !== expectedPackageSha256 || !validSignature) {
throw new Error("FONT081 archived source verification failed.");
}
const result = {
extracted_font_bytes: fontBytes.length,
extracted_font_sha256: hash(fontBytes),
fallback: null,
font_family: metadata.font_family,
font_id: metadata.candidate_id,
package_sha256: packageSha256,
package_status: metadata.package_status,
resource_status: metadata.resource_status,
sfnt_signature: signature,
source_access: "read_only_normative_archive",
status: "passed",
};
if (process.env.DADA_FONT_SOURCE_EVIDENCE) writeFileSync(process.env.DADA_FONT_SOURCE_EVIDENCE, `${JSON.stringify(result, null, 2)}\n`);
console.log(JSON.stringify(result, null, 2));