| Type | Description |
|---|---|
TAsnTag | Univerzalne tag konstante (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, vremenski i string oblici) koje koriste izgradnja i validacija identifikatora |
TAsnClass | Klasa identifikatora: asnClassUniversal, asnClassApplication, asnClassContextSpecific ili asnClassPrivate |
TAsnIdentifier | Klasa identifikatora, constructed zastavica i 64-bitni broj taga, uključujući high-tag-number oblik |
TDerTlv | Parsovan TLV sa Offset, HeaderLength, ContentOffset, ContentLength, NextOffset i Identifier bez kopiranja izvornog bafera |
TDerWriter | Višekratno upotrebljiv DER izlazni bafer i tipizani enkoder |
TDerReader | Ograničen čitač sa peek, advance, skip, expected-tag, child-window, slice i tipizanim decode operacijama |
TDerByteArrays | Dinamički niz TBytes koji koriste ConcatMany i ostali višebaferni pomoćnici |
TDerValidationErrorKind | Kategorije grešaka validacije: dvekMalformedTlv, dvekTrailingData, limiti dubine, čvorova i sadržaja (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, kanonski neuspesi po tipu (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) i dvekSetOrder |
TDerValidationError | Zapis greške svestan ofseta i Depth-a sa Kind i tekstom poruke čitljivim za ljude |
TDerValidationErrors | Dinamički niz TDerValidationError vrednosti koji se vraća unutar TDerValidationResult |
TDerValidationOptions | Limiti u MaxDepth, MaxNodes, MaxContentLength, MaxErrors, zastavica RequireSingleRoot, opciona ValidateSetOrder i class funkcija Default |
TDerValidationResult | Status validacije sa IsValid, NodeCount, MaximumDepth, Errors svestnim ofseta, plus pomoćnici ErrorCount i FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Resetuju ili ispituju baferovane podatke, kopiraju snimak ili prenose završen niz i resetuju writer |
Reserve, Append, AppendMany, AppendByte | Proširuju jednom i dopisuju nizove, baferove u vlasništvu pozivaoca, više nizova ili jedan bajt sa proverama prekoračenja |
Wrap, WrapIdentifier, WrapConstructed | Omatavaju sadržaj sirovim oktetom identifikatora, bilo kojom klasom identifikatora i 64-bitnim brojem taga ili constructed identifikatorom |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Koduju niske ili visoke brojeve tagova bez skraćivanja identifikatora |
Sequence, SequenceOf, SetOf, SetOfSorted | Komponuju kodovane vrednosti kao SEQUENCE ili SET kontejnere; SetOfSorted sortira vrednosti po kodovanim bajtovima |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Koduju BOOLEAN, signed ili unsigned INTEGER, validiran proizvoljan INTEGER sadržaj i ENUMERATED vrednosti |
OctetString, OctetStringOf, BitString, Null, OID | Koduju binarne, bit-string, NULL i object identifier vrednosti kao samostalne TLV-ove |
PrintableString, Ia5String, Utf8String | Koduju podržane ASN.1 oblike znakovnih stringova |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Koduju kanonski vremenski tekst ili UTC TDateTime vrednosti, pri čemu TimeOf bira ispravan DER vremenski tip |
AlgId, AlgIdWithParams | Grade AlgorithmIdentifier SEQUENCE sa NULL ili eksplicitnim parametrima |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inicijalizuju čitač i ispituju njegov ograničen prozor i preostali broj bajtova |
TryReadTlvAt, PeekTlv | Parsoju niske ili visoke brojeve tagova i minimalne definite dužine bez promene Position |
ReadNextTlv, SkipTlv | Napreduju samo kada je kompletan validan TLV dostupan |
TryReadExpected | Napreduje samo kada se klasa, constructed oblik i broj taga svi poklope |
EnterConstructed | Kreira prozor podređenog čitača nad istim izvornim nizom bez kopiranja sadržaja |
ContentBytes, EncodedBytes | Kopiraju validiran sadržaj ili kompletan TLV isečak kada je potrebno vlasništvo |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Dekoduju kanonske primitivne vrednosti sa proverama opsega i neiskorišćenih bitova |
TryReadString, TryReadTime, TryReadNull | Dekoduju validirane UTF8String, PrintableString, IA5String, DER time ili NULL sadržaje |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Pružaju kompatibilan pristup sirovim TLV ofsetima plus dekodovanje object identifier i signed integer vrednosti |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer proverava minimalnost identifikatora i dužine, granice bafera, univerzalne primitivne oblike, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, podržane stringove i kanonske vremenske vrednosti
Podrazumevani limiti dozvoljavaju maksimalnu dubinu 64, 100000 čvorova, 64 MiB po vrednosti sadržaja i 32 prijavljene greške, uz zahtev za jednim korenim TLV-om
ValidateSetOrder je podrazumevano onemogućen jer DER bez šeme ne može da razlikuje svaki SET od SET OF; omogućite ga za poznate SET OF kontejnere kao što su CMS kolekcije atributa
TDerValidationOptions.Default dostavlja ograničene podrazumevane vrednosti, dok TDerValidationResult.ErrorCount i FirstError pojednostavljuju dijagnostičku obradu
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 | Gradi TAsnIdentifier iz klase, broja taga i constructed zastavice; koristi se za pokretanje TDerReader.TryReadExpected |
EncodeIdentifier | Koduje TAsnIdentifier u njegove DER bajtove identifikatora, uključujući high-tag-number oblik |
ConcatBytes, Concat3, Concat4, ConcatMany | Spajaju dva, tri, četiri ili dinamički niz TBytes vrednosti u jednu alokaciju; široko ih koristi CMS builder |
EncodeOIDContent | Koduje tačkasto-decimalni OID string u njegove bajtove sadržaja bez taga i dužine, tako da pozivaoci mogu da ispitaju ili ponovo omotaju OID |
DerValidationErrorKindName | Vraća ime za prikaz TDerValidationErrorKind vrednosti za dijagnostiku |
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 prihvata opcione razlomljene sekunde samo kada poslednja razlomljena cifra nije nulaReadTlv, TryReadOID i signed TryReadInteger ostaju dostupni postojećim pozivaocimaFPdfAsn1 zajedno sa glavnim jedinicama PDFium Delphi Component