PDFium Delphi Component Docs

Jedinica FPdfAsn1

Unit: FPdfAsn1
Koduje, navigira, dekoduje i validira ASN.1 Distinguished Encoding Rules podatke sa ograničenim korišćenjem resursa

Public Types

TypeDescription
TAsnTagUniverzalne tag konstante (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, vremenski i string oblici) koje koriste izgradnja i validacija identifikatora
TAsnClassKlasa identifikatora: asnClassUniversal, asnClassApplication, asnClassContextSpecific ili asnClassPrivate
TAsnIdentifierKlasa identifikatora, constructed zastavica i 64-bitni broj taga, uključujući high-tag-number oblik
TDerTlvParsovan TLV sa Offset, HeaderLength, ContentOffset, ContentLength, NextOffset i Identifier bez kopiranja izvornog bafera
TDerWriterVišekratno upotrebljiv DER izlazni bafer i tipizani enkoder
TDerReaderOgraničen čitač sa peek, advance, skip, expected-tag, child-window, slice i tipizanim decode operacijama
TDerByteArraysDinamički niz TBytes koji koriste ConcatMany i ostali višebaferni pomoćnici
TDerValidationErrorKindKategorije grešaka validacije: dvekMalformedTlv, dvekTrailingData, limiti dubine, čvorova i sadržaja (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, kanonski neuspesi po tipu (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) i dvekSetOrder
TDerValidationErrorZapis greške svestan ofseta i Depth-a sa Kind i tekstom poruke čitljivim za ljude
TDerValidationErrorsDinamički niz TDerValidationError vrednosti koji se vraća unutar TDerValidationResult
TDerValidationOptionsLimiti u MaxDepth, MaxNodes, MaxContentLength, MaxErrors, zastavica RequireSingleRoot, opciona ValidateSetOrder i class funkcija Default
TDerValidationResultStatus validacije sa IsValid, NodeCount, MaximumDepth, Errors svestnim ofseta, plus pomoćnici ErrorCount i FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishResetuju ili ispituju baferovane podatke, kopiraju snimak ili prenose završen niz i resetuju writer
Reserve, Append, AppendMany, AppendByteProširuju jednom i dopisuju nizove, baferove u vlasništvu pozivaoca, više nizova ili jedan bajt sa proverama prekoračenja
Wrap, WrapIdentifier, WrapConstructedOmatavaju sadržaj sirovim oktetom identifikatora, bilo kojom klasom identifikatora i 64-bitnim brojem taga ili constructed identifikatorom
ContextSpecific, ApplicationSpecific, PrivateSpecificKoduju niske ili visoke brojeve tagova bez skraćivanja identifikatora
Sequence, SequenceOf, SetOf, SetOfSortedKomponuju kodovane vrednosti kao SEQUENCE ili SET kontejnere; SetOfSorted sortira vrednosti po kodovanim bajtovima
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfKoduju BOOLEAN, signed ili unsigned INTEGER, validiran proizvoljan INTEGER sadržaj i ENUMERATED vrednosti
OctetString, OctetStringOf, BitString, Null, OIDKoduju binarne, bit-string, NULL i object identifier vrednosti kao samostalne TLV-ove
PrintableString, Ia5String, Utf8StringKoduju podržane ASN.1 oblike znakovnih stringova
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKoduju kanonski vremenski tekst ili UTC TDateTime vrednosti, pri čemu TimeOf bira ispravan DER vremenski tip
AlgId, AlgIdWithParamsGrade AlgorithmIdentifier SEQUENCE sa NULL ili eksplicitnim parametrima

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInicijalizuju čitač i ispituju njegov ograničen prozor i preostali broj bajtova
TryReadTlvAt, PeekTlvParsoju niske ili visoke brojeve tagova i minimalne definite dužine bez promene Position
ReadNextTlv, SkipTlvNapreduju samo kada je kompletan validan TLV dostupan
TryReadExpectedNapreduje samo kada se klasa, constructed oblik i broj taga svi poklope
EnterConstructedKreira prozor podređenog čitača nad istim izvornim nizom bez kopiranja sadržaja
ContentBytes, EncodedBytesKopiraju validiran sadržaj ili kompletan TLV isečak kada je potrebno vlasništvo
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDekoduju kanonske primitivne vrednosti sa proverama opsega i neiskorišćenih bitova
TryReadString, TryReadTime, TryReadNullDekoduju validirane UTF8String, PrintableString, IA5String, DER time ili NULL sadržaje
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerPružaju kompatibilan pristup sirovim TLV ofsetima plus dekodovanje object identifier i signed integer vrednosti

Validation

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

ValidateDer proverava minimalnost identifikatora i dužine, granice bafera, univerzalne primitivne oblike, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, podržane stringove i kanonske vremenske vrednosti

Podrazumevani limiti dozvoljavaju maksimalnu dubinu 64, 100000 čvorova, 64 MiB po vrednosti sadržaja i 32 prijavljene greške, uz zahtev za jednim korenim TLV-om

ValidateSetOrder je podrazumevano onemogućen jer DER bez šeme ne može da razlikuje svaki SET od SET OF; omogućite ga za poznate SET OF kontejnere kao što su CMS kolekcije atributa

TDerValidationOptions.Default dostavlja ograničene podrazumevane vrednosti, dok TDerValidationResult.ErrorCount i FirstError pojednostavljuju dijagnostičku obradu

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
AsnIdentifierGradi TAsnIdentifier iz klase, broja taga i constructed zastavice; koristi se za pokretanje TDerReader.TryReadExpected
EncodeIdentifierKoduje TAsnIdentifier u njegove DER bajtove identifikatora, uključujući high-tag-number oblik
ConcatBytes, Concat3, Concat4, ConcatManySpajaju dva, tri, četiri ili dinamički niz TBytes vrednosti u jednu alokaciju; široko ih koristi CMS builder
EncodeOIDContentKoduje tačkasto-decimalni OID string u njegove bajtove sadržaja bez taga i dužine, tako da pozivaoci mogu da ispitaju ili ponovo omotaju OID
DerValidationErrorKindNameVraća ime za prikaz TDerValidationErrorKind vrednosti za dijagnostiku

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