| Type | Description |
|---|---|
TAsnTag | Uniwersalne stałe tagów (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, formy czasowe i łańcuchowe) używane przy konstruowaniu i walidacji identyfikatorów |
TAsnClass | Klasa identyfikatora: asnClassUniversal, asnClassApplication, asnClassContextSpecific lub asnClassPrivate |
TAsnIdentifier | Klasa identyfikatora, flaga skonstruowania i 64-bitowy numer tagu, łącznie z formą high-tag-number |
TDerTlv | Sparsowane TLV z Offset, HeaderLength, ContentOffset, ContentLength, NextOffset i Identifier bez kopiowania bufora źródłowego |
TDerWriter | Wielokrotnego użytku bufor wyjściowy DER i typowany koder |
TDerReader | Ograniczony czytnik z operacjami podejrzenia, przesunięcia, pominięcia, oczekiwanego tagu, okna potomnego, wycinka i typowanego dekodowania |
TDerByteArrays | Tablica dynamiczna TBytes używana przez ConcatMany i inne pomocniki wielobuforowe |
TDerValidationErrorKind | Kategorie błędów walidacji: dvekMalformedTlv, dvekTrailingData, limity głębokości, węzłów i treści (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, per typ canonical niepowodzenia (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) oraz dvekSetOrder |
TDerValidationError | Rekord błędu świadomy offsetu i Depth z Kind i komunikatem czytelnym dla człowieka |
TDerValidationErrors | Tablica dynamiczna TDerValidationError zwracana wewnątrz TDerValidationResult |
TDerValidationOptions | Limity w MaxDepth, MaxNodes, MaxContentLength, MaxErrors, flaga RequireSingleRoot, opcjonalne ValidateSetOrder oraz funkcja klasowa Default |
TDerValidationResult | Status walidacji z IsValid, NodeCount, MaximumDepth, świadomymi offsetu Errors, a także pomocnikami ErrorCount i FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Resetują lub inspekcjonują dane buforowane, kopiują migawkę albo przekazują ukończoną tablicę i resetują pisarza |
Reserve, Append, AppendMany, AppendByte | Rosną raz i dopisują tablice, bufory należące do wywołującego, wiele tablic lub jeden bajt z kontrolą przepełnienia |
Wrap, WrapIdentifier, WrapConstructed | Owijają treść surowym oktetem identyfikatora, dowolną klasą identyfikatora i 64-bitowym numerem tagu albo identyfikatorem skonstruowanym |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Kodują niskie lub wysokie numery tagów bez obcinania identyfikatora |
Sequence, SequenceOf, SetOf, SetOfSorted | Komponują zakodowane wartości w kontenery SEQUENCE lub SET; SetOfSorted sortuje wartości po zakodowanych bajtach |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Kodują BOOLEAN, INTEGER ze znakiem lub bez, walidowaną dowolną treść INTEGER oraz wartości ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Kodują wartości binarne, bit-string, NULL i identyfikatory obiektów jako samodzielne TLV |
PrintableString, Ia5String, Utf8String | Kodują obsługiwane formy łańcuchów znaków ASN.1 |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Kodują kanoniczny tekst czasu lub wartości UTC TDateTime, przy czym TimeOf wybiera właściwy typ czasu DER |
AlgId, AlgIdWithParams | Budują SEQUENCE AlgorithmIdentifier z parametrami NULL lub jawnymi |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inicjalizują czytnik i inspekcjonują jego ograniczone okno oraz liczbę pozostałych bajtów |
TryReadTlvAt, PeekTlv | Parsują niskie lub wysokie numery tagów i minimalne długości określone bez zmiany Position |
ReadNextTlv, SkipTlv | Przesuwają się dopiero, gdy dostępne jest kompletne poprawne TLV |
TryReadExpected | Przesuwa się tylko wtedy, gdy klasa, forma skonstruowana i numer tagu wszystkie pasują |
EnterConstructed | Tworzy potomne okno czytnika nad tą samą tablicą źródłową bez kopiowania treści |
ContentBytes, EncodedBytes | Kopiują walidowany wycinek treści lub całego TLV, gdy wymagana jest własność danych |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Dekodują kanoniczne wartości prymitywne z kontrolą zakresu i nieużywanych bitów |
TryReadString, TryReadTime, TryReadNull | Dekodują walidowaną treść UTF8String, PrintableString, IA5String, czasu DER lub NULL |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Zapewniają kompatybilny dostęp do surowych offsetów TLV oraz dekodowanie identyfikatorów obiektów i liczb całkowitych ze znakiem |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer sprawdza minimalność identyfikatorów i długości, granice bufora, uniwersalne formy prymitywów, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, obsługiwane łańcuchy oraz kanoniczne wartości czasu
Domyślne limity pozwalają na maksymalną głębokość 64, 100000 węzłów, 64 MiB na wartość treści i 32 raportowane błędy, wymagając jednego głównego TLV
ValidateSetOrder jest domyślnie wyłączone, bo DER bez schematu nie odróżni każdego SET od SET OF; włącz je dla znanych kontenerów SET OF, takich jak kolekcje atrybutów CMS
TDerValidationOptions.Default dostarcza ograniczone wartości domyślne, a TDerValidationResult.ErrorCount i FirstError upraszczają obsługę diagnostyki
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 | Buduje TAsnIdentifier z klasy, numeru tagu i flagi skonstruowania, używane do sterowania TDerReader.TryReadExpected |
EncodeIdentifier | Koduje TAsnIdentifier na jego bajty identyfikatora DER, łącznie z formą high-tag-number |
ConcatBytes, Concat3, Concat4, ConcatMany | Łączą dwie, trzy, cztery lub tablicę dynamiczną TBytes w jedną alokację; szeroko używane przez kreatora CMS |
EncodeOIDContent | Koduje łańcuch OID w postaci kropkowej na bajty treści bez tagu i długości, więc wywołujący może zinspekcjonować lub ponownie owinąć OID |
DerValidationErrorKindName | Zwraca nazwę wyświetlaną TDerValidationErrorKind na potrzeby diagnostyki |
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 akceptuje opcjonalne ułamkowe sekundy tylko wtedy, gdy ostatnia cyfra ułamka jest niezerowaReadTlv, TryReadOID i ze znakiem TryReadInteger pozostają dostępne dla istniejących wywołującychFPdfAsn1 obok głównych modułów komponentu