Skip to content

Commit aec1ce0

Browse files
docs(public-api): DIN-orientierte Public-API-Dokumentation vereinheitlichen (#81)
* docs(public-api): DIN-orientierte XML-Dokumentation und Stil vereinheitlichen * chore(ci): preflight nach PR-body-update neu auslösen * chore(ci): whitespace-format für preflight korrigieren * chore(style): reviewer-fixes und lesbarkeitsanpassungen * docs(filetypedetector): dokumentation und signatur-layout nachziehen --------- Co-authored-by: GitHub Copilot Agent <github-actions[bot]@users.noreply.github.com>
1 parent 52c9dbe commit aec1ce0

16 files changed

Lines changed: 1237 additions & 324 deletions

src/FileTypeDetection/Abstractions/Archive/ZipExtractedEntry.vb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,26 @@ Imports System.IO
66

77
Namespace Global.Tomtastisch.FileClassifier
88
''' <summary>
9-
''' Unveraenderliches In-Memory-Ergebnis einer sicheren ZIP-Extraktion.
9+
''' Unveränderliches In-Memory-Modell eines sicher extrahierten Archiveintrags.
1010
''' </summary>
11+
''' <remarks>
12+
''' Das Modell kapselt den normalisierten relativen Pfad und den unveränderlichen Byteinhalt eines Eintrags.
13+
''' Es ist für externe Konsumenten als read-only Datenträger vorgesehen.
14+
''' </remarks>
1115
Public NotInheritable Class ZipExtractedEntry
16+
''' <summary>
17+
''' Normalisierter relativer Eintragspfad innerhalb des Archivs.
18+
''' </summary>
1219
Public ReadOnly Property RelativePath As String
20+
21+
''' <summary>
22+
''' Unveränderlicher Byteinhalt des Eintrags.
23+
''' </summary>
1324
Public ReadOnly Property Content As ImmutableArray(Of Byte)
25+
26+
''' <summary>
27+
''' Größe des Eintragsinhalts in Bytes.
28+
''' </summary>
1429
Public ReadOnly Property Size As Integer
1530

1631
Friend Sub New(entryPath As String, payload As Byte())
@@ -24,6 +39,13 @@ Namespace Global.Tomtastisch.FileClassifier
2439
End If
2540
End Sub
2641

42+
''' <summary>
43+
''' Öffnet einen schreibgeschützten Speicherstream auf den Entry-Inhalt.
44+
''' </summary>
45+
''' <remarks>
46+
''' Der zurückgegebene Stream basiert auf einer isolierten Bytekopie und kann vom Aufrufer sicher gelesen werden.
47+
''' </remarks>
48+
''' <returns>Schreibgeschützter <see cref="MemoryStream"/> mit dem Entry-Inhalt.</returns>
2749
Public Function OpenReadOnlyStream() As MemoryStream
2850
Dim data = If(Content.IsDefaultOrEmpty, Array.Empty(Of Byte)(), Content.ToArray())
2951
Return New MemoryStream(data, writable:=False)

src/FileTypeDetection/Abstractions/Detection/DetectionDetail.vb

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,36 @@ Option Explicit On
33

44
Namespace Global.Tomtastisch.FileClassifier
55
''' <summary>
6-
''' Detailliertes, auditierbares Ergebnis einer Detektion.
6+
''' Detailliertes, auditierbares Ergebnis einer Detektionsentscheidung.
77
''' </summary>
8+
''' <remarks>
9+
''' Das Objekt transportiert den erkannten Typ sowie Trace-Merkmale, die für Compliance-, Diagnose- und
10+
''' Policy-Auswertungen vorgesehen sind.
11+
''' </remarks>
812
Public NotInheritable Class DetectionDetail
13+
''' <summary>
14+
''' Finaler, nach allen Policies ermittelter Dateityp.
15+
''' </summary>
916
Public ReadOnly Property DetectedType As FileType
17+
18+
''' <summary>
19+
''' Deterministischer Grundcode für den eingeschlagenen Entscheidungs- oder Fehlerpfad.
20+
''' </summary>
1021
Public ReadOnly Property ReasonCode As String
22+
23+
''' <summary>
24+
''' Kennzeichnet, ob eine inhaltsbasierte Archivprüfung durchgeführt wurde.
25+
''' </summary>
1126
Public ReadOnly Property UsedZipContentCheck As Boolean
27+
28+
''' <summary>
29+
''' Kennzeichnet, ob ein strukturiertes Archiv-Refinement (z. B. OOXML) durchgeführt wurde.
30+
''' </summary>
1231
Public ReadOnly Property UsedStructuredRefinement As Boolean
32+
33+
''' <summary>
34+
''' Kennzeichnet, ob die Endungs-Policy aktiv geprüft und bestätigt wurde.
35+
''' </summary>
1336
Public ReadOnly Property ExtensionVerified As Boolean
1437

1538
Friend Sub New(

src/FileTypeDetection/Abstractions/Detection/FileKind.vb

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,61 @@ Option Infer On
44

55
Namespace Global.Tomtastisch.FileClassifier
66
''' <summary>
7-
''' Kanonische, in der Bibliothek unterstuetzte Dateitypen.
8-
''' Fachlicher Kontext:
9-
''' - DOCX/XLSX/PPTX sind fachlich ZIP-Container und werden erst nach ZIP-Gate verfeinert.
10-
''' - Archiv-Aliase wie tar/tgz/gz/bz2/xz/7z/rar/zz werden auf Kind Zip normalisiert.
7+
''' Kanonische, in der Bibliothek unterstützte Dateitypen.
118
''' </summary>
9+
''' <remarks>
10+
''' DOCX/XLSX/PPTX sind fachlich ZIP-Container und werden nach Archiv-Gate über strukturiertes Refinement
11+
''' verfeinert. Archiv-Aliase werden intern auf <see cref="Zip"/> normalisiert.
12+
''' </remarks>
1213
Public Enum FileKind
14+
''' <summary>
15+
''' Unbekannter oder nicht sicher klassifizierbarer Typ (fail-closed).
16+
''' </summary>
1317
Unknown = 0
1418

19+
''' <summary>
20+
''' PDF-Dokument.
21+
''' </summary>
1522
Pdf
23+
24+
''' <summary>
25+
''' PNG-Bilddatei.
26+
''' </summary>
1627
Png
28+
29+
''' <summary>
30+
''' JPEG-Bilddatei.
31+
''' </summary>
1732
Jpeg
33+
34+
''' <summary>
35+
''' GIF-Bilddatei.
36+
''' </summary>
1837
Gif
38+
39+
''' <summary>
40+
''' WebP-Bilddatei.
41+
''' </summary>
1942
Webp
43+
44+
''' <summary>
45+
''' ZIP-Container oder auf ZIP normalisierte Archivfamilie.
46+
''' </summary>
2047
Zip
2148

49+
''' <summary>
50+
''' Office Open XML Word-Dokument (DOCX).
51+
''' </summary>
2252
Docx
53+
54+
''' <summary>
55+
''' Office Open XML Excel-Dokument (XLSX).
56+
''' </summary>
2357
Xlsx
58+
59+
''' <summary>
60+
''' Office Open XML PowerPoint-Dokument (PPTX).
61+
''' </summary>
2462
Pptx
2563
End Enum
2664
End Namespace

src/FileTypeDetection/Abstractions/Detection/FileType.vb

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,18 @@ Imports System.Collections.Immutable
55

66
Namespace Global.Tomtastisch.FileClassifier
77
''' <summary>
8-
''' Unveränderliches Wertobjekt für einen Dateityp.
9-
''' SSOT-Regel:
10-
''' - Instanzen werden zentral in FileTypeRegistry aufgebaut.
11-
''' - Aufrufer sollen keine ad-hoc FileType-Objekte erstellen.
8+
''' Unveränderliches Wertobjekt, das einen aufgelösten Dateityp einschließlich Metadaten beschreibt.
129
''' </summary>
10+
''' <remarks>
11+
''' <para>
12+
''' SSOT-Regel: Instanzen werden zentral über <c>FileTypeRegistry</c> aufgebaut.
13+
''' </para>
14+
''' <para>
15+
''' Konsumenten erhalten ein stabiles, read-only API-Modell mit kanonischer Endung, MIME und Aliasmenge.
16+
''' </para>
17+
''' </remarks>
1318
Public NotInheritable Class FileType
14-
''' <summary>Enum-Schluessel des Typs.</summary>
19+
''' <summary>Enum-Schlüssel des Typs.</summary>
1520
Public ReadOnly Property Kind As FileKind
1621

1722
''' <summary>Kanonische Endung inklusive Punkt, bei Unknown leer.</summary>
@@ -26,7 +31,7 @@ Namespace Global.Tomtastisch.FileClassifier
2631
Public ReadOnly Property Allowed As Boolean
2732

2833
''' <summary>
29-
''' Normalisierte Alias-Liste (ohne fuehrenden Punkt, dedupliziert).
34+
''' Normalisierte Alias-Liste (ohne führenden Punkt, dedupliziert).
3035
''' </summary>
3136
Public ReadOnly Property Aliases As ImmutableArray(Of String)
3237

@@ -54,6 +59,10 @@ Namespace Global.Tomtastisch.FileClassifier
5459
End If
5560
End Sub
5661

62+
''' <summary>
63+
''' Liefert die textuelle Repräsentation des Dateityps auf Basis des Enum-Schlüssels.
64+
''' </summary>
65+
''' <returns>String-Repräsentation des Feldes <see cref="Kind"/>.</returns>
5766
Public Overrides Function ToString() As String
5867
Return Kind.ToString()
5968
End Function

src/FileTypeDetection/Abstractions/Hashing/HashDigestSet.vb

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,50 @@ Option Explicit On
33

44
Namespace Global.Tomtastisch.FileClassifier
55
''' <summary>
6-
''' Deterministische Hash-Sammlung fuer einen Verarbeitungsschritt.
6+
''' Deterministische Digest-Sammlung für einen Verarbeitungsschritt.
77
''' </summary>
8+
''' <remarks>
9+
''' Enthält logische und physische Hashwerte (inklusive optionaler Fast- und HMAC-Digests) in normalisierter Form.
10+
''' </remarks>
811
Public NotInheritable Class HashDigestSet
12+
''' <summary>
13+
''' Physischer SHA-256-Digest des Quellpayloads.
14+
''' </summary>
915
Public ReadOnly Property PhysicalSha256 As String
16+
17+
''' <summary>
18+
''' Logischer SHA-256-Digest der kanonischen Sicht.
19+
''' </summary>
1020
Public ReadOnly Property LogicalSha256 As String
21+
22+
''' <summary>
23+
''' Optionaler schneller physischer XxHash3-Digest.
24+
''' </summary>
1125
Public ReadOnly Property FastPhysicalXxHash3 As String
26+
27+
''' <summary>
28+
''' Optionaler schneller logischer XxHash3-Digest.
29+
''' </summary>
1230
Public ReadOnly Property FastLogicalXxHash3 As String
31+
32+
''' <summary>
33+
''' Optionaler HMAC-SHA256-Digest für den physischen Payload.
34+
''' </summary>
1335
Public ReadOnly Property HmacPhysicalSha256 As String
36+
37+
''' <summary>
38+
''' Optionaler HMAC-SHA256-Digest für den logischen Payload.
39+
''' </summary>
1440
Public ReadOnly Property HmacLogicalSha256 As String
41+
42+
''' <summary>
43+
''' Kennzeichnet, ob ein physischer Hashwert vorliegt.
44+
''' </summary>
1545
Public ReadOnly Property HasPhysicalHash As Boolean
46+
47+
''' <summary>
48+
''' Kennzeichnet, ob ein logischer Hashwert vorliegt.
49+
''' </summary>
1650
Public ReadOnly Property HasLogicalHash As Boolean
1751

1852
Friend Sub New(

src/FileTypeDetection/Abstractions/Hashing/HashEvidence.vb

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,61 @@ Option Explicit On
33

44
Namespace Global.Tomtastisch.FileClassifier
55
''' <summary>
6-
''' Nachweisobjekt fuer einen deterministischen Hash-Schritt.
6+
''' Nachweisobjekt für einen deterministischen Hash-Schritt.
77
''' </summary>
8+
''' <remarks>
9+
''' Das Objekt kapselt Herkunft, Typkontext, optionale Payloadkopien, Digest-Satz sowie ergänzende Notes in
10+
''' unveränderlicher Form für externe Auswertung.
11+
''' </remarks>
812
Public NotInheritable Class HashEvidence
13+
''' <summary>
14+
''' Herkunftskanal des Nachweises.
15+
''' </summary>
916
Public ReadOnly Property SourceType As HashSourceType
17+
18+
''' <summary>
19+
''' Fachliches Label der Eingabequelle.
20+
''' </summary>
1021
Public ReadOnly Property Label As String
22+
23+
''' <summary>
24+
''' Ermittelter Dateitypkontext für den Nachweis.
25+
''' </summary>
1126
Public ReadOnly Property DetectedType As FileType
27+
28+
''' <summary>
29+
''' Optionaler Beispiel-Entry bei archivbasierten Nachweisen.
30+
''' </summary>
1231
Public ReadOnly Property Entry As ZipExtractedEntry
32+
33+
''' <summary>
34+
''' Optional mitgeführte komprimierte Bytes.
35+
''' </summary>
1336
Public ReadOnly Property CompressedBytes As Global.System.Collections.Immutable.ImmutableArray(Of Byte)
37+
38+
''' <summary>
39+
''' Optional mitgeführte unkomprimierte bzw. logische Bytes.
40+
''' </summary>
1441
Public ReadOnly Property UncompressedBytes As Global.System.Collections.Immutable.ImmutableArray(Of Byte)
42+
43+
''' <summary>
44+
''' Anzahl berücksichtigter Entries im Nachweis.
45+
''' </summary>
1546
Public ReadOnly Property EntryCount As Integer
47+
48+
''' <summary>
49+
''' Gesamtgröße unkomprimierter Nutzdaten in Bytes.
50+
''' </summary>
1651
Public ReadOnly Property TotalUncompressedBytes As Long
52+
53+
''' <summary>
54+
''' Deterministischer Digest-Satz des Nachweises.
55+
''' </summary>
1756
Public ReadOnly Property Digests As HashDigestSet
57+
58+
''' <summary>
59+
''' Ergänzende Hinweise, z. B. zu Fehlern oder Sicherheitsaspekten.
60+
''' </summary>
1861
Public ReadOnly Property Notes As String
1962

2063
Friend Sub New(

src/FileTypeDetection/Abstractions/Hashing/HashOptions.vb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,32 @@ Option Explicit On
33

44
Namespace Global.Tomtastisch.FileClassifier
55
''' <summary>
6-
''' Steuerung fuer deterministic hashing APIs.
6+
''' Konfiguriert das Verhalten der öffentlichen deterministischen Hashing-APIs.
77
''' </summary>
8+
''' <remarks>
9+
''' Die Optionen steuern, welche Digest-Arten berechnet und welche Payloadkopien in Evidence-Objekten mitgeführt werden.
10+
''' Ungültige Dateinamen für Materialisierung werden intern auf einen sicheren Standardwert normalisiert.
11+
''' </remarks>
812
Public NotInheritable Class HashOptions
913
''' <summary>
10-
''' Wenn True, werden komprimierte und unkomprimierte Bytes in Evidence als Kopie mitgefuehrt.
14+
''' Wenn True, werden komprimierte und unkomprimierte Bytes in Evidence als Kopie mitgeführt.
1115
''' </summary>
1216
Public Property IncludePayloadCopies As Boolean = False
1317

1418
''' <summary>
15-
''' Wenn True, wird zusaetzlich ein schneller XxHash3-Digest berechnet.
19+
''' Wenn True, wird zusätzlich ein schneller XxHash3-Digest berechnet.
1620
''' </summary>
1721
Public Property IncludeFastHash As Boolean = True
1822

1923
''' <summary>
20-
''' Wenn True, wird zusaetzlich ein optionaler HMAC-SHA256 Digest berechnet (keyed).
24+
''' Wenn True, wird zusätzlich ein optionaler HMAC-SHA256 Digest berechnet (keyed).
2125
''' Der Key wird aus der Environment Variable 'FILECLASSIFIER_HMAC_KEY_B64' gelesen.
22-
''' Wenn der Key fehlt oder ungueltig ist, werden HMAC-Digests leer gelassen und Notes ergaenzt.
26+
''' Wenn der Key fehlt oder ungültig ist, werden HMAC-Digests leer gelassen und Notes ergänzt.
2327
''' </summary>
2428
Public Property IncludeSecureHash As Boolean = False
2529

2630
''' <summary>
27-
''' Dateiname fuer den Materialisierungs-Schritt im RoundTrip-Report.
31+
''' Dateiname für den Materialisierungs-Schritt im RoundTrip-Report.
2832
''' </summary>
2933
Public Property MaterializedFileName As String = "deterministic-roundtrip.bin"
3034

0 commit comments

Comments
 (0)