| Τύπος | Περιγραφή |
|---|---|
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 |
| 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 ή ρητές παραμέτρους |
| 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 ακέραιου |
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 απλοποιούν τη διαχείριση διαγνωστικών
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 για διαγνωστικά |
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 δέχεται προαιρετικά κλάσματα δευτερολέπτου μόνο όταν το τελευταίο κλασματικό ψηφίο είναι μη μηδενικόReadTlv, TryReadOID και το signed TryReadInteger παραμένουν διαθέσιμα για υπάρχοντες καλούντεςFPdfAsn1 πλάι στις κύριες μονάδες του PDFium Delphi Component