| Type | Description |
|---|---|
TAsnTag | Costanti universal tag (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, forme di tempo e di stringa) usate dalla costruzione e dalla validazione degli identificatori |
TAsnClass | Classe dell'identificatore: asnClassUniversal, asnClassApplication, asnClassContextSpecific o asnClassPrivate |
TAsnIdentifier | Classe dell'identificatore, flag constructed e numero di tag a 64 bit, inclusa la forma high-tag-number |
TDerTlv | TLV analizzato con Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier senza copiare il buffer sorgente |
TDerWriter | Buffer di output DER riutilizzabile ed encoder tipizzato |
TDerReader | Reader con limiti che offre operazioni di peek, avanzamento, salto, tag atteso, finestra figlia, slice e decodifica tipizzata |
TDerByteArrays | Array dinamico di TBytes usato da ConcatMany e dagli altri helper multi-buffer |
TDerValidationErrorKind | Categorie 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 |
TDerValidationError | Record di errore consapevole di offset e Depth con Kind e testo del messaggio leggibile |
TDerValidationErrors | Array dinamico di TDerValidationError restituito all'interno di TDerValidationResult |
TDerValidationOptions | Limiti in MaxDepth, MaxNodes, MaxContentLength e MaxErrors, il flag RequireSingleRoot, il facoltativo ValidateSetOrder e la class function Default |
TDerValidationResult | Stato di validazione con IsValid, NodeCount, MaximumDepth ed Errors consapevoli degli offset, più gli helper ErrorCount e FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Azzera o ispeziona i dati bufferizzati, copia un'istantanea oppure trasferisce l'array completato e azzera il writer |
Reserve, Append, AppendMany, AppendByte | Cresce una sola volta e accoda array, buffer di proprietà del chiamante, più array o un singolo byte con controlli di overflow |
Wrap, WrapIdentifier, WrapConstructed | Incapsula 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, PrivateSpecific | Codificano numeri di tag bassi o alti senza troncare l'identificatore |
Sequence, SequenceOf, SetOf, SetOfSorted | Compongono valori codificati come contenitori SEQUENCE o SET; SetOfSorted ordina i valori per byte codificati |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Codificano valori BOOLEAN, INTEGER con o senza segno, contenuti INTEGER arbitrari validati ed ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Codificano valori binari, bit-string, NULL e identificatori di oggetto come TLV autonomi |
PrintableString, Ia5String, Utf8String | Codificano le forme di stringa di caratteri ASN.1 supportate |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Codificano testo temporale canonico o valori TDateTime UTC, con TimeOf che seleziona il tipo temporale DER corretto |
AlgId, AlgIdWithParams | Costruiscono una SEQUENCE AlgorithmIdentifier con parametri NULL o espliciti |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inizializzano un reader e ispezionano la sua finestra limitata e il numero di byte rimanenti |
TryReadTlvAt, PeekTlv | Analizzano numeri di tag bassi o alti e lunghezze definite minime senza modificare Position |
ReadNextTlv, SkipTlv | Avanzano solo dopo che è disponibile un TLV completo e valido |
TryReadExpected | Avanza solo quando classe, forma constructed e numero di tag corrispondono tutti |
EnterConstructed | Crea una finestra di reader figlia sullo stesso array sorgente senza copiare il contenuto |
ContentBytes, EncodedBytes | Copiano una slice validata del contenuto o del TLV completo quando serve la proprietà dei dati |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Decodificano valori primitivi canonici con controlli di intervallo e di bit non usati |
TryReadString, TryReadTime, TryReadNull | Decodificano contenuti UTF8String, PrintableString, IA5String, tempo DER o NULL validati |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Offrono accesso di compatibilità agli offset grezzi dei TLV, più la decodifica di identificatori di oggetto e interi con segno |
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
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;
| Function | Description |
|---|---|
AsnIdentifier | Costruisce un TAsnIdentifier a partire da classe, numero di tag e flag constructed, usato per guidare TDerReader.TryReadExpected |
EncodeIdentifier | Codifica un TAsnIdentifier nei suoi byte identificatore DER, inclusa la forma high-tag-number |
ConcatBytes, Concat3, Concat4, ConcatMany | Concatenano due, tre, quattro o un array dinamico di TBytes in una sola allocazione; usati ampiamente dal builder CMS |
EncodeOIDContent | Codifica 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 |
DerValidationErrorKindName | Restituisce il nome visualizzato di un TDerValidationErrorKind per la diagnostica |
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;
GeneralizedTime accetta secondi frazionari facoltativi solo quando l'ultima cifra frazionaria è diversa da zeroReadTlv, TryReadOID e TryReadInteger con segno restano disponibili per i chiamanti esistentiFPdfAsn1 insieme alle unit principali di PDFium Delphi Component