| Type | Description |
|---|---|
TAsnTag | Các hằng tag universal (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, các dạng thời gian và chuỗi) dùng trong việc dựng và kiểm tra identifier |
TAsnClass | Lớp identifier: asnClassUniversal, asnClassApplication, asnClassContextSpecific hoặc asnClassPrivate |
TAsnIdentifier | Lớp identifier, cờ constructed và số tag 64-bit, bao gồm cả dạng high-tag-number |
TDerTlv | TLV đã parse với Offset, HeaderLength, ContentOffset, ContentLength, NextOffset và Identifier mà không sao chép buffer nguồn |
TDerWriter | Buffer đầu ra DER dùng lại được cùng bộ mã hóa có kiểu |
TDerReader | Reader có giới hạn với các thao tác peek, advance, skip, expected-tag, cửa sổ con, slice và giải mã có kiểu |
TDerByteArrays | Mảng động của TBytes dùng bởi ConcatMany và các helper đa buffer khác |
TDerValidationErrorKind | Các nhóm lỗi kiểm tra: dvekMalformedTlv, dvekTrailingData, các giới hạn depth, node và content (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, các thất bại canonical theo từng kiểu (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) và dvekSetOrder |
TDerValidationError | Record lỗi có Depth và offset, với Kind và nội dung thông báo dễ đọc |
TDerValidationErrors | Mảng động của TDerValidationError được trả về bên trong TDerValidationResult |
TDerValidationOptions | Các giới hạn trong MaxDepth, MaxNodes, MaxContentLength, MaxErrors, cờ RequireSingleRoot, ValidateSetOrder tùy chọn và class function Default |
TDerValidationResult | Trạng thái kiểm tra với IsValid, NodeCount, MaximumDepth, Errors có kèm offset, cùng các helper ErrorCount và FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Reset hoặc xem dữ liệu đang đệm, sao chép một ảnh chụp, hoặc bàn giao mảng hoàn tất và reset writer |
Reserve, Append, AppendMany, AppendByte | Mở rộng một lần và nối các mảng, buffer thuộc sở hữu người gọi, nhiều mảng hoặc một byte với kiểm tra tràn |
Wrap, WrapIdentifier, WrapConstructed | Bao nội dung bằng một octet identifier thô, một lớp identifier và số tag 64-bit bất kỳ, hoặc một identifier constructed |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Mã hóa số tag thấp hoặc cao mà không cắt xén identifier |
Sequence, SequenceOf, SetOf, SetOfSorted | Ghép các giá trị đã mã hóa thành container SEQUENCE hoặc SET; SetOfSorted sắp các giá trị theo byte đã mã hóa |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Mã hóa BOOLEAN, INTEGER có dấu hoặc không dấu, nội dung INTEGER tùy ý đã kiểm chứng, và ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Mã hóa các giá trị nhị phân, bit-string, NULL và object identifier thành TLV độc lập |
PrintableString, Ia5String, Utf8String | Mã hóa các dạng chuỗi ký tự ASN.1 được hỗ trợ |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Mã hóa văn bản thời gian canonical hoặc giá trị UTC TDateTime, với TimeOf chọn đúng kiểu thời gian DER |
AlgId, AlgIdWithParams | Dựng một SEQUENCE AlgorithmIdentifier với tham số NULL hoặc tường minh |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Khởi tạo reader và xem cửa sổ có giới hạn cùng số byte còn lại của nó |
TryReadTlvAt, PeekTlv | Parse số tag thấp hoặc cao và chiều dài definite tối thiểu mà không đổi Position |
ReadNextTlv, SkipTlv | Chỉ tiến lên sau khi một TLV hoàn chỉnh và hợp lệ sẵn sàng |
TryReadExpected | Chỉ tiến lên khi lớp, dạng constructed và số tag đều khớp |
EnterConstructed | Tạo một cửa sổ reader con trên cùng mảng nguồn mà không sao chép nội dung |
ContentBytes, EncodedBytes | Sao chép một slice content đã kiểm chứng hoặc TLV hoàn chỉnh khi cần sở hữu dữ liệu |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Giải mã các giá trị primitive canonical với kiểm tra phạm vi và bit-unused |
TryReadString, TryReadTime, TryReadNull | Giải mã nội dung UTF8String, PrintableString, IA5String, thời gian DER hoặc NULL đã kiểm chứng |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Cung cấp đường truy cập tương thích tới các offset TLV thô cùng giải mã object identifier và số nguyên có dấu |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer kiểm tra tính tối thiểu của identifier và chiều dài, biên buffer, các dạng primitive universal, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, các chuỗi được hỗ trợ và giá trị thời gian canonical
Giới hạn mặc định cho phép depth tối đa 64, 100000 node, 64 MiB mỗi giá trị content và 32 lỗi được báo cáo, đồng thời yêu cầu đúng một TLV gốc
ValidateSetOrder mặc định bị tắt vì DER không có schema không thể phân biệt mọi SET với SET OF; hãy bật nó cho các container SET OF đã biết như tập thuộc tính của CMS
TDerValidationOptions.Default cung cấp các mặc định có giới hạn, còn TDerValidationResult.ErrorCount và FirstError giúp xử lý chẩn đoán đơn giản hơn
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 | Dựng một TAsnIdentifier từ lớp, số tag và cờ constructed, dùng để điều phối TDerReader.TryReadExpected |
EncodeIdentifier | Mã hóa một TAsnIdentifier thành các byte identifier DER, bao gồm cả dạng high-tag-number |
ConcatBytes, Concat3, Concat4, ConcatMany | Nối hai, ba, bốn hoặc một mảng động các TBytes thành một vùng cấp phát; được trình dựng CMS dùng rộng rãi |
EncodeOIDContent | Mã hóa chuỗi OID dạng chấm-thập phân thành các byte nội dung không kèm tag và chiều dài, để người gọi có thể xem lại hoặc bao lại một OID |
DerValidationErrorKindName | Trả về tên hiển thị của một TDerValidationErrorKind phục vụ chẩn đoán |
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 chỉ chấp nhận phần giây thập phân tùy chọn khi chữ số thập phân cuối khác khôngReadTlv, TryReadOID và TryReadInteger có dấu vẫn còn cho các caller hiện hữuFPdfAsn1 cùng với các unit chính của PDFium Delphi Component