1 HashFS Clean Room Spezifikation
Batista82 edited this page 2026-07-30 18:22:36 +02:00

HashFS-Clean-Room-Spezifikation

Ziel

HashFS-Archive sollen read-only verarbeitet werden, ohne fremden Quellcode oder undokumentierte Implementierungen zu übernehmen.

Aktueller Implementierungsstand

  • HashFS wird als eigener Archivtyp erkannt, wenn ein .scs-Archiv nicht als ZIP geöffnet werden kann.
  • Die native HashFS-Leselogik ist noch nicht implementiert.
  • Die Anwendung liefert dafür eine klare Diagnose mit dem Code HASHFS_NATIVE_READER_NOT_IMPLEMENTED.
  • Optional kann später ein vom Benutzer selbst bereitgestellter offizieller SCS-Extractor über einen Adapter angebunden werden.

Clean-Room-Regeln

  • Keine Übernahme fremder HashFS-Parser.
  • Keine Übersetzung fremder Implementierungen in C#.
  • Keine extrahierten SCS-Dateien im Repository.
  • Keine Testfixtures aus ETS2, ATS oder Mods.
  • Tests verwenden ausschließlich synthetische Binärdaten und künstliche .scs-Dateien.

Native Leser-Anforderungen

Ein späterer nativer HashFS-Leser muss mindestens folgende Prüfungen durchführen:

  • Magic/Signatur prüfen.
  • Headerlängen gegen Dateigröße validieren.
  • Offsets und Längen gegen Dateigrenzen validieren.
  • Eintragsanzahl begrenzen.
  • Einzelne Eintragsgröße begrenzen.
  • Unkomprimierte Gesamtsumme begrenzen.
  • Unbekannte Kompressions- oder Verschlüsselungskennzeichen diagnostizieren.
  • Virtuelle Pfade ausschließlich normalisiert bereitstellen.
  • Path Traversal und absolute Pfade ablehnen.
  • Hashkollisionen und doppelte virtuelle Pfade diagnostizieren.
  • Beschädigte Einträge isolieren, ohne den gesamten Export unnötig abzubrechen.

Adapter für offiziellen Extractor

Der Adapter darf nur ein lokal vom Benutzer konfiguriertes Werkzeug starten. Das Werkzeug wird nicht mitgeliefert.

Die Adapterkonfiguration besteht aus:

  • Pfad zur ausführbaren Datei.
  • Argumentvorlage für Dateiliste.
  • Argumentvorlage für Extraktion einer einzelnen Datei.
  • Zeitlimit.

Unterstützte Platzhalter:

  • {archivePath}
  • {virtualPath}
  • {outputPath}

Die Listenausgabe wird zeilenweise gelesen und als virtuelle Pfade normalisiert.

Offene Spezifikationsfragen

  • Endgültige Headerstruktur.
  • Eintragsindex und Hashalgorithmus.
  • Kompressionsarten.
  • Integritätsfelder.
  • Versionsfelder und Kompatibilitätsgrenzen.

Diese Punkte werden erst nach eigener Forschung und synthetischen Tests als implementiert markiert.