| النوع | الوصف |
|---|---|
TAsnTag | ثوابت الوسوم العامة (BOOLEAN و INTEGER و OCTET STRING و OID و SEQUENCE و SET وصور الوقت والسلاسل) المستخدمة في بناء المعرفات والتحقق منها |
TAsnClass | صنف المعرف: asnClassUniversal أو asnClassApplication أو asnClassContextSpecific أو asnClassPrivate |
TAsnIdentifier | صنف المعرف، وعلامة البناء، ورقم وسم بعرض 64 بت، بما في ذلك صيغة رقم الوسم العالي |
TDerTlv | TLV مُحلَّل يحمل Offset و HeaderLength و ContentOffset و ContentLength و NextOffset و Identifier دون نسخ المخزن المصدر |
TDerWriter | مخزن إخراج DER قابل لإعادة الاستخدام مع مرمِّز مُنمَّط |
TDerReader | قارئ محدود بعمليات إلقاء نظرة، وتقديم، وتخطٍ، ووسم متوقع، ونافذة ابنة، وشرائح، وفك ترميز مُنمَّط |
TDerByteArrays | مصفوفة ديناميكية من TBytes تستخدمها ConcatMany ومساعدات المخازن المتعددة الأخرى |
TDerValidationErrorKind | فئات أخطاء التحقق: dvekMalformedTlv و dvekTrailingData، وحدود العمق والعقد والمحتوى (dvekDepthLimit و dvekNodeLimit و dvekContentLimit)، و dvekUniversalForm، وإخفاقات التمثيل القانوني لكل نوع (dvekBoolean و dvekInteger و dvekBitString و dvekNull و dvekOid و dvekString و dvekTime)، و dvekSetOrder |
TDerValidationError | سجل خطأ واعٍ بالإزاحة و Depth يحمل Kind ونص رسالة مقروءًا للبشر |
TDerValidationErrors | مصفوفة ديناميكية من TDerValidationError تُعاد داخل TDerValidationResult |
TDerValidationOptions | حدود في MaxDepth و MaxNodes و MaxContentLength و MaxErrors، وعلامة RequireSingleRoot، و ValidateSetOrder الاختيارية، ودالة الفئة Default |
TDerValidationResult | حالة التحقق مع IsValid و NodeCount و MaximumDepth و Errors الواعية بالإزاحة، إضافة إلى المساعدين ErrorCount و FirstError |
| الواجهة | الوصف |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | إعادة ضبط البيانات المخزَّنة أو فحصها، أو نسخ لقطة، أو نقل المصفوفة المكتملة وإعادة ضبط الكاتب |
Reserve, Append, AppendMany, AppendByte | تنمي السعة مرة واحدة وتلحق مصفوفات، أو مخازن يملكها المستدعي، أو عدة مصفوفات، أو بايتًا واحدًا مع فحوص التجاوز |
Wrap, WrapIdentifier, WrapConstructed | تغلف المحتوى بثمانية معرف خام، أو بأي صنف معرف ورقم وسم بعرض 64 بت، أو بمعرف مُنشَّأ |
ContextSpecific, ApplicationSpecific, PrivateSpecific | ترمِّز أرقام وسوم منخفضة أو عالية دون بتر المعرف |
Sequence, SequenceOf, SetOf, SetOfSorted | تؤلف القيم المرمَّزة كحاويات SEQUENCE أو SET؛ ويرتب SetOfSorted القيم حسب بايتاتها المرمَّزة |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | ترمِّز قيم BOOLEAN و INTEGER بإشارة أو بدونها، ومحتوى INTEGER بأي طول بعد التحقق منه، وقيم ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | ترمِّز قيم البيانات الثنائية وسلاسل البت و NULL ومعرفات الكائنات كـ TLVs مستقلة |
PrintableString, Ia5String, Utf8String | ترمِّز صور سلاسل المحارف المدعومة في ASN.1 |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | ترمِّز نصوص الوقت بصيغتها القانونية أو قيم TDateTime بتوقيت UTC، وينتقي TimeOf نوع وقت DER الصحيح |
AlgId, AlgIdWithParams | تبني SEQUENCE من نوع AlgorithmIdentifier مع NULL أو مع معاملات صريحة |
| الواجهة | الوصف |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | تهيئ قارئًا وتفحص نافذته المحدودة وعدد البايتات المتبقية |
TryReadTlvAt, PeekTlv | تحلل أرقام وسوم منخفضة أو عالية وأطوالًا محددة دنيا دون تغيير Position |
ReadNextTlv, SkipTlv | تتقدمان فقط بعد توفر TLV كامل صالح |
TryReadExpected | يتقدم فقط عندما تتطابق قيم الصنف والصيغة المُنشَّأة ورقم الوسم جميعها |
EnterConstructed | ينشئ نافذة قارئ ابنة فوق مصفوفة المصدر نفسها دون نسخ المحتوى |
ContentBytes, EncodedBytes | تنسخان شريحة محتوى مُتحقق منه أو TLV كاملة عندما يلزم امتلاك البيانات |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | تفك ترميز القيم الأولية بصيغتها القانونية مع فحوص المدى والبتات غير المستخدمة |
TryReadString, TryReadTime, TryReadNull | تفك ترميز محتوى UTF8String أو PrintableString أو IA5String أو وقت DER أو NULL بعد التحقق منه |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | توفر وصول توافقية إلى إزاحات TLV الخام إضافة إلى فك ترميز معرفات الكائنات والأعداد الصحيحة بإشارة |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
يفحص ValidateDer أقلية المعرف والطول، وحدود المخزن، والصور الأولية العامة، و BOOLEAN و INTEGER و ENUMERATED و BIT STRING و NULL و OBJECT IDENTIFIER، والسلاسل المدعومة، وقيم الوقت القانونية
تسمح الحدود الافتراضية بعمق أقصاه 64 و100000 عقدة و64 MiB لكل قيمة محتوى و32 خطأً مُبلَّغًا عنه، مع اشتراط جذر TLV واحد
تكون ValidateSetOrder معطلة افتراضيًا لأن DER الخالي من المخطط لا يستطيع تمييز كل SET عن SET OF؛ فعِّلها لحاويات 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 من الصنف ورقم الوسم وعلامة البناء، ويُستخدم لقيادة TDerReader.TryReadExpected |
EncodeIdentifier | يرمِّز TAsnIdentifier إلى بايتات معرفه بصيغة DER، بما في ذلك صيغة رقم الوسم العالي |
ConcatBytes, Concat3, Concat4, ConcatMany | تربط اثنين أو ثلاثة أو أربعة أو مصفوفة ديناميكية من TBytes في حجز واحد؛ وتُستخدم على نطاق واسع في باني CMS |
EncodeOIDContent | يرمِّز سلسلة OID عشرية منقوطة إلى بايتات محتواها دون الوسم والطول، فيستطيع المستدعون فحص 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 و TryReadInteger بإشارة متاحة للمستدعين الحاليينFPdfAsn1 إلى جانب وحدات PDFium Delphi Component الرئيسية