PDFium Delphi Component Docs

FPdfAsn1 egység

Egység: FPdfAsn1
ASN.1 Distinguished Encoding Rules adatokat kódol, bejár, dekódol és érvényesít korlátos erőforrás-használattal

Public Types

TypeDescription
TAsnTagUniverzális tag konstansok (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, idő- és sztringformák), amelyeket az azonosító felépítése és érvényesítése használ
TAsnClassAzonosító osztály: asnClassUniversal, asnClassApplication, asnClassContextSpecific vagy asnClassPrivate
TAsnIdentifierAzonosító osztály, constructed jelző és 64 bites tag szám, a high-tag-number forma is ideértve
TDerTlvFeldolgozott TLV Offset, HeaderLength, ContentOffset, ContentLength, NextOffset és Identifier mezőkkel, a forráspuffer másolása nélkül
TDerWriterÚjrafelhasználható DER kimeneti puffer és típusos kódoló
TDerReaderKorlátos olvasó betekintő, előrelépő, átugró, várt-tag, gyerekablak, szeletelő és típusos dekódoló műveletekkel
TDerByteArraysTBytes értékek dinamikus tömbje, amelyet a ConcatMany és a többi többpufferes segéd használ
TDerValidationErrorKindÉrvényesítési hibakategóriák: dvekMalformedTlv, dvekTrailingData, mélységi, csomóponti és tartalmi korlátok (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, típusonkénti kanonikus hibák (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) és dvekSetOrder
TDerValidationErrorEltolás- és Depth-tudatos hibarekord Kind mezővel és emberi olvasásra szánt üzenetszöveggel
TDerValidationErrorsTDerValidationError értékek dinamikus tömbje, amelyet a TDerValidationResult ad vissza
TDerValidationOptionsKorlátok a MaxDepth, MaxNodes, MaxContentLength és MaxErrors mezőkben, a RequireSingleRoot jelző, az opcionális ValidateSetOrder és a Default osztályfüggvény
TDerValidationResultÉrvényesítési állapot IsValid, NodeCount, MaximumDepth és eltolástudatos Errors mezőkkel, ErrorCount és FirstError segédekkel

Író API-k

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishVisszaállítja vagy megvizsgálja a pufferelt adatot, pillanatfelvételt másol, vagy átadja a kész tömböt és visszaállítja az írót
Reserve, Append, AppendMany, AppendByteEgyszer növeszt, majd túlcsordulás-ellenőrzéssel fűz hozzá tömböket, hívói buffereket, több tömböt vagy egy bájtot
Wrap, WrapIdentifier, WrapConstructedTartalmat csomagol be nyers azonosító oktettbe, tetszőleges azonosító osztállyal és 64 bites tag számmal, illetve constructed azonosítóval
ContextSpecific, ApplicationSpecific, PrivateSpecificAlacsony vagy magas tag számokat kódol az azonosító csonkítása nélkül
Sequence, SequenceOf, SetOf, SetOfSortedKódolt értékeket komponál SEQUENCE vagy SET konténerbe; a SetOfSorted a kódolt bájtok szerint rendez
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfBOOLEAN, előjeles vagy előjel nélküli INTEGER, ellenőrzött tetszőleges INTEGER tartalom és ENUMERATED értékeket kódol
OctetString, OctetStringOf, BitString, Null, OIDBináris, bitsztring, NULL és objektumazonosító értékeket kódol önálló TLV-kként
PrintableString, Ia5String, Utf8StringA támogatott ASN.1 karakterlánc-formákat kódolja
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKanonikus időszöveget vagy UTC TDateTime értékeket kódol, a TimeOf pedig a helyes DER időtípust választja
AlgId, AlgIdWithParamsAlgorithmIdentifier SEQUENCE-t épít NULL vagy explicit paraméterekkel

Olvasó API-k

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingElőkészíti az olvasót, és megvizsgálja annak korlátos ablakát és a hátralévő bájtok számát
TryReadTlvAt, PeekTlvAlacsony vagy magas tag számokat és minimális definite hosszakat dolgoz fel a Position módosítása nélkül
ReadNextTlv, SkipTlvCsak akkor lép előre, ha egy teljes érvényes TLV rendelkezésre áll
TryReadExpectedCsak akkor lép előre, ha az osztály, a constructed forma és a tag szám is egyezik
EnterConstructedGyerek olvasóablakot nyit ugyanazon forrástömb felett, tartalom másolása nélkül
ContentBytes, EncodedBytesEllenőrzött tartalmat vagy teljes TLV szeletet másol, ha a tulajdonlás szükséges
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringKanonikus primitív értékeket dekódol tartomány- és használaton kívüli bit-ellenőrzéssel
TryReadString, TryReadTime, TryReadNullEllenőrzött UTF8String, PrintableString, IA5String, DER idő vagy NULL tartalmat dekódol
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerKompatibilitási hozzáférést ad a nyers TLV eltolásokhoz, valamint az objektumazonosító és az előjeles egész dekódolásához

Érvényesítés

function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;

A ValidateDer ellenőrzi az azonosító és a hossz minimálisságát, a pufferhatárokat, az univerzális primitív formákat, a BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, támogatott sztring és kanonikus idő értékeket

Az alapértelmezett korlátok legfeljebb 64 mélységet, 100000 csomópontot, tartalomértékenként 64 MiB-ot és 32 jelentett hibát engednek, miközben egyetlen gyökér-TLV-t követelnek meg

A ValidateSetOrder alapból ki van kapcsolva, mert a séma nélküli DER nem minden SET-et tud megkülönböztetni a SET OF-tól; ismert SET OF konténereknél, például CMS attribútumgyűjteményeknél érdemes bekapcsolni

A TDerValidationOptions.Default szolgáltatja a korlátos alapértékeket, a TDerValidationResult.ErrorCount és a FirstError pedig megkönnyíti a diagnosztikát

Nyilvános segédfüggvények

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;

FunctionDescription
AsnIdentifierTAsnIdentifier értéket épít osztályból, tag számból és constructed jelzőből; a TDerReader.TryReadExpected vezérlésére való
EncodeIdentifierEgy TAsnIdentifier értéket a DER azonosító bájtjaivá kódol, a high-tag-number formát is ideértve
ConcatBytes, Concat3, Concat4, ConcatManyKettő, három, négy TBytes értéket vagy egy dinamikus tömböt egyetlen lefoglalásban fűz össze; a CMS építő széles körben használja
EncodeOIDContentEgy pontozott decimális OID sztringet a tartalombájtjaivá kódol tag és hossz nélkül, így a hívók megvizsgálhatnak vagy újracsomagolhatnak egy OID-t
DerValidationErrorKindNameEgy TDerValidationErrorKind megjelenítési nevét adja vissza diagnosztikához

Example

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;

Remarks