| Type | Description |
|---|---|
TAsnTag | Константи універсальних тегів (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, форми часу та рядків), які використовуються побудовою ідентифікаторів і перевіркою |
TAsnClass | Клас ідентифікатора: asnClassUniversal, asnClassApplication, asnClassContextSpecific або asnClassPrivate |
TAsnIdentifier | Клас ідентифікатора, прапорець constructed і номер тега 64 біти, включно з формою high-tag-number |
TDerTlv | Розібраний TLV з Offset, HeaderLength, ContentOffset, ContentLength, NextOffset і Identifier без копіювання вихідного буфера |
TDerWriter | Багаторазовий вихідний буфер DER і типізований кодувальник |
TDerReader | Обмежений читач із операціями peek, advance, skip, очікуваного тега, дочірнього вікна, зрізу та типізованого декодування |
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 |
| API | Description |
|---|---|
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 та ідентифікатори об'єктів як окремі TLV |
PrintableString, Ia5String, Utf8String | Кодує підтримувані форми рядків символів ASN.1 |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Кодує канонічний текст часу або значення UTC TDateTime, де TimeOf обирає правильний тип часу DER |
AlgId, AlgIdWithParams | Будує SEQUENCE AlgorithmIdentifier з NULL або явними параметрами |
| API | Description |
|---|---|
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;
| Function | Description |
|---|---|
AsnIdentifier | Будує TAsnIdentifier з класу, номера тега і прапорця constructed, використовується для керування TDerReader.TryReadExpected |
EncodeIdentifier | Кодує TAsnIdentifier у байти ідентифікатора DER, включно з формою high-tag-number |
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