PDFium Delphi Component Docs

μονάδα FPdfAsn1

Unit: FPdfAsn1
Κωδικοποιεί, πλοηγείται, αποκωδικοποιεί και επικυρώνει δεδομένα ASN.1 Distinguished Encoding Rules με οριοθετημένη χρήση πόρων

Public Types

ΤύποςΠεριγραφή
TAsnTagΣταθερές universal tag (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, μορφές χρόνου και συμβολοσειράς) που χρησιμοποιούνται στην κατασκευή και την επικύρωση αναγνωριστικών
TAsnClassΚλάση αναγνωριστικού: asnClassUniversal, asnClassApplication, asnClassContextSpecific ή asnClassPrivate
TAsnIdentifierΚλάση αναγνωριστικού, σημαία constructed και αριθμός tag 64 bit, συμπεριλαμβανομένης της μορφής high-tag-number
TDerTlvΕπιλυμένο TLV με Offset, HeaderLength, ContentOffset, ContentLength, NextOffset και Identifier, χωρίς αντιγραφή του buffer πηγής
TDerWriterΕπαναχρησιμοποιήσιμος buffer εξόδου DER και τυποποιημένος κωδικοποιητής
TDerReaderΟριοθετημένος reader με λειτουργίες peek, προώθησης, skip, αναμενόμενου tag, παράθυρου τέκνου, slice και τυποποιημένης αποκωδικοποίησης
TDerByteArraysΔυναμικός πίνακας TBytes που χρησιμοποιείται από το ConcatMany και άλλους βοηθούς πολλαπλών buffers
TDerValidationErrorKindΚατηγορίες σφαλμάτων επικύρωσης: dvekMalformedTlv, dvekTrailingData, όρια βάθους, κόμβων και περιεχομένου (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, αποτυχίες canonical ανά τύπο (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) και dvekSetOrder
TDerValidationErrorΕγγραφή σφάλματος με επίγνωση offset και Depth, με Kind και κείμενο μηνύματος αναγνώσιμο από ανθρώπους
TDerValidationErrorsΔυναμικός πίνακας TDerValidationError που επιστρέφεται μέσα στο TDerValidationResult
TDerValidationOptionsΌρια σε MaxDepth, MaxNodes, MaxContentLength, MaxErrors, η σημαία RequireSingleRoot, προαιρετικό ValidateSetOrder και η class function Default
TDerValidationResultΚατάσταση επικύρωσης με IsValid, NodeCount, MaximumDepth, Errors με επίγνωση offset, και τους βοηθούς ErrorCount και FirstError

Writer APIs

APIΠεριγραφή
Clear, IsEmpty, Count, Capacity, Bytes, FinishΕπαναφέρουν ή επιθεωρούν δεδομένα σε buffer, αντιγράφουν στιγμιότυπο ή μεταφέρουν τον ολοκληρωμένο πίνακα και επαναφέρουν τον writer
Reserve, Append, AppendMany, AppendByteΜεγαλώνουν μία φορά και προσθέτουν πίνακες, buffers του καλούντος, πολλαπλούς πίνακες ή ένα byte με ελέγχους υπερχείλισης
Wrap, WrapIdentifier, WrapConstructedΤυλίγουν περιεχόμενο με ένα raw octet αναγνωριστικού, οποιαδήποτε κλάση αναγνωριστικού και αριθμό tag 64 bit ή ένα constructed αναγνωριστικό
ContextSpecific, ApplicationSpecific, PrivateSpecificΚωδικοποιούν χαμηλούς ή υψηλούς αριθμούς tag χωρίς περικοπή του αναγνωριστικού
Sequence, SequenceOf, SetOf, SetOfSortedΣυνθέτουν κωδικοποιημένες τιμές ως containers SEQUENCE ή SET· το SetOfSorted ταξινομεί τιμές κατά κωδικοποιημένα bytes
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfΚωδικοποιούν BOOLEAN, signed ή unsigned INTEGER, επικυρωμένο περιεχόμενο αυθαίρετου INTEGER και τιμές ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDΚωδικοποιούν δυαδικές τιμές, bit-string, NULL και αναγνωριστικά αντικειμένων ως αυτόνομα TLVs
PrintableString, Ia5String, Utf8StringΚωδικοποιούν τις υποστηριζόμενες μορφές συμβολοσειρών χαρακτήρων ASN.1
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfΚωδικοποιούν canonical κείμενο χρόνου ή τιμές TDateTime σε UTC, με το TimeOf να επιλέγει τον σωστό τύπο χρόνου DER
AlgId, AlgIdWithParamsΔομούν μια SEQUENCE AlgorithmIdentifier με NULL ή ρητές παραμέτρους

Reader APIs

APIΠεριγραφή
Initialize, AtEnd, EffectiveLimit, RemainingΑρχικοποιούν έναν reader και επιθεωρούν το οριοθετημένο παράθυρό του και τον υπόλοιπο αριθμό byte
TryReadTlvAt, PeekTlvΑναλύουν χαμηλούς ή υψηλούς αριθμούς tag και ελάχιστα definite μήκη χωρίς αλλαγή του Position
ReadNextTlv, SkipTlvΠροχωρούν μόνο αφού είναι διαθέσιμο ένα πλήρες έγκυρο TLV
TryReadExpectedΠροχωρά μόνο όταν κλάση, constructed μορφή και αριθμός tag ταιριάζουν όλα
EnterConstructedΔημιουργεί παράθυρο reader τέκνου πάνω στον ίδιο πίνακα πηγής χωρίς αντιγραφή περιεχομένου
ContentBytes, EncodedBytesΑντιγράφουν επικυρωμένο περιεχόμενο ή πλήρες slice TLV όταν απαιτείται κατοχή
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringΑποκωδικοποιούν canonical primitive τιμές με ελέγχους εύρους και αχρήστων bit
TryReadString, TryReadTime, TryReadNullΑποκωδικοποιούν επικυρωμένο περιεχόμενο UTF8String, PrintableString, IA5String, χρόνου DER ή NULL
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerΠαρέχουν πρόσβαση συμβατότητας στα raw offsets TLV μαζί με αποκωδικοποίηση αναγνωριστικού αντικειμένου και signed ακέραιου

Validation

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

Το ValidateDer ελέγχει ελαχιστικότητα αναγνωριστικού και μήκους, όρια buffer, universal primitive μορφές, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, υποστηριζόμενες συμβολοσειρές και canonical τιμές χρόνου

Τα προεπιλεγμένα όρια επιτρέπουν μέγιστο βάθος 64, 100000 κόμβους, 64 MiB ανά τιμή περιεχομένου και 32 αναφερόμενα σφάλματα, απαιτώντας ένα ριζικό TLV

Το ValidateSetOrder είναι ανενεργό από προεπιλογή επειδή DER χωρίς schema δεν μπορεί να διακρίνει κάθε SET από SET OF· ενεργοποιήστε το για γνωστά containers SET OF όπως συλλογές χαρακτηριστικών CMS

Το TDerValidationOptions.Default παρέχει τις οριοθετημένες προεπιλογές, ενώ τα TDerValidationResult.ErrorCount και FirstError απλοποιούν τη διαχείριση διαγνωστικών

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;

ΣυνάρτησηΠεριγραφή
AsnIdentifierΔομεί ένα TAsnIdentifier από κλάση, αριθμό tag και σημαία constructed, για να οδηγήσει το TDerReader.TryReadExpected
EncodeIdentifierΚωδικοποιεί ένα TAsnIdentifier στα bytes αναγνωριστικού DER του, συμπεριλαμβανομένης της μορφής high-tag-number
ConcatBytes, Concat3, Concat4, ConcatManyΕνώνουν δύο, τρεις, τέσσερις ή έναν δυναμικό πίνακα TBytes σε μία δέσμευση· χρησιμοποιούνται ευρέως από τον builder CMS
EncodeOIDContentΚωδικοποιεί μια συμβολοσειρά OID με διαχωρισμό τελείας στα bytes περιεχομένου της χωρίς το tag και το μήκος, ώστε οι καλούντες να επιθεωρούν ή να ξανατυλίγουν ένα OID
DerValidationErrorKindNameΕπιστρέφει το εμφανιζόμενο όνομα ενός TDerValidationErrorKind για διαγνωστικά

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