PDFium Delphi Component Docs

FPdfAsn1 modulis

Modulis: FPdfAsn1
Koduoja, naršo, dekoduoja ir tikrina ASN.1 Distinguished Encoding Rules duomenis ribotai naudojant išteklius

Public Types

TypeDescription
TAsnTagUniversaliosios žymos konstantos (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, laiko ir eilučių formos), kurias naudoja identifikatorių konstravimas ir tikrinimas
TAsnClassIdentifikatoriaus klasė: asnClassUniversal, asnClassApplication, asnClassContextSpecific arba asnClassPrivate
TAsnIdentifierIdentifikatoriaus klasė, sukonstravimo vėliava ir 64 bitų žymos numeris, įskaitant aukšto žymos numerio formą
TDerTlvIšanalizuota TLV su Offset, HeaderLength, ContentOffset, ContentLength, NextOffset ir Identifier, nekopijuojant šaltinio buferio
TDerWriterPakartotinai naudojamas DER išvesties buferis ir tipizuotas koduotuvas
TDerReaderRibotas skaitytuvas su peržiūros, pažangos, praleidimo, tikėtinos žymos, antrinio lango, iškarpos ir tipizuoto dekodavimo operacijomis
TDerByteArraysDinaminis TBytes masyvas, kurį naudoja ConcatMany ir kiti kelių buferių pagalbininkai
TDerValidationErrorKindTikrinimo klaidų kategorijos: dvekMalformedTlv, dvekTrailingData, gylio, mazgų ir turinio ribos (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, atskirų tipų kanoniniai nesėkmingi atvejai (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) ir dvekSetOrder
TDerValidationErrorKlaidos įrašas, žinantis poslinkį ir Depth, su Kind ir žmogui skaitomu pranešimo tekstu
TDerValidationErrorsDinaminis TDerValidationError masyvas, grąžinamas TDerValidationResult viduje
TDerValidationOptionsRibos laukuose MaxDepth, MaxNodes, MaxContentLength, MaxErrors, vėliava RequireSingleRoot, pasirenkamas ValidateSetOrder ir klasės funkcija Default
TDerValidationResultTikrinimo būsena su IsValid, NodeCount, MaximumDepth, poslinkius žinančiu Errors, taip pat pagalbininkais ErrorCount ir FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishAtstato arba apžiūri buferizuotus duomenis, nukopijuoja momentinę kopiją arba perduoda užbaigtą masyvą ir atstato rašytuvą
Reserve, Append, AppendMany, AppendBytePadidina vieną kartą ir prideda masyvus, kreipėjo valdomus buferius, kelis masyvus arba vieną baitą su perpildymo patikrinimais
Wrap, WrapIdentifier, WrapConstructedApvynioja turinį žaliu identifikatoriaus oktetu, bet kuria identifikatoriaus klase ir 64 bitų žymos numeriu arba sukonstruotu identifikatoriumi
ContextSpecific, ApplicationSpecific, PrivateSpecificKoduoja žemo arba aukšto žymos numerio reikšmes nesutrumpindamos identifikatoriaus
Sequence, SequenceOf, SetOf, SetOfSortedSudeda koduotas reikšmes į SEQUENCE arba SET konteinerius; SetOfSorted surikiuoja reikšmes pagal koduotus baitus
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKoduoja BOOLEAN, signed arba unsigned INTEGER, patikrintą savavališką INTEGER turinį ir ENUMERATED reikšmes
OctetString, OctetStringOf, BitString, Null, OIDKoduoja dvejetaines, bitų eilutės, NULL ir objekto identifikatoriaus reikšmes kaip atskiras TLV
PrintableString, Ia5String, Utf8StringKoduoja palaikomas ASN.1 simbolių eilučių formas
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKoduoja kanoninį laiko tekstą arba UTC TDateTime reikšmes, o TimeOf parenka teisingą DER laiko tipą
AlgId, AlgIdWithParamsSudaro AlgorithmIdentifier SEQUENCE su NULL arba aiškiais parametrais

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInicijuoja skaitytuvą ir leidžia apžiūrėti jo ribotą langą bei likusį baitų skaičių
TryReadTlvAt, PeekTlvIšanalizuoja žemo arba aukšto žymos numerio reikšmes ir minimalius determinuotus ilgius nepakeisdamos Position
ReadNextTlv, SkipTlvŽengia pirmyn tik tada, kai prieinama pilna teisinga TLV
TryReadExpectedŽengia pirmyn tik tada, kai klasė, sukonstravimo forma ir žymos numeris visi sutampa
EnterConstructedSukuria antrinio skaitytuvo langą virš to paties šaltinio masyvo nekopijuodama turinio
ContentBytes, EncodedBytesNukopijuoja patikrintą turinio arba pilną TLV iškarpos fragmentą, kai reikia turėti nuosavybę
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDekoduoja kanonines primityviąsias reikšmes su rėžių ir nepanaudotų bitų patikrinimais
TryReadString, TryReadTime, TryReadNullDekoduoja patikrintą UTF8String, PrintableString, IA5String, DER laiko arba NULL turinį
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerSuteikia suderinamumo prieigą prie žalių TLV poslinkių ir objekto identifikatoriaus bei signed sveikųjų dekodavimo

Validation

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

ValidateDer patikrina identifikatorių ir ilgių minimalumą, buferio ribas, universalias primityviąsias formas, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, palaikomas eilutes ir kanonines laiko reikšmes

Numatytosios ribos leidžia ne daugiau kaip 64 gylį, 100000 mazgų, po 64 MiB kiekvienai turinio reikšmei ir 32 pranešamas klaidas, kartu reikalaudamos vienos šakninės TLV

ValidateSetOrder pagal nutylėjimą išjungta, nes DER be schemos negali atskirti kiekvieno SET nuo SET OF; įjunkite ją žinomiems SET OF konteineriams, pavyzdžiui, CMS atributų rinkiniams

TDerValidationOptions.Default pateikia ribotas numatytąsias reikšmes, o TDerValidationResult.ErrorCount ir FirstError palengvina diagnostikos apdorojimą

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
AsnIdentifierSudaro TAsnIdentifier iš klasės, žymos numerio ir sukonstravimo vėliavos; naudojama TDerReader.TryReadExpected valdyti
EncodeIdentifierTAsnIdentifier užkoduoja į jo DER identifikatoriaus baitus, įskaitant aukšto žymos numerio formą
ConcatBytes, Concat3, Concat4, ConcatManySujungia du, tris, keturis arba dinaminį TBytes masyvą į vieną išskyrimą; plačiai naudojama CMS sudarytojo
EncodeOIDContentUžkoduoja dotted-decimal OID eilutę į jos turinio baitus be žymos ir ilgio, todėl kreipėjas gali apžiūrėti arba iš naujo apvynioti OID
DerValidationErrorKindNameGrąžina TDerValidationErrorKind rodomą pavadinimą diagnostikai

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