PDFium Delphi Component Docs

FPdfAsn1 enota

Unit: FPdfAsn1
Kodira, navigira, dekodira in preverja podatke ASN.1 Distinguished Encoding Rules z omejeno porabo virov

Public Types

TypeDescription
TAsnTagKonstante univerzalnih oznak (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, časovne in nizne oblike), ki jih uporabljata izgradnja in preverjanje identifikatorjev
TAsnClassRazred identifikatorja: asnClassUniversal, asnClassApplication, asnClassContextSpecific ali asnClassPrivate
TAsnIdentifierRazred identifikatorja, zastavica constructed in 64-bitna številka oznake, vključno z obliko high-tag-number
TDerTlvRazčlenjen TLV s polji Offset, HeaderLength, ContentOffset, ContentLength, NextOffset in Identifier, brez kopiranja izvornega medpomnilnika
TDerWriterPonovno uporabljiv izhodni medpomnilnik DER s tipiziranim kodirnikom
TDerReaderOmejen bralnik z operacijami za ogled (peek), napredovanje, preskok, pričakovano oznako, podrejeno okno, rezino in tipizirano dekodiranje
TDerByteArraysDinamično polje TBytes, ki ga uporablja ConcatMany in drugi pomočniki z več medpomnilniki
TDerValidationErrorKindKategorije napak preverjanja: dvekMalformedTlv, dvekTrailingData, omejitve globine, vozlišč in vsebine (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, kanonične napake po posameznih tipih (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) in dvekSetOrder
TDerValidationErrorZapis napake, ki upošteva odmik in Depth, s poljem Kind in človeku berljivim besedilom sporočila
TDerValidationErrorsDinamično polje TDerValidationError, vrnjeno znotraj TDerValidationResult
TDerValidationOptionsOmejitve v MaxDepth, MaxNodes, MaxContentLength in MaxErrors, zastavica RequireSingleRoot, neobvezna ValidateSetOrder in class funkcija Default
TDerValidationResultStanje preverjanja s IsValid, NodeCount, MaximumDepth in odmikom upoštevajočimi Errors, poleg tega pa pomočnika ErrorCount in FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishPonastavite ali pregledajte medpomnjene podatke, prekopirajte posnetek ali prenesite dokončano polje in ponastavite pisalnik
Reserve, Append, AppendMany, AppendByteZmogljivost povečajte na enkrat in pripnite polja, medpomnilnik v lasti klicatelja, več polj ali en bajt s preverjanjem preliva
Wrap, WrapIdentifier, WrapConstructedVsebino ovijte s surovim identifikacijskim oktetom, s poljubnim razredom identifikatorja in 64-bitno številko oznake ali s konstruiranim identifikatorjem
ContextSpecific, ApplicationSpecific, PrivateSpecificKodirajte nizke ali visoke številke oznak, ne da bi odrezali identifikator
Sequence, SequenceOf, SetOf, SetOfSortedKodirane vrednosti sestavite v vsebnike SEQUENCE ali SET; SetOfSorted razvrsti vrednosti po kodiranih bajtih
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKodirajte BOOLEAN, predznačeni ali nepredznačeni INTEGER, preverjeno poljubno vsebino INTEGER in vrednosti ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDKodirajte binarne vrednosti, bitne nize, NULL in identifikatorje objektov kot samostojne TLV
PrintableString, Ia5String, Utf8StringKodirajte podprte oblike znakovnih nizov ASN.1
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKodirajte kanonično časovno besedilo ali vrednosti UTC TDateTime, pri čemer TimeOf izbere pravi časovni tip DER
AlgId, AlgIdWithParamsZgradite SEQUENCE AlgorithmIdentifier z NULL ali izrecnimi parametri

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInicializirajte bralnik in preglejte njegovo omejeno okno ter preostalo število bajtov
TryReadTlvAt, PeekTlvRazčlenite nizke ali visoke številke oznak in minimalne določene dolžine, brez spreminjanja Position
ReadNextTlv, SkipTlvNapredujte šele, ko je na voljo popoln veljaven TLV
TryReadExpectedNapredujte šele, ko se ujemajo razred, konstruirana oblika in številka oznake
EnterConstructedUstvarite podrejeno okno bralnika nad istim izvornim poljem, brez kopiranja vsebine
ContentBytes, EncodedBytesPrekopirajte preverjeno vsebino ali celotno rezino TLV, kadar je potrebna lastnina
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDekodirajte kanonične primitivne vrednosti s preverjanjem obsega in neuporabljenih bitov
TryReadString, TryReadTime, TryReadNullDekodirajte preverjeno vsebino UTF8String, PrintableString, IA5String, DER čas ali NULL
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerZagotovite združljivostni dostop do surovih odmikov TLV ter dekodiranja identifikatorjev objektov in predznačenih celih števil

Validation

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

ValidateDer preverja minimalnost identifikatorjev in dolžin, meje medpomnilnika, univerzalne primitivne oblike, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, podprte nize in kanonične časovne vrednosti

Privzete omejitve dovoljujejo največjo globino 64, 100000 vozlišč, 64 MiB na vrednost vsebine in 32 prijavljenih napak, hkrati pa zahtevajo en korenski TLV

ValidateSetOrder je privzeto onemogočen, ker DER brez sheme ne more razlikovati vsakega SET od SET OF; omogočite ga za znane vsebnike SET OF, kot so zbirke atributov CMS

TDerValidationOptions.Default zagotavlja privzete omejene vrednosti, TDerValidationResult.ErrorCount in FirstError pa poenostavita diagnostično ravnanje

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
AsnIdentifierZgradi TAsnIdentifier iz razreda, številke oznake in zastavice constructed, uporablja se za vodenje TDerReader.TryReadExpected
EncodeIdentifierKodira TAsnIdentifier v njegove identifikacijske bajte DER, vključno z obliko high-tag-number
ConcatBytes, Concat3, Concat4, ConcatManyZdruži dve, tri, štiri ali dinamično polje vrednosti TBytes v eno dodelitev; široko jo uporablja izgrajevalnik CMS
EncodeOIDContentKodira niz OID s pikami ločenih decimalk v njegove vsebinske bajte brez oznake in dolžine, tako da lahko klicatelji pregledajo ali znova ovijejo OID
DerValidationErrorKindNameVrne prikazno ime vrednosti TDerValidationErrorKind za diagnostiko

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