| Type | Description |
|---|---|
TAsnTag | Universele tagconstanten (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, tijd- en stringvormen) die worden gebruikt bij identifierconstructie en -validatie |
TAsnClass | Identifierklasse: asnClassUniversal, asnClassApplication, asnClassContextSpecific of asnClassPrivate |
TAsnIdentifier | Identifierklasse, constructed-vlag en 64-bits tagnummer, inclusief de high-tag-number-vorm |
TDerTlv | Geparsede TLV met Offset, HeaderLength, ContentOffset, ContentLength, NextOffset en Identifier, zonder de bronbuffer te kopiëren |
TDerWriter | Herbruikbare DER-uitvoerbuffer en getypeerde encoder |
TDerReader | Begrensde lezer met peek-, advance-, skip-, expected-tag-, child-window-, slice- en getypeerde decodeerbewerkingen |
TDerByteArrays | Dynamische array van TBytes die door ConcatMany en andere multi-bufferhulpjes wordt gebruikt |
TDerValidationErrorKind | Categorieën voor validatiefouten: dvekMalformedTlv, dvekTrailingData, diepte-, knooppunt- en contentlimieten (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, per-type canonieke fouten (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) en dvekSetOrder |
TDerValidationError | Foutrecord met offset- en Depth-informatie, met Kind en mensleesbare berichttekst |
TDerValidationErrors | Dynamische array van TDerValidationError die binnen TDerValidationResult wordt teruggegeven |
TDerValidationOptions | Limieten in MaxDepth, MaxNodes, MaxContentLength, MaxErrors, de vlag RequireSingleRoot, optionele ValidateSetOrder en de class function Default |
TDerValidationResult | Validatiestatus met IsValid, NodeCount, MaximumDepth, offsetbewuste Errors, plus de hulpjes ErrorCount en FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Gebufferde data resetten of inspecteren, een momentopname kopiëren of de voltooide array overdragen en de writer resetten |
Reserve, Append, AppendMany, AppendByte | Eenmalig laten groeien en arrays, buffers van de aanroeper, meerdere arrays of één byte toevoegen met overflowcontroles |
Wrap, WrapIdentifier, WrapConstructed | Content omwikkelen met een ruwe identifier-octet, een willekeurige identifierklasse met 64-bits tagnummer of een constructed-identifier |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Lage of hoge tagnummers coderen zonder de identifier af te kappen |
Sequence, SequenceOf, SetOf, SetOfSorted | Gecodeerde waarden samenstellen als SEQUENCE- of SET-containers; SetOfSorted sorteert waarden op gecodeerde bytes |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | BOOLEAN, ondertekende of niet-ondertekende INTEGER, gevalideerde willekeurige INTEGER-content en ENUMERATED-waarden coderen |
OctetString, OctetStringOf, BitString, Null, OID | Binaire, bit-string-, NULL- en object-identifier-waarden coderen als zelfstandige TLV's |
PrintableString, Ia5String, Utf8String | De ondersteunde ASN.1-tekenreeksvormen coderen |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Canonieke tijdtekst of UTC-TDateTime-waarden coderen, waarbij TimeOf het juiste DER-tijdtype kiest |
AlgId, AlgIdWithParams | Een AlgorithmIdentifier-SEQUENCE bouwen met NULL of expliciete parameters |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Een lezer initialiseren en zijn begrensd venster en resterend aantal bytes inspecteren |
TryReadTlvAt, PeekTlv | Lage of hoge tagnummers en minimale definite lengths parsen zonder Position te wijzigen |
ReadNextTlv, SkipTlv | Pas verdergaan wanneer er een complete geldige TLV beschikbaar is |
TryReadExpected | Alleen verdergaan wanneer klasse, constructed-vorm en tagnummer allemaal overeenkomen |
EnterConstructed | Een child-lezervenster over dezelfde bronarray aanmaken zonder content te kopiëren |
ContentBytes, EncodedBytes | Een gevalideerde content- of complete TLV-slice kopiëren wanneer eigendom nodig is |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Canonieke primitieve waarden decoderen met bereik- en ongebruikte-bit-controles |
TryReadString, TryReadTime, TryReadNull | Gevalideerde UTF8String-, PrintableString-, IA5String-, DER-tijd- of NULL-content decoderen |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Compatibiliteitstoegang bieden tot ruwe TLV-offsets plus object-identifier- en ondertekende integer-decodering |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer controleert identifier- en length-minimaliteit, buffergrenzen, universele primitieve vormen, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, ondersteunde strings en canonieke tijdwaarden
De standaardlimieten staan een maximale diepte van 64, 100000 knooppunten, 64 MiB per contentwaarde en 32 gemelde fouten toe, met één root-TLV als vereiste
ValidateSetOrder staat standaard uit omdat schema-vrije DER niet elke SET van SET OF kan onderscheiden; zet het aan voor bekende SET OF-containers zoals CMS-attribuutverzamelingen
TDerValidationOptions.Default levert de begrensde standaardwaarden, terwijl TDerValidationResult.ErrorCount en FirstError de diagnostiek vereenvoudigen
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;
| Function | Description |
|---|---|
AsnIdentifier | Bouwt een TAsnIdentifier op uit klasse, tagnummer en constructed-vlag, gebruikt om TDerReader.TryReadExpected aan te sturen |
EncodeIdentifier | Codeert een TAsnIdentifier naar zijn DER-identifierbytes, inclusief de high-tag-number-vorm |
ConcatBytes, Concat3, Concat4, ConcatMany | Voegt twee, drie, vier of een dynamische array van TBytes samen in één allocatie; wordt veelvuldig gebruikt door de CMS-builder |
EncodeOIDContent | Codeert een dotted-decimal OID-string naar zijn contentbytes zonder tag en length, zodat aanroepers een OID kunnen inspecteren of opnieuw omwikkelen |
DerValidationErrorKindName | Geeft de weergavenaam van een TDerValidationErrorKind terug voor diagnostiek |
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 accepteert optionele fractieseconden alleen wanneer het laatste fractionele cijfer niet nul isReadTlv, TryReadOID en ondertekende TryReadInteger blijven beschikbaar voor bestaande aanroepersFPdfAsn1 naast de hoofdeenheden van PDFiumPas