| Typ | Beschreibung |
|---|---|
TAsnTag | Universelle Tag-Konstanten (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, Zeit- und String-Formen) für Aufbau und Validierung von Kennzeichnungen |
TAsnClass | Kennzeichnungsklasse: asnClassUniversal, asnClassApplication, asnClassContextSpecific oder asnClassPrivate |
TAsnIdentifier | Kennzeichnungsklasse, Constructed-Flag und 64-Bit-Tag-Nummer, einschließlich der High-Tag-Number-Form |
TDerTlv | Geparste TLV mit Offset, HeaderLength, ContentOffset, ContentLength, NextOffset und Identifier, ohne den Quellpuffer zu kopieren |
TDerWriter | Wiederverwendbarer DER-Ausgabepuffer und typisierter Encoder |
TDerReader | Begrenzter Reader mit Peek-, Advance-, Skip-, Erwartungs-Tag-, Kindfenster-, Slice- und typisierten Dekodier-Operationen |
TDerByteArrays | Dynamisches Array aus TBytes, verwendet von ConcatMany und anderen Mehrfachpuffer-Helfern |
TDerValidationErrorKind | Validierungsfehler-Kategorien: dvekMalformedTlv, dvekTrailingData, Tiefen-, Knoten- und Inhaltsbegrenzungen (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, typspezifische kanonische Fehler (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) und dvekSetOrder |
TDerValidationError | Offset- und Depth-bewusster Fehler-Record mit Kind und menschenlesbarem Meldungstext |
TDerValidationErrors | Dynamisches Array aus TDerValidationError, zurückgegeben innerhalb von TDerValidationResult |
TDerValidationOptions | Begrenzungen in MaxDepth, MaxNodes, MaxContentLength, MaxErrors, das RequireSingleRoot-Flag, optionales ValidateSetOrder und die Default-Klassenfunktion |
TDerValidationResult | Validierungsstatus mit IsValid, NodeCount, MaximumDepth, offset-bewussten Errors sowie ErrorCount und FirstError-Helfern |
| API | Beschreibung |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Setzt gepufferte Daten zurück oder inspiziert sie, kopiert einen Schnappschuss oder übergibt das fertige Array und setzt den Writer zurück |
Reserve, Append, AppendMany, AppendByte | Wächst einmalig an und hängt Arrays, vom Aufrufer bereitgestellte Puffer, mehrere Arrays oder ein einzelnes Byte mit Überlaufprüfungen an |
Wrap, WrapIdentifier, WrapConstructed | Verpackt Inhalte mit einem rohen Kennzeichnungs-Oktett, einer beliebigen Kennzeichnungsklasse und 64-Bit-Tag-Nummer oder einer constructed-Kennzeichnung |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Kodiert niedrige oder hohe Tag-Nummern, ohne die Kennzeichnung abzuschneiden |
Sequence, SequenceOf, SetOf, SetOfSorted | Komponiert kodierte Werte als SEQUENCE- oder SET-Container; SetOfSorted sortiert Werte nach ihren kodierten Bytes |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Kodiert BOOLEAN, vorzeichenbehaftete oder vorzeichenlose INTEGER, validierten willkürlichen INTEGER-Inhalt und ENUMERATED-Werte |
OctetString, OctetStringOf, BitString, Null, OID | Kodiert Binär-, Bitstring-, NULL- und Objektbezeichner-Werte als eigenständige TLVs |
PrintableString, Ia5String, Utf8String | Kodiert die unterstützten ASN.1-Zeichenketten-Formen |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Kodiert kanonischen Zeittext oder UTC-TDateTime-Werte, wobei TimeOf den richtigen DER-Zeittyp auswählt |
AlgId, AlgIdWithParams | Baut eine AlgorithmIdentifier-SEQUENCE mit NULL oder expliziten Parametern |
| API | Beschreibung |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Initialisiert einen Reader und inspiziert sein begrenztes Fenster und die verbleibende Byteanzahl |
TryReadTlvAt, PeekTlv | Parst niedrige oder hohe Tag-Nummern und minimale definite Längen, ohne Position zu verändern |
ReadNextTlv, SkipTlv | Schreitet nur voran, nachdem eine vollständige gültige TLV verfügbar ist |
TryReadExpected | Schreitet nur voran, wenn Klasse, constructed-Form und Tag-Nummer alle übereinstimmen |
EnterConstructed | Erstellt ein untergeordnetes Reader-Fenster über dasselbe Quell-Array, ohne Inhalte zu kopieren |
ContentBytes, EncodedBytes | Kopiert einen validierten Inhalts- oder vollständigen TLV-Ausschnitt, wenn Eigentümerschaft benötigt wird |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Dekodiert kanonische primitive Werte mit Bereichs- und Unused-Bit-Prüfungen |
TryReadString, TryReadTime, TryReadNull | Dekodiert validierte UTF8String-, PrintableString-, IA5String-, DER-Zeit- oder NULL-Inhalte |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Bieten Kompatibilitätszugriff auf rohe TLV-Offsets sowie Objektbezeichner- und vorzeichenbehaftete Integer-Dekodierung |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer prüft Kennzeichnungs- und Längenminimalität, Puffergrenzen, universelle primitive Formen, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, unterstützte Zeichenketten und kanonische Zeitwerte
Die Standardbegrenzungen erlauben eine maximale Tiefe von 64, 100000 Knoten, 64 MiB pro Inhaltsstück und 32 gemeldete Fehler und verlangen genau eine Wurzel-TLV
ValidateSetOrder ist standardmäßig deaktiviert, weil schema-freies DER nicht jedes SET von SET OF unterscheiden kann; aktivieren Sie es für bekannte SET-OF-Container wie CMS-Attribut-Sammlungen
TDerValidationOptions.Default liefert die begrenzten Standardwerte, während TDerValidationResult.ErrorCount und FirstError die Diagnosebehandlung vereinfachen
function AsnIdentifier(TagClass: TAsnClass; TagNumber: UInt64; Constructed: Boolean = False): TAsnIdentifier;
function EncodeIdentifier(const Identifier: TAsnIdentifier): TBytes;
function ConcatBytes(const A, B: TBytes): TBytes;
function Concat3(const A, B, C: TBytes): TBytes;
function Concat4(const A, B, C, D: TBytes): TBytes;
function ConcatMany(const Values: TDerByteArrays): TBytes;
function EncodeOIDContent(const Dotted: AnsiString): TBytes;
function DerValidationErrorKindName(Kind: TDerValidationErrorKind): string;
| Funktion | Beschreibung |
|---|---|
AsnIdentifier | Baut eine TAsnIdentifier aus Klasse, Tag-Nummer und Constructed-Flag und steuert damit TDerReader.TryReadExpected |
EncodeIdentifier | Kodiert eine TAsnIdentifier in ihre DER-Kennzeichnungs-Bytes, einschließlich der High-Tag-Number-Form |
ConcatBytes, Concat3, Concat4, ConcatMany | Verkettet zwei, drei, vier oder ein dynamisches Array von TBytes in einer einzigen Allokation; wird vielfach vom CMS-Builder verwendet |
EncodeOIDContent | Kodiert einen OID-String in gepunkteter Dezimalform in seine Inhalts-Bytes ohne Tag und Länge, sodass Aufrufer eine OID inspizieren oder neu verpacken können |
DerValidationErrorKindName | Gibt den Anzeigenamen einer TDerValidationErrorKind für Diagnosen zurück |
uses FPdfAsn1;
var
Child: TDerReader;
Data: TBytes;
Reader: TDerReader;
Tlv: TDerTlv;
Validation: TDerValidationResult;
Writer: TDerWriter;
begin
Writer := TDerWriter.Create;
try
Data := Writer.Sequence(Writer.UnsignedIntegerOf(42));
finally
Writer.Free;
end;
Validation := ValidateDer(Data);
if not Validation.IsValid then
raise EConvertError.Create(Validation.Errors[0].MessageText);
Reader.Initialize(Data);
if Reader.TryReadExpected(AsnIdentifier(asnClassUniversal, 16, True), Tlv) then
Reader.EnterConstructed(Tlv, Child);
end;
GeneralizedTime akzeptiert optionale Sekundenbruchteile nur, wenn die letzte Bruchziffer nicht null istReadTlv, TryReadOID und das vorzeichenbehaftete TryReadInteger bleiben für bestehende Aufrufer verfügbarFPdfAsn1 zusammen mit den Haupt-Units von PDFium Delphi Component