PDFium Delphi Component Docs

FPdfAsn1 Unità

Unità: FPdfAsn1
Codifica, naviga, decodifica e convalida dati ASN.1 Distinguished Encoding Rules con uso limitato delle risorse

Public Types

TypeDescription
TAsnTagCostanti universal tag (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, forme di tempo e di stringa) usate dalla costruzione e dalla validazione degli identificatori
TAsnClassClasse dell'identificatore: asnClassUniversal, asnClassApplication, asnClassContextSpecific o asnClassPrivate
TAsnIdentifierClasse dell'identificatore, flag constructed e numero di tag a 64 bit, inclusa la forma high-tag-number
TDerTlvTLV analizzato con Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier senza copiare il buffer sorgente
TDerWriterBuffer di output DER riutilizzabile ed encoder tipizzato
TDerReaderReader con limiti che offre operazioni di peek, avanzamento, salto, tag atteso, finestra figlia, slice e decodifica tipizzata
TDerByteArraysArray dinamico di TBytes usato da ConcatMany e dagli altri helper multi-buffer
TDerValidationErrorKindCategorie di errore di validazione: dvekMalformedTlv, dvekTrailingData, limiti di profondità, di nodi e di contenuto (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, fallimenti canonici per tipo (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) e dvekSetOrder
TDerValidationErrorRecord di errore consapevole di offset e Depth con Kind e testo del messaggio leggibile
TDerValidationErrorsArray dinamico di TDerValidationError restituito all'interno di TDerValidationResult
TDerValidationOptionsLimiti in MaxDepth, MaxNodes, MaxContentLength e MaxErrors, il flag RequireSingleRoot, il facoltativo ValidateSetOrder e la class function Default
TDerValidationResultStato di validazione con IsValid, NodeCount, MaximumDepth ed Errors consapevoli degli offset, più gli helper ErrorCount e FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishAzzera o ispeziona i dati bufferizzati, copia un'istantanea oppure trasferisce l'array completato e azzera il writer
Reserve, Append, AppendMany, AppendByteCresce una sola volta e accoda array, buffer di proprietà del chiamante, più array o un singolo byte con controlli di overflow
Wrap, WrapIdentifier, WrapConstructedIncapsula il contenuto con un ottetto identificatore grezzo, con una qualsiasi classe di identificatore e numero di tag a 64 bit oppure con un identificatore constructed
ContextSpecific, ApplicationSpecific, PrivateSpecificCodificano numeri di tag bassi o alti senza troncare l'identificatore
Sequence, SequenceOf, SetOf, SetOfSortedCompongono valori codificati come contenitori SEQUENCE o SET; SetOfSorted ordina i valori per byte codificati
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfCodificano valori BOOLEAN, INTEGER con o senza segno, contenuti INTEGER arbitrari validati ed ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDCodificano valori binari, bit-string, NULL e identificatori di oggetto come TLV autonomi
PrintableString, Ia5String, Utf8StringCodificano le forme di stringa di caratteri ASN.1 supportate
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfCodificano testo temporale canonico o valori TDateTime UTC, con TimeOf che seleziona il tipo temporale DER corretto
AlgId, AlgIdWithParamsCostruiscono una SEQUENCE AlgorithmIdentifier con parametri NULL o espliciti

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInizializzano un reader e ispezionano la sua finestra limitata e il numero di byte rimanenti
TryReadTlvAt, PeekTlvAnalizzano numeri di tag bassi o alti e lunghezze definite minime senza modificare Position
ReadNextTlv, SkipTlvAvanzano solo dopo che è disponibile un TLV completo e valido
TryReadExpectedAvanza solo quando classe, forma constructed e numero di tag corrispondono tutti
EnterConstructedCrea una finestra di reader figlia sullo stesso array sorgente senza copiare il contenuto
ContentBytes, EncodedBytesCopiano una slice validata del contenuto o del TLV completo quando serve la proprietà dei dati
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDecodificano valori primitivi canonici con controlli di intervallo e di bit non usati
TryReadString, TryReadTime, TryReadNullDecodificano contenuti UTF8String, PrintableString, IA5String, tempo DER o NULL validati
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerOffrono accesso di compatibilità agli offset grezzi dei TLV, più la decodifica di identificatori di oggetto e interi con segno

Validation

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

ValidateDer controlla la minimalità di identificatori e lunghezze, i limiti del buffer, le forme primitive universal, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, le stringhe supportate e i valori temporali canonici

I limiti predefiniti consentono una profondità massima di 64, 100000 nodi, 64 MiB per valore di contenuto e 32 errori riportati, richiedendo un singolo TLV radice

ValidateSetOrder è disabilitato per impostazione predefinita perché il DER senza schema non può distinguere ogni SET da SET OF; attivarlo per contenitori SET OF noti, come le collezioni di attributi CMS

TDerValidationOptions.Default fornisce i limiti predefiniti, mentre TDerValidationResult.ErrorCount e FirstError semplificano la gestione diagnostica

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
AsnIdentifierCostruisce un TAsnIdentifier a partire da classe, numero di tag e flag constructed, usato per guidare TDerReader.TryReadExpected
EncodeIdentifierCodifica un TAsnIdentifier nei suoi byte identificatore DER, inclusa la forma high-tag-number
ConcatBytes, Concat3, Concat4, ConcatManyConcatenano due, tre, quattro o un array dinamico di TBytes in una sola allocazione; usati ampiamente dal builder CMS
EncodeOIDContentCodifica una stringa OID in decimale puntato nei suoi byte di contenuto, senza tag e lunghezza, così che i chiamanti possano ispezionare o ri-incapsulare un OID
DerValidationErrorKindNameRestituisce il nome visualizzato di un TDerValidationErrorKind per la diagnostica

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