PDFium Component Docs

FPdfAsn1-enhet

Unit: FPdfAsn1
Koder, navigerer i, dekoder og validerer ASN.1 Distinguished Encoding Rules-data med begrenset ressursbruk

Public Types

TypeDescription
TAsnTagUniverselle tag-konstanter (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, tids- og strengformer) brukt ved identifikatorkonstruksjon og validering
TAsnClassIdentifikatorklasse: asnClassUniversal, asnClassApplication, asnClassContextSpecific eller asnClassPrivate
TAsnIdentifierIdentifikatorklasse, constructed-flagg og 64-bit tag-nummer, inkludert high-tag-number-formen
TDerTlvParsede TLV-er med Offset, HeaderLength, ContentOffset, ContentLength, NextOffset og Identifier uten å kopiere kildebufferen
TDerWriterGjenbrukbar DER-utdatabuffer og typet encoder
TDerReaderAvgrenset leser med peek, advance, skip, expected-tag, child-window, slice og typede dekodeoperasjoner
TDerByteArraysDynamisk array av TBytes brukt av ConcatMany og andre flerbuffers-hjelpere
TDerValidationErrorKindKategorier for valideringsfeil: dvekMalformedTlv, dvekTrailingData, dybde-, node- og innholdsgrenser (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, kanoniske feil per type (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) og dvekSetOrder
TDerValidationErrorFeilrecord som kjenner offset og Depth, med Kind og menneskelesbar meldingstekst
TDerValidationErrorsDynamisk array av TDerValidationError returnert inne i TDerValidationResult
TDerValidationOptionsGrenser i MaxDepth, MaxNodes, MaxContentLength og MaxErrors, RequireSingleRoot-flagget, valgfri ValidateSetOrder og Default-klassefunksjonen
TDerValidationResultValideringsstatus med IsValid, NodeCount, MaximumDepth og offset-kjente Errors, pluss hjelperne ErrorCount og FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishNullstill eller undersøk bufrede data, kopier et øyeblikksbilde, eller overfør den ferdige arrayen og nullstill writeren
Reserve, Append, AppendMany, AppendByteUtvid én gang og legg til arrays, kaller-eide buffere, flere arrays eller én byte, med overløpskontroller
Wrap, WrapIdentifier, WrapConstructedPakk innhold inn med en rå identifikatoroktett, vilkårlig identifikatorklasse og 64-bit tag-nummer, eller en constructed-identifikator
ContextSpecific, ApplicationSpecific, PrivateSpecificKod lave eller høye tag-numre uten å avkorte identifikatoren
Sequence, SequenceOf, SetOf, SetOfSortedKomponer kodede verdier som SEQUENCE- eller SET-containere; SetOfSorted sorterer verdier etter kodede bytes
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKod BOOLEAN, signert eller usignert INTEGER, validert vilkårlig INTEGER-innhold og ENUMERATED-verdier
OctetString, OctetStringOf, BitString, Null, OIDKod binære verdier, bitstrenger, NULL og objektidentifikatorer som selvstendige TLV-er
PrintableString, Ia5String, Utf8StringKod de støttede ASN.1-tegnstrengformene
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKod kanonisk tidstekst eller UTC-TDateTime-verdier, der TimeOf velger riktig DER-tidstype
AlgId, AlgIdWithParamsBygger en AlgorithmIdentifier-SEQUENCE med NULL eller eksplisitte parametere

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInitialiser en leser og undersøk dens avgrensede vindu og gjenstående byteantall
TryReadTlvAt, PeekTlvAnalyser lave eller høye tag-numre og minimale definite lengder uten å endre Position
ReadNextTlv, SkipTlvGår videre først når en komplett gyldig TLV er tilgjengelig
TryReadExpectedGår videre bare når klasse, constructed-form og tag-nummer alle samsvarer
EnterConstructedOppretter et underordnet leservindu over samme kildearray uten å kopiere innhold
ContentBytes, EncodedBytesKopierer et validert innholdsutsnitt eller en komplett TLV når eierskap kreves
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDekoder kanoniske primitive verdier med kontroll av område og ubrukte biter
TryReadString, TryReadTime, TryReadNullDekoder validert UTF8String-, PrintableString-, IA5String-, DER-tids- eller NULL-innhold
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerGir kompatibilitetstilgang til rå TLV-offsets samt dekoding av objektidentifikatorer og signerte heltall

Validation

function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;

ValidateDer kontrollerer minimalitet i identifikator og lengde, buffergrenser, universelle primitive former, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, støttede strenger og kanoniske tidsverdier

Standardgrensene tillater maksimal dybde 64, 100000 noder, 64 MiB per innholdsverdi og 32 rapporterte feil, samtidig som én rot-TLV kreves

ValidateSetOrder er deaktivert som standard fordi skjemafri DER ikke kan skille alle SET fra SET OF; aktiver den for kjente SET OF-containere som CMS-attributtsamlinger

TDerValidationOptions.Default leverer standardgrensene, mens TDerValidationResult.ErrorCount og FirstError forenkler diagnostisk håndtering

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
AsnIdentifierBygger en TAsnIdentifier fra klasse, tag-nummer og constructed-flagg, brukt til å drive TDerReader.TryReadExpected
EncodeIdentifierKoder en TAsnIdentifier til sine DER-identifikatorbytes, inkludert high-tag-number-formen
ConcatBytes, Concat3, Concat4, ConcatManyKonkatenerer to, tre, fire eller en dynamisk array av TBytes til én allokering; brukes mye av CMS-byggeren
EncodeOIDContentKoder en OID-streng med punkterte desimaltall til innholdsbytes uten tag og lengde, slik at kallere kan undersøke eller pakke inn en OID på nytt
DerValidationErrorKindNameReturnerer visningsnavnet til en TDerValidationErrorKind for diagnostikk

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