PDFium Delphi Component Docs

FPdfAsn1 Unité

Module: FPdfAsn1
Encode, navigue, décode et valide des données ASN.1 Distinguished Encoding Rules avec une utilisation bornée des ressources

Public Types

TypeDescription
TAsnTagConstantes de tags universels (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, formes temporelles et chaînes) utilisées par la construction et la validation d’identifiants
TAsnClassClasse d’identifiant : asnClassUniversal, asnClassApplication, asnClassContextSpecific ou asnClassPrivate
TAsnIdentifierClasse d’identifiant, indicateur construit et numéro de tag 64 bits, y compris la forme à numéro de tag élevé
TDerTlvTLV analysé avec Offset, HeaderLength, ContentOffset, ContentLength, NextOffset et Identifier sans copier le tampon source
TDerWriterTampon de sortie DER réutilisable et encodeur typé
TDerReaderLecteur borné avec opérations d’aperçu, d’avance, de saut, de tag attendu, de fenêtre enfant, de tranche et de décodage typé
TDerByteArraysTableau dynamique de TBytes utilisé par ConcatMany et les autres assistants multi-tampons
TDerValidationErrorKindCatégories d’erreurs de validation : dvekMalformedTlv, dvekTrailingData, limites de profondeur, de nœuds et de contenu (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, échecs canoniques par type (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) et dvekSetOrder
TDerValidationErrorEnregistrement d’erreur conscient des décalages et de Depth avec Kind et texte de message lisible
TDerValidationErrorsTableau dynamique de TDerValidationError renvoyé dans TDerValidationResult
TDerValidationOptionsLimites dans MaxDepth, MaxNodes, MaxContentLength, MaxErrors, l’indicateur RequireSingleRoot, le ValidateSetOrder facultatif et la fonction de classe Default
TDerValidationResultStatut de validation avec IsValid, NodeCount, MaximumDepth, Errors conscient des décalages, plus les assistants ErrorCount et FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishRéinitialise ou inspecte les données en mémoire tampon, copie un instantané ou transfère le tableau achevé et réinitialise le writer
Reserve, Append, AppendMany, AppendByteAgrandit une seule fois et ajoute des tableaux, des tampons détenus par l’appelant, plusieurs tableaux ou un octet avec vérifications de débordement
Wrap, WrapIdentifier, WrapConstructedEnveloppe le contenu avec un octet d’identifiant brut, une classe d’identifiant quelconque et un numéro de tag 64 bits, ou un identifiant construit
ContextSpecific, ApplicationSpecific, PrivateSpecificEncode des numéros de tags bas ou élevés sans tronquer l’identifiant
Sequence, SequenceOf, SetOf, SetOfSortedCompose des valeurs encodées en conteneurs SEQUENCE ou SET ; SetOfSorted trie les valeurs par octets encodés
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfEncode des valeurs BOOLEAN, INTEGER signés ou non signés, du contenu INTEGER arbitraire validé et ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDEncode des valeurs binaires, chaînes de bits, NULL et identifiants d’objet sous forme de TLV autonomes
PrintableString, Ia5String, Utf8StringEncode les formes de chaînes de caractères ASN.1 prises en charge
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfEncode du texte temporel canonique ou des valeurs TDateTime UTC, TimeOf sélectionnant le type de temps DER correct
AlgId, AlgIdWithParamsConstruit une SEQUENCE AlgorithmIdentifier avec des paramètres NULL ou explicites

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInitialise un lecteur et inspecte sa fenêtre bornée et son nombre d’octets restants
TryReadTlvAt, PeekTlvAnalyse des numéros de tags bas ou élevés et des longueurs définies minimales sans modifier Position
ReadNextTlv, SkipTlvAvance uniquement lorsqu’un TLV valide complet est disponible
TryReadExpectedAvance uniquement lorsque la classe, la forme construite et le numéro de tag correspondent tous
EnterConstructedCrée une fenêtre de lecteur enfant sur le même tableau source sans copier le contenu
ContentBytes, EncodedBytesCopie une tranche de contenu validée ou de TLV complet lorsque la propriété est requise
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDécode des valeurs primitives canoniques avec vérifications de plage et de bits inutilisés
TryReadString, TryReadTime, TryReadNullDécode du contenu UTF8String, PrintableString, IA5String, temps DER ou NULL validé
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerFournissent un accès de compatibilité aux décalages bruts de TLV ainsi qu’au décodage d’identifiants d’objet et d’entiers signés

Validation

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

ValidateDer vérifie la minimalité des identifiants et des longueurs, les bornes du tampon, les formes primitives universelles, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, les chaînes prises en charge et les valeurs temporelles canoniques

Les limites par défaut autorisent une profondeur maximale de 64, 100000 nœuds, 64 MiB par valeur de contenu et 32 erreurs signalées tout en exigeant un TLV racine unique

ValidateSetOrder est désactivé par défaut car un DER sans schéma ne peut distinguer chaque SET d’un SET OF ; activez-le pour les conteneurs SET OF connus tels que les collections d’attributs CMS

TDerValidationOptions.Default fournit les valeurs bornées par défaut, tandis que TDerValidationResult.ErrorCount et FirstError simplifient la gestion du diagnostic

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
AsnIdentifierConstruit un TAsnIdentifier à partir de la classe, du numéro de tag et de l’indicateur construit, utilisé pour piloter TDerReader.TryReadExpected
EncodeIdentifierEncode un TAsnIdentifier en ses octets d’identifiant DER, y compris la forme à numéro de tag élevé
ConcatBytes, Concat3, Concat4, ConcatManyConcatènent deux, trois, quatre ou un tableau dynamique de TBytes en une seule allocation ; largement utilisés par le constructeur CMS
EncodeOIDContentEncode une chaîne OID en décimal pointé en ses octets de contenu sans le tag ni la longueur, afin que les appelants puissent inspecter ou ré-envelopper un OID
DerValidationErrorKindNameRenvoie le nom d’affichage d’un TDerValidationErrorKind pour le diagnostic

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