PDFium Component Docs

FPdfAsn1 unit

Unit: FPdfAsn1
Codeert, doorloopt, decodeert en valideert ASN.1 Distinguished Encoding Rules-data met begrensd resourcegebruik

Public Types

TypeDescription
TAsnTagUniversele tagconstanten (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, tijd- en stringvormen) die worden gebruikt bij identifierconstructie en -validatie
TAsnClassIdentifierklasse: asnClassUniversal, asnClassApplication, asnClassContextSpecific of asnClassPrivate
TAsnIdentifierIdentifierklasse, constructed-vlag en 64-bits tagnummer, inclusief de high-tag-number-vorm
TDerTlvGeparsede TLV met Offset, HeaderLength, ContentOffset, ContentLength, NextOffset en Identifier, zonder de bronbuffer te kopiëren
TDerWriterHerbruikbare DER-uitvoerbuffer en getypeerde encoder
TDerReaderBegrensde lezer met peek-, advance-, skip-, expected-tag-, child-window-, slice- en getypeerde decodeerbewerkingen
TDerByteArraysDynamische array van TBytes die door ConcatMany en andere multi-bufferhulpjes wordt gebruikt
TDerValidationErrorKindCategorieë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
TDerValidationErrorFoutrecord met offset- en Depth-informatie, met Kind en mensleesbare berichttekst
TDerValidationErrorsDynamische array van TDerValidationError die binnen TDerValidationResult wordt teruggegeven
TDerValidationOptionsLimieten in MaxDepth, MaxNodes, MaxContentLength, MaxErrors, de vlag RequireSingleRoot, optionele ValidateSetOrder en de class function Default
TDerValidationResultValidatiestatus met IsValid, NodeCount, MaximumDepth, offsetbewuste Errors, plus de hulpjes ErrorCount en FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishGebufferde data resetten of inspecteren, een momentopname kopiëren of de voltooide array overdragen en de writer resetten
Reserve, Append, AppendMany, AppendByteEenmalig laten groeien en arrays, buffers van de aanroeper, meerdere arrays of één byte toevoegen met overflowcontroles
Wrap, WrapIdentifier, WrapConstructedContent omwikkelen met een ruwe identifier-octet, een willekeurige identifierklasse met 64-bits tagnummer of een constructed-identifier
ContextSpecific, ApplicationSpecific, PrivateSpecificLage of hoge tagnummers coderen zonder de identifier af te kappen
Sequence, SequenceOf, SetOf, SetOfSortedGecodeerde waarden samenstellen als SEQUENCE- of SET-containers; SetOfSorted sorteert waarden op gecodeerde bytes
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfBOOLEAN, ondertekende of niet-ondertekende INTEGER, gevalideerde willekeurige INTEGER-content en ENUMERATED-waarden coderen
OctetString, OctetStringOf, BitString, Null, OIDBinaire, bit-string-, NULL- en object-identifier-waarden coderen als zelfstandige TLV's
PrintableString, Ia5String, Utf8StringDe ondersteunde ASN.1-tekenreeksvormen coderen
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfCanonieke tijdtekst of UTC-TDateTime-waarden coderen, waarbij TimeOf het juiste DER-tijdtype kiest
AlgId, AlgIdWithParamsEen AlgorithmIdentifier-SEQUENCE bouwen met NULL of expliciete parameters

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingEen lezer initialiseren en zijn begrensd venster en resterend aantal bytes inspecteren
TryReadTlvAt, PeekTlvLage of hoge tagnummers en minimale definite lengths parsen zonder Position te wijzigen
ReadNextTlv, SkipTlvPas verdergaan wanneer er een complete geldige TLV beschikbaar is
TryReadExpectedAlleen verdergaan wanneer klasse, constructed-vorm en tagnummer allemaal overeenkomen
EnterConstructedEen child-lezervenster over dezelfde bronarray aanmaken zonder content te kopiëren
ContentBytes, EncodedBytesEen gevalideerde content- of complete TLV-slice kopiëren wanneer eigendom nodig is
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringCanonieke primitieve waarden decoderen met bereik- en ongebruikte-bit-controles
TryReadString, TryReadTime, TryReadNullGevalideerde UTF8String-, PrintableString-, IA5String-, DER-tijd- of NULL-content decoderen
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerCompatibiliteitstoegang bieden tot ruwe TLV-offsets plus object-identifier- en ondertekende integer-decodering

Validation

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

Public helper functions

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;

FunctionDescription
AsnIdentifierBouwt een TAsnIdentifier op uit klasse, tagnummer en constructed-vlag, gebruikt om TDerReader.TryReadExpected aan te sturen
EncodeIdentifierCodeert een TAsnIdentifier naar zijn DER-identifierbytes, inclusief de high-tag-number-vorm
ConcatBytes, Concat3, Concat4, ConcatManyVoegt twee, drie, vier of een dynamische array van TBytes samen in één allocatie; wordt veelvuldig gebruikt door de CMS-builder
EncodeOIDContentCodeert een dotted-decimal OID-string naar zijn contentbytes zonder tag en length, zodat aanroepers een OID kunnen inspecteren of opnieuw omwikkelen
DerValidationErrorKindNameGeeft de weergavenaam van een TDerValidationErrorKind terug voor diagnostiek

Example

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;

Remarks