PDFium Delphi Component Docs

FPdfAsn1-yksikkö

Yksikkö: FPdfAsn1
Koodaa, selailee, purkaa ja validoi ASN.1 Distinguished Encoding Rules -dataa rajatulla resurssikäytöllä

Public Types

TypeDescription
TAsnTagYleiset tagivakiot (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET sekä aika- ja merkkijonomuodot), joita tunnisteen muodostus ja validointi käyttävät
TAsnClassTunnisteen luokka: asnClassUniversal, asnClassApplication, asnClassContextSpecific tai asnClassPrivate
TAsnIdentifierTunnisteluokka, constructed-lippu ja 64-bittinen taginumero, myös high-tag-number-muoto
TDerTlvJäsennelty TLV, jossa on Offset, HeaderLength, ContentOffset, ContentLength, NextOffset ja Identifier kopioimatta lähdepuskuria
TDerWriterUudelleenkäytettävä DER-tulostuspuskuri ja tyyppitetty koodaaja
TDerReaderRajattu lukija, jossa on esikatselu, eteneminen, ohitus, odotetun tagin tarkistus, alikansiikkuna, viipalointi ja tyyppitetty dekoodaus
TDerByteArraysDynaaminen TBytes-taulukko, jota ConcatMany ja muut monipuskuriapurit käyttävät
TDerValidationErrorKindValidointivirheluokat: dvekMalformedTlv, dvekTrailingData, syvyys-, solmu- ja sisältörajat (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, tyyppikohtaiset kanoniset virheet (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) ja dvekSetOrder
TDerValidationErrorSiirtymän ja Depth-arvon tunteva virhetietue, jossa on Kind ja ihmisluettava viestiteksti
TDerValidationErrorsDynaaminen TDerValidationError-taulukko, joka palautetaan TDerValidationResult-rakenteen sisällä
TDerValidationOptionsRajat kentissä MaxDepth, MaxNodes, MaxContentLength ja MaxErrors, RequireSingleRoot-lippu, valinnainen ValidateSetOrder sekä Default-luokkafunktio
TDerValidationResultValidointitila kenttinä IsValid, NodeCount, MaximumDepth ja siirtymätietoinen Errors sekä apurit ErrorCount ja FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishNollaa tai tutki puskuroitua dataa, kopioi tilannekuva tai siirrä valmis taulukko ja nollaa kirjoittaja
Reserve, Append, AppendMany, AppendByteKasva kerralla ja liitä taulukoita, kutsujan omistamia puskureita, useita taulukoita tai yksi tavu ylivuototarkistuksilla
Wrap, WrapIdentifier, WrapConstructedKääri sisältö raakatunnisteen oktetilla, millä tahansa tunnisteluokalla ja 64-bittisellä taginumerolla tai constructed-tunnisteella
ContextSpecific, ApplicationSpecific, PrivateSpecificKoodaa matalat tai korkeat taginumerot katkaisematta tunnistetta
Sequence, SequenceOf, SetOf, SetOfSortedYhdistä koodatut arvot SEQUENCE- tai SET-konteiksi; SetOfSorted lajittelee arvot koodattujen tavujen mukaan
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKoodaa BOOLEAN-, etumerkillisen tai etumerkittömän INTEGER-, validoidun mielivaltaisen INTEGER-sisällön ja ENUMERATED-arvot
OctetString, OctetStringOf, BitString, Null, OIDKoodaa binääri-, bittijono-, NULL- ja objektitunnistearvot erillisiksi TLV-rakenteiksi
PrintableString, Ia5String, Utf8StringKoodaa tuetut ASN.1-merkkijonomuodot
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKoodaa kanonisen aikatekstin tai UTC-muotoisia TDateTime-arvoja, jolloin TimeOf valitsee oikean DER-aikatyypin
AlgId, AlgIdWithParamsRakentaa AlgorithmIdentifier-SEQUENCE-rakenteen NULL- tai eksplisiittisillä parametreilla

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingAlusta lukija ja tutki sen rajattua ikkunaa ja jäljellä olevaa tavumäärää
TryReadTlvAt, PeekTlvJäsennä matalat tai korkeat taginumerot ja minimaaliset täsmälliset pituudet muuttamatta Position-arvoa
ReadNextTlv, SkipTlvEtene vasta, kun täydellinen kelvollinen TLV on käytettävissä
TryReadExpectedEtene vain, kun luokka, constructed-muoto ja taginumero täsmäävät kaikki
EnterConstructedLuo alilukijan ikkuna saman lähdetaulukon ylle kopioimatta sisältöä
ContentBytes, EncodedBytesKopioi validoitu sisältö- tai kokonainen TLV-viipale, kun omistajuus vaaditaan
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringPura kanoniset primitiiviarvot alue- ja käyttämättömien bittien tarkistuksilla
TryReadString, TryReadTime, TryReadNullPura validoidut UTF8String-, PrintableString-, IA5String-, DER-aika- tai NULL-sisällöt
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerTarjoavat yhteensopivuuspääsyn raakoihin TLV-siirtymiin sekä objektitunnisteen ja etumerkillisen kokonaisluvun purkuun

Validation

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

ValidateDer tarkistaa tunnisteen ja pituuden minimaalisuuden, puskurirajat, yleiset primitiivimuodot, BOOLEAN-, INTEGER-, ENUMERATED-, BIT STRING-, NULL-, OBJECT IDENTIFIER-, tuetut merkkijonot ja kanoniset aika-arvot

Oletusrajat sallivat enintään syvyyden 64, 100000 solmua, 64 MiB sisältöarvoa kohden ja 32 raportoitua virhettä vaatien samalla yhden juuri-TLV:n

ValidateSetOrder on oletuksena poissa käytöstä, koska skeematon DER ei erota jokaista SET-rakennetta SET OF -rakenteesta; ota se käyttöön tunnetuissa SET OF -konteissa, kuten CMS-attribuuttikokoelmissa

TDerValidationOptions.Default tarjoaa rajatut oletusarvot, kun taas TDerValidationResult.ErrorCount ja FirstError helpottavat diagnostiikan käsittelyä

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
AsnIdentifierRakentaa TAsnIdentifier-tietueen luokasta, taginumerosta ja constructed-lipusta; käytetään ohjaamaan TDerReader.TryReadExpected-kutsua
EncodeIdentifierKoodaa TAsnIdentifier-tietueen DER-tunnistetavuiksi, mukaan lukien high-tag-number-muoto
ConcatBytes, Concat3, Concat4, ConcatManyYhdistää kaksi, kolme, neljä tai dynaamisen taulukon TBytes-arvoja yhdeksi allokoinniksi; CMS-rakentaja käyttää sitä laajasti
EncodeOIDContentKoodaa pisteellisen desimaalin OID-merkkijonon sisältötavuiksi ilman tagia ja pituutta, joten kutsujat voivat tutkia tai kääriä OID:n uudelleen
DerValidationErrorKindNamePalauttaa TDerValidationErrorKind-luokan näyttönimen diagnostiikkaa varten

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