PDFium Delphi Component Docs

FPdfAsn1 birimi

Unit: FPdfAsn1
ASN.1 Distinguished Encoding Rules verisini sınırlı kaynak kullanımıyla kodlar, gezer, çözer ve doğrular

Public Types

TypeDescription
TAsnTagTanımlayıcı oluşturma ve doğrulamada kullanılan evrensel tag sabitleri (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, zaman ve dize biçimleri)
TAsnClassTanımlayıcı sınıfı: asnClassUniversal, asnClassApplication, asnClassContextSpecific veya asnClassPrivate
TAsnIdentifierTanımlayıcı sınıfı, constructed bayrağı ve high-tag-number formu dahil 64 bitlik tag numarası
TDerTlvKaynak tamponu kopyalamadan Offset, HeaderLength, ContentOffset, ContentLength, NextOffset ve Identifier alanlarını taşıyan ayrıştırılmış TLV
TDerWriterYeniden kullanılabilir DER çıktı tamponu ve türlü kodlayıcı
TDerReaderPeek, ilerleme, atlama, beklenen tag, alt pencere, dilim ve türlü çözme işlemleri sunan sınırlı okuyucu
TDerByteArraysConcatMany ve diğer çoklu tampon yardımcılarının kullandığı TBytes dinamik dizisi
TDerValidationErrorKindDoğrulama hata kategorileri: dvekMalformedTlv, dvekTrailingData, derinlik, düğüm ve içerik limitleri (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, türe özgü kanonik hatalar (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) ve dvekSetOrder
TDerValidationErrorUzaklık ve Depth bilgisi taşıyan, Kind ile insan okunur ileti metnine sahip hata kaydı
TDerValidationErrorsTDerValidationResult içinde döndürülen TDerValidationError dinamik dizisi
TDerValidationOptionsMaxDepth, MaxNodes, MaxContentLength, MaxErrors limitleri, RequireSingleRoot bayrağı, isteğe bağlı ValidateSetOrder ve Default class function
TDerValidationResultIsValid, NodeCount, MaximumDepth ve uzaklık bilgisi içeren Errors alanlarıyla doğrulama durumu; ayrıca ErrorCount ve FirstError yardımcıları

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishTampon veriyi sıfırlar ya da inceler, bir anlık görüntü kopyalar veya tamamlanmış diziyi devredip yazıcıyı sıfırlar
Reserve, Append, AppendMany, AppendByteTek seferde büyür ve taşma kontrolleriyle dizi, çağıranın sahip olduğu tamponlar, birden çok dizi ya da tek bir bayt ekler
Wrap, WrapIdentifier, WrapConstructedİçeriği ham bir tanımlayıcı oktetiyle, herhangi bir tanımlayıcı sınıfı ve 64 bitlik tag numarasıyla ya da bir constructed tanımlayıcıyla sarar
ContextSpecific, ApplicationSpecific, PrivateSpecificTanımlayıcıyı kesmeden düşük ya da yüksek tag numaralarını kodlar
Sequence, SequenceOf, SetOf, SetOfSortedKodlanmış değerleri SEQUENCE ya da SET kapsayıcıları olarak birleştirir; SetOfSorted değerleri kodlanmış baytlara göre sıralar
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfBOOLEAN, işaretli veya işaretsiz INTEGER, doğrulanmış keyfi INTEGER içeriği ve ENUMERATED değerlerini kodlar
OctetString, OctetStringOf, BitString, Null, OIDİkili, bit dizisi, NULL ve nesne tanımlayıcı değerlerini bağımsız TLV'ler olarak kodlar
PrintableString, Ia5String, Utf8StringDesteklenen ASN.1 karakter dizesi biçimlerini kodlar
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfKanonik zaman metnini ya da UTC TDateTime değerlerini kodlar; TimeOf doğru DER zaman türünü seçer
AlgId, AlgIdWithParamsNULL ya da açık parametrelerle bir AlgorithmIdentifier SEQUENCE kurar

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingBir okuyucuyu başlatır ve sınırlı penceresini ile kalan bayt sayısını inceler
TryReadTlvAt, PeekTlvPosition değerini değiştirmeden düşük ya da yüksek tag numaralarını ve en kısa definite uzunlukları ayrıştırır
ReadNextTlv, SkipTlvYalnızca eksiksiz geçerli bir TLV mevcutken ilerler
TryReadExpectedYalnızca sınıf, constructed form ve tag numarasının tümü eşleştiğinde ilerler
EnterConstructedİçeriği kopyalamadan aynı kaynak dizi üzerinde bir alt okuyucu penceresi açar
ContentBytes, EncodedBytesSahiplik gerektiğinde doğrulanmış içerik ya da eksiksiz TLV dilimini kopyalar
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringAralık ve kullanılmayan bit kontrolleriyle kanonik ilkel değerleri çözer
TryReadString, TryReadTime, TryReadNullDoğrulanmış UTF8String, PrintableString, IA5String, DER zamanı ya da NULL içeriğini çözer
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerHam TLV uzaklıklarına uyumluluk erişimi sunar; ayrıca nesne tanımlayıcı ve işaretli tam sayı çözmeyi sağlar

Validation

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

ValidateDer, tanımlayıcı ve uzunluk en azlığını, tampon sınırlarını, evrensel ilkel biçimleri, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, desteklenen dize türlerini ve kanonik zaman değerlerini denetler

Varsayılan limitler tek bir kök TLV zorunluluğuyla en çok 64 derinlik, 100000 düğüm, içerik değeri başına 64 MiB ve 32 raporlanan hataya izin verir

ValidateSetOrder varsayılan olarak devre dışıdır, çünkü şemasız DER her SET ile SET OF ayrımını yapamaz; CMS öznitelik koleksiyonları gibi bilinen SET OF kapsayıcıları için etkinleştirin

TDerValidationOptions.Default sınırlı varsayılanları sağlar; TDerValidationResult.ErrorCount ve FirstError ise tanılama işlemlerini basitleştirir

Public helper functions

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
AsnIdentifierSınıf, tag numarası ve constructed bayrağından bir TAsnIdentifier kurar; TDerReader.TryReadExpected çağrılarını yönlendirmek için kullanılır
EncodeIdentifierBir TAsnIdentifier değerini high-tag-number formu dahil DER tanımlayıcı baytlarına kodlar
ConcatBytes, Concat3, Concat4, ConcatManyİki, üç, dört ya da dinamik bir TBytes dizisini tek bir tahsis içinde birleştirir; CMS oluşturucusunda yoğun biçimde kullanılır
EncodeOIDContentNoktalı ondalık bir OID dizesini tag ve uzunluk olmadan içerik baytlarına kodlar; böylece çağıranlar bir OID'yi inceleyebilir ya da yeniden sarabilir
DerValidationErrorKindNameTanılama için bir TDerValidationErrorKind görünen adını döndürür

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