| Type | Description |
|---|---|
TAsnTag | Univerzá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 |
TAsnClass | Azonosító osztály: asnClassUniversal, asnClassApplication, asnClassContextSpecific vagy asnClassPrivate |
TAsnIdentifier | Azonosító osztály, constructed jelző és 64 bites tag szám, a high-tag-number forma is ideértve |
TDerTlv | Feldolgozott 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ó |
TDerReader | Korlátos olvasó betekintő, előrelépő, átugró, várt-tag, gyerekablak, szeletelő és típusos dekódoló műveletekkel |
TDerByteArrays | TBytes é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 |
TDerValidationError | Eltolás- és Depth-tudatos hibarekord Kind mezővel és emberi olvasásra szánt üzenetszöveggel |
TDerValidationErrors | TDerValidationError értékek dinamikus tömbje, amelyet a TDerValidationResult ad vissza |
TDerValidationOptions | Korlá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 |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Visszaá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, AppendByte | Egyszer 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, WrapConstructed | Tartalmat 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, PrivateSpecific | Alacsony vagy magas tag számokat kódol az azonosító csonkítása nélkül |
Sequence, SequenceOf, SetOf, SetOfSorted | Kódolt értékeket komponál SEQUENCE vagy SET konténerbe; a SetOfSorted a kódolt bájtok szerint rendez |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | BOOLEAN, 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, OID | Bináris, bitsztring, NULL és objektumazonosító értékeket kódol önálló TLV-kként |
PrintableString, Ia5String, Utf8String | A támogatott ASN.1 karakterlánc-formákat kódolja |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Kanonikus időszöveget vagy UTC TDateTime értékeket kódol, a TimeOf pedig a helyes DER időtípust választja |
AlgId, AlgIdWithParams | AlgorithmIdentifier SEQUENCE-t épít NULL vagy explicit paraméterekkel |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Elő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, PeekTlv | Alacsony vagy magas tag számokat és minimális definite hosszakat dolgoz fel a Position módosítása nélkül |
ReadNextTlv, SkipTlv | Csak akkor lép előre, ha egy teljes érvényes TLV rendelkezésre áll |
TryReadExpected | Csak akkor lép előre, ha az osztály, a constructed forma és a tag szám is egyezik |
EnterConstructed | Gyerek olvasóablakot nyit ugyanazon forrástömb felett, tartalom másolása nélkül |
ContentBytes, EncodedBytes | Ellenőrzött tartalmat vagy teljes TLV szeletet másol, ha a tulajdonlás szükséges |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Kanonikus primitív értékeket dekódol tartomány- és használaton kívüli bit-ellenőrzéssel |
TryReadString, TryReadTime, TryReadNull | Ellenőrzött UTF8String, PrintableString, IA5String, DER idő vagy NULL tartalmat dekódol |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Kompatibilitá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 |
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
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 értéket épít osztályból, tag számból és constructed jelzőből; a TDerReader.TryReadExpected vezérlésére való |
EncodeIdentifier | Egy TAsnIdentifier értéket a DER azonosító bájtjaivá kódol, a high-tag-number formát is ideértve |
ConcatBytes, Concat3, Concat4, ConcatMany | Kettő, 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 |
EncodeOIDContent | Egy 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 |
DerValidationErrorKindName | Egy TDerValidationErrorKind megjelenítési nevét adja vissza diagnosztikához |
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 opcionális tört másodperceket csak akkor fogad el, ha az utolsó tört számjegy nem nullaReadTlv, a TryReadOID és az előjeles TryReadInteger a meglévő hívók kedvéért továbbra is elérhetőFPdfAsn1 egységet a fő PDFium Delphi Component egységekkel együtt exportálja