PDFium Delphi Component Docs

FPdfAsn1-enhet

Unit: FPdfAsn1
Kodar, navigerar i, avkodar och validerar ASN.1 Distinguished Encoding Rules-data med avgränsad resursanvändning

Public Types

TypeDescription
TAsnTagUniversella taggkonstanter (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, tids- och strängformer) som används vid identifierarkonstruktion och validering
TAsnClassIdentifierarklass: asnClassUniversal, asnClassApplication, asnClassContextSpecific eller asnClassPrivate
TAsnIdentifierIdentifierarklass, constructed-flagga och 64-bitars taggnummer, inklusive formen med höga taggnummer
TDerTlvTolvad TLV med Offset, HeaderLength, ContentOffset, ContentLength, NextOffset och Identifier utan att kopiera källbufferten
TDerWriterÅteranvändbar DER-utdatabuffer och typad encoder
TDerReaderAvgränsad läsare med peek-, advance-, skip-, expected-tag-, child-window-, slice- och typade avkodningsoperationer
TDerByteArraysDynamiskt fält av TBytes som används av ConcatMany och andra flerbuffershjälpare
TDerValidationErrorKindKategorier för valideringsfel: dvekMalformedTlv, dvekTrailingData, gränser för djup, noder och innehåll (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, per typ kanoniska fel (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) och dvekSetOrder
TDerValidationErrorFelpost med känsla för Depth och offset, med Kind och mänskligt läsbar meddelandetext
TDerValidationErrorsDynamiskt fält av TDerValidationError som returneras inuti TDerValidationResult
TDerValidationOptionsGränser i MaxDepth, MaxNodes, MaxContentLength, MaxErrors, flaggan RequireSingleRoot, valfri ValidateSetOrder och klassfunktionen Default
TDerValidationResultValideringsstatus med IsValid, NodeCount, MaximumDepth, offsetkänsliga Errors, plus hjälparna ErrorCount och FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishNollställ eller inspektera buffrad data, kopiera en ögonblicksbild, eller överföra den färdiga fältet och nollställa skrivaren
Reserve, Append, AppendMany, AppendByteVäx en gång och bifoga fält, buffertar som ägs av anroparen, flera fält eller en byte med spillkontroller
Wrap, WrapIdentifier, WrapConstructedSlå in innehåll med en rå identifieraroktett, valfri identifierarklass och 64-bitars taggnummer, eller en constructed-identifierare
ContextSpecific, ApplicationSpecific, PrivateSpecificKoda låga eller höga taggnummer utan att klippa identifieraren
Sequence, SequenceOf, SetOf, SetOfSortedKomponera kodade värden som SEQUENCE- eller SET-behållare; SetOfSorted sorterar värdena på deras kodade bytes
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKoda BOOLEAN, teckenförsedda eller teckenlösa INTEGER, validerat godtyckligt INTEGER-innehåll och ENUMERATED-värden
OctetString, OctetStringOf, BitString, Null, OIDKoda binära värden, bitsträngar, NULL och objektidentifierare som fristående TLV:er
PrintableString, Ia5String, Utf8StringKoda de ASN.1-teckensträngsformer som stöds
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKoda kanonisk tidstext eller UTC-TDateTime-värden, där TimeOf väljer rätt DER-tidstyp
AlgId, AlgIdWithParamsBygg en AlgorithmIdentifier-SEQUENCE med NULL eller explicita parametrar

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInitiera en läsare och inspektera dess avgränsade fönster och antalet återstående bytes
TryReadTlvAt, PeekTlvTolka låga eller höga taggnummer och minimala definitiva längder utan att ändra Position
ReadNextTlv, SkipTlvGå framåt först när en komplett giltig TLV finns tillgänglig
TryReadExpectedGå framåt bara när klass, constructed-form och taggnummer alla matchar
EnterConstructedSkapa ett underläsarfönster över samma källfält utan att kopiera innehållet
ContentBytes, EncodedBytesKopiera en validerad innehålls- eller komplett TLV-sekvens när ägarskap krävs
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringAvkoda kanoniska primitiva värden med kontroller av intervall och oanvända bitar
TryReadString, TryReadTime, TryReadNullAvkoda validerat UTF8String-, PrintableString-, IA5String-, DER-tids- eller NULL-innehåll
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerErbjud kompatibilitetsåtkomst till råa TLV-offset plus avkodning av objektidentifierare och teckenförsedda heltal

Validation

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

ValidateDer kontrollerar identifierar- och längdminimalitet, buffergränser, universella primitiva former, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, strängformer som stöds och kanoniska tidsvärden

Standardgränserna tillåter ett maxdjup på 64, 100000 noder, 64 MiB per innehållsvärde och 32 rapporterade fel samtidigt som exakt en rot-TLV krävs

ValidateSetOrder är avstängt som standard eftersom schemafri DER inte kan skilja alla SET från SET OF; aktivera det för kända SET OF-behållare som CMS-attributsamlingar

TDerValidationOptions.Default tillhandahåller de avgränsade standardvärdena, medan TDerValidationResult.ErrorCount och FirstError förenklar feldiagnostik

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 från klass, taggnummer och constructed-flagga, och används för att styra TDerReader.TryReadExpected
EncodeIdentifierKodar en TAsnIdentifier till dess DER-identifierarbytes, inklusive formen med höga taggnummer
ConcatBytes, Concat3, Concat4, ConcatManySammankedjar två, tre, fyra eller ett dynamiskt fält av TBytes till en enda allokering; används flitigt av CMS-byggaren
EncodeOIDContentKodar en OID-sträng med punktseparerade decimaltal till sina innehållsbytes utan tagg och längd, så att anropare kan inspektera eller slå in en OID på nytt
DerValidationErrorKindNameReturnerar visningsnamnet för en TDerValidationErrorKind för diagnostik

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