PDFium Delphi Component Docs

FPdfAsn1 unit

Unit: FPdfAsn1
Kodira, navigira, dekodira i provjerava ASN.1 Distinguished Encoding Rules podatke uz ograničenu potrošnju resursa

Javni tipovi

TipOpis
TAsnTagUniverzalne konstante oznaka (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, vremenski i nizovni oblici) koje koriste izgradnja i provjera identifikatora
TAsnClassRazred identifikatora: asnClassUniversal, asnClassApplication, asnClassContextSpecific ili asnClassPrivate
TAsnIdentifierRazred identifikatora, zastavica constructed i 64-bitni broj oznake, uključujući oblik s visokim brojem oznake
TDerTlvRaščlanjeni TLV s Offset, HeaderLength, ContentOffset, ContentLength, NextOffset i Identifier, bez kopiranja izvornog međuspremnika
TDerWriterPonovno upotrebljivi izlazni međuspremnik DER-a i tipizirani enkoder
TDerReaderOgraničeni čitač s operacijama peek, advance, skip, očekivana oznaka, podprozor djece, isječak i tipizirano dekodiranje
TDerByteArraysDinamičko polje TBytes koje koriste ConcatMany i drugi pomoćnici za više međuspremnika
TDerValidationErrorKindKategorije pogrešaka provjere: dvekMalformedTlv, dvekTrailingData, ograničenja dubine, čvorova i sadržaja (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, pogreške kanonskih oblika po tipu (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) i dvekSetOrder
TDerValidationErrorZapis pogreške svjestan odmaka i Depth, s Kind i porukom čitljivom ljudima
TDerValidationErrorsDinamičko polje TDerValidationError koje se vraća unutar TDerValidationResult
TDerValidationOptionsOgraničenja u MaxDepth, MaxNodes, MaxContentLength, MaxErrors, zastavici RequireSingleRoot, neobaveznom ValidateSetOrder i class funkciji Default
TDerValidationResultStatus provjere s IsValid, NodeCount, MaximumDepth, poljem Errors svjesnim odmaka, te pomoćnicima ErrorCount i FirstError

API-ji zapisivača

APIOpis
Clear, IsEmpty, Count, Capacity, Bytes, FinishPoništavaju ili ispituju međuspremljene podatke, kopiraju snimku ili predaju završeno polje i poništavaju zapisivač
Reserve, Append, AppendMany, AppendByteRastu jednim rezerviranjem i dodaju polja, međuspremnike u vlasništvu pozivatelja, više polja ili jedan bajt uz provjere preljeva
Wrap, WrapIdentifier, WrapConstructedOmotavaju sadržaj sirovim oktetom identifikatora, bilo kojim razredom identifikatora i 64-bitnim brojem oznake ili constructed identifikatorom
ContextSpecific, ApplicationSpecific, PrivateSpecificKodiraju niske ili visoke brojeve oznaka bez skraćivanja identifikatora
Sequence, SequenceOf, SetOf, SetOfSortedSastavljaju kodirane vrijednosti u spremnike SEQUENCE ili SET; SetOfSorted sortira vrijednosti po kodiranim bajtovima
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKodiraju vrijednosti BOOLEAN, predznačeni ili nepredznačeni INTEGER, provjereni sadržaj proizvoljnog INTEGER-a i ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDKodiraju binarne, bit-nizovne, NULL i vrijednosti identifikatora objekata kao samostalne TLV-ove
PrintableString, Ia5String, Utf8StringKodiraju podržane oblike znakovnih nizova ASN.1
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKodiraju kanonski vremenski tekst ili UTC vrijednosti TDateTime, uz TimeOf koji bira ispravni DER vremenski tip
AlgId, AlgIdWithParamsGrade SEQUENCE AlgorithmIdentifier s NULL ili eksplicitnim parametrima

API-ji čitača

APIOpis
Initialize, AtEnd, EffectiveLimit, RemainingInicijaliziraju čitač i ispituju njegov ograničeni prozor i preostali broj bajtova
TryReadTlvAt, PeekTlvRaščlanjuju niske ili visoke brojeve oznaka i minimalne određene duljine bez mijenjanja Position
ReadNextTlv, SkipTlvNapreduju samo nakon što je dostupan potpuni valjani TLV
TryReadExpectedNapreduje samo kada se razred, constructed oblik i broj oznake svi poklapaju
EnterConstructedStvara podprozor dječjeg čitača nad istim izvornim poljem bez kopiranja sadržaja
ContentBytes, EncodedBytesKopiraju provjereni isječak sadržaja ili potpunog TLV-a kada je potrebno vlasništvo
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDekodiraju kanonske primitivne vrijednosti uz provjere raspona i neiskorištenih bitova
TryReadString, TryReadTime, TryReadNullDekodiraju provjereni sadržaj UTF8String, PrintableString, IA5String, DER vrijeme ili NULL
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerNude kompatibilan pristup sirovim odmacima TLV-a uz dekodiranje identifikatora objekta i predznačenog cijelog broja

Provjera

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

ValidateDer provjerava minimalnost identifikatora i duljine, granice međuspremnika, univerzalne primitivne oblike, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, podržane nizove i kanonske vremenske vrijednosti

Zadana ograničenja dopuštaju najveću dubinu 64, 100000 čvorova, 64 MiB po vrijednosti sadržaja i 32 prijavljene pogreške, uz zahtjev za jednim korijenskim TLV-om

ValidateSetOrder je po zadanim postavkama onemogućen jer DER bez sheme ne može razlikovati svaki SET od SET OF; omogućite ga za poznate spremnike SET OF poput zbirki CMS atributa

TDerValidationOptions.Default isporučuje zadana ograničena svojstva, a TDerValidationResult.ErrorCount i FirstError pojednostavljuju dijagnostiku

Javne pomoćne funkcije

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;

FunkcijaOpis
AsnIdentifierGradi TAsnIdentifier iz razreda, broja oznake i zastavice constructed, za upravljanje TDerReader.TryReadExpected
EncodeIdentifierKodira TAsnIdentifier u njegove DER bajtove identifikatora, uključujući oblik s visokim brojem oznake
ConcatBytes, Concat3, Concat4, ConcatManyUlančavaju dva, tri, četiri ili dinamičko polje TBytes u jednu alokaciju; naširoko ih koristi CMS graditelj
EncodeOIDContentKodira OID niz u točkasto-decimalnom obliku u bajtove sadržaja bez oznake i duljine, pa pozivatelj može pregledati ili ponovno omotati OID
DerValidationErrorKindNameVraća naziv za prikaz vrijednosti TDerValidationErrorKind za dijagnostiku

Primjer

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;

Napomene