| Тип | Описание |
|---|---|
TAsnTag | Универсални tag константи (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, времеви и низови форми), използвани от изграждането и валидирането на идентификатори |
TAsnClass | Клас на идентификатора: asnClassUniversal, asnClassApplication, asnClassContextSpecific или asnClassPrivate |
TAsnIdentifier | Клас на идентификатора, флаг constructed и 64-битов tag номер, включително форма с high-tag-number |
TDerTlv | Анализиран TLV с Offset, HeaderLength, ContentOffset, ContentLength, NextOffset и Identifier, без копиране на изходния буфер |
TDerWriter | Многократно използваем изходен буфер за DER и типизиран енкодер |
TDerReader | Ограничен четец с операции peek, advance, skip, expected-tag, детски прозорец, slice и типизирано декодиране |
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 и class функцията Default |
TDerValidationResult | Статус на валидирането с IsValid, NodeCount, MaximumDepth, осъзнати за отместване Errors, плюс помощните ErrorCount и FirstError |
| API | Описание |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Нулира или инспектира буферираните данни, копира снимка или предава завършения масив и нулира писача |
Reserve, Append, AppendMany, AppendByte | Уголемява еднократно и добавя масиви, буфери, притежавани от извикващия, няколко масива или един байт с проверки за препълване |
Wrap, WrapIdentifier, WrapConstructed | Обвива съдържание със суров идентификационен октет, произволен клас идентификатор и 64-битов tag номер или constructed идентификатор |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Кодира ниски или високи tag номера, без да съкращава идентификатора |
Sequence, SequenceOf, SetOf, SetOfSorted | Комбинира кодирани стойности в SEQUENCE или SET контейнери; SetOfSorted сортира стойностите по кодираните им байтове |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Кодира BOOLEAN, INTEGER със знак или без знак, валидирано произволно INTEGER съдържание и стойности ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Кодира бинарни, bit-string, NULL и object identifier стойности като самостоятелни TLV |
PrintableString, Ia5String, Utf8String | Кодира поддържаните ASN.1 низови форми |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Кодира каноничен времеви текст или UTC стойности TDateTime, като TimeOf избира правилния DER времеви тип |
AlgId, AlgIdWithParams | Изгражда SEQUENCE от тип AlgorithmIdentifier с NULL или изрични параметри |
| API | Описание |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Инициализира четец и инспектира ограничения му прозорец и оставащ брой байтове |
TryReadTlvAt, PeekTlv | Анализира ниски или високи tag номера и минимални definite дължини, без да променя Position |
ReadNextTlv, SkipTlv | Напредва само след като е наличен пълен валиден TLV |
TryReadExpected | Напредва само когато клас, constructed форма и tag номер съвпадат едновременно |
EnterConstructed | Създава детски прозорец-четец върху същия изходен масив, без да копира съдържание |
ContentBytes, EncodedBytes | Копира валидирано съдържание или пълен TLV отрязък, когато се изисква притежание |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Декодира канонични примитивни стойности с проверки за диапазон и неизползвани битове |
TryReadString, TryReadTime, TryReadNull | Декодира валидирани UTF8String, PrintableString, IA5String, DER време или NULL съдържание |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Осигуряват съвместим достъп до сурови TLV отмествания плюс декодиране на object identifier и integer със знак |
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;
| Function | Описание |
|---|---|
AsnIdentifier | Изгражда TAsnIdentifier от клас, tag номер и флаг constructed; използва се за задвижване на TDerReader.TryReadExpected |
EncodeIdentifier | Кодира TAsnIdentifier в DER байтовете на идентификатора, включително форма с high-tag-number |
ConcatBytes, Concat3, Concat4, ConcatMany | Слепват два, три, четири или динамичен масив от TBytes в едно заделяне; използват се масово от CMS builder |
EncodeOIDContent | Кодира OID низ с точки в съдържателните му байтове, без 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 и TryReadInteger със знак остават налични за съществуващите извикващиFPdfAsn1 заедно с основните модули на PDFium Delphi Component