mirror of
https://github.com/morluto/rea.git
synced 2026-11-13 18:22:42 +00:00
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { createHash } from "node:crypto";
|
|
|
|
import {
|
|
metadataSignature,
|
|
type SignatureDisplayTypeName,
|
|
type SignatureTypeName,
|
|
} from "../../src/dotnet/ManagedMemberInspectorCore.js";
|
|
import { buildManagedPeFixture } from "../../src/dotnet/ManagedPe.fixture.js";
|
|
import { readManagedMetadataLayout } from "../../src/dotnet/ManagedMetadataLayout.js";
|
|
import { readManagedPeLayout } from "../../src/dotnet/ManagedPeReader.js";
|
|
|
|
// Supply real metadata rows for the TypeDefOrRef coordinates used by the
|
|
// signature grammar and identity cases.
|
|
const bytes = buildManagedPeFixture({
|
|
typeSpecSignatures: [Buffer.from([0x08])],
|
|
typeReferences: Array.from({ length: 9 }, (_, index) => ({
|
|
namespace: "Fixture",
|
|
name: `Type${String(index + 2)}`,
|
|
})),
|
|
});
|
|
const pe = readManagedPeLayout(bytes);
|
|
if (pe.cli === null) throw new Error("Fixture has no CLI metadata");
|
|
const layout = readManagedMetadataLayout(
|
|
bytes,
|
|
pe.rvaToOffset(pe.cli.metadata.rva, pe.cli.metadata.size, "cli.metadata"),
|
|
pe.cli.metadata.size,
|
|
);
|
|
|
|
export const signature = (
|
|
blob: Buffer,
|
|
rawSha256?: string,
|
|
typeName: SignatureTypeName = () => null,
|
|
displayTypeName?: SignatureDisplayTypeName,
|
|
) =>
|
|
metadataSignature(blob, {
|
|
rawSha256: rawSha256 ?? createHash("sha256").update(blob).digest("hex"),
|
|
typeName,
|
|
displayTypeName,
|
|
layout,
|
|
issues: [],
|
|
scope: "fixture.signature",
|
|
blobOffset: 0,
|
|
});
|