| Type | Description |
|---|---|
TAsnTag | Constantes 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 |
TAsnClass | Classe d’identifiant : asnClassUniversal, asnClassApplication, asnClassContextSpecific ou asnClassPrivate |
TAsnIdentifier | Classe d’identifiant, indicateur construit et numéro de tag 64 bits, y compris la forme à numéro de tag élevé |
TDerTlv | TLV analysé avec Offset, HeaderLength, ContentOffset, ContentLength, NextOffset et Identifier sans copier le tampon source |
TDerWriter | Tampon de sortie DER réutilisable et encodeur typé |
TDerReader | Lecteur 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é |
TDerByteArrays | Tableau dynamique de TBytes utilisé par ConcatMany et les autres assistants multi-tampons |
TDerValidationErrorKind | Caté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 |
TDerValidationError | Enregistrement d’erreur conscient des décalages et de Depth avec Kind et texte de message lisible |
TDerValidationErrors | Tableau dynamique de TDerValidationError renvoyé dans TDerValidationResult |
TDerValidationOptions | Limites dans MaxDepth, MaxNodes, MaxContentLength, MaxErrors, l’indicateur RequireSingleRoot, le ValidateSetOrder facultatif et la fonction de classe Default |
TDerValidationResult | Statut de validation avec IsValid, NodeCount, MaximumDepth, Errors conscient des décalages, plus les assistants ErrorCount et FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Ré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, AppendByte | Agrandit 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, WrapConstructed | Enveloppe 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, PrivateSpecific | Encode des numéros de tags bas ou élevés sans tronquer l’identifiant |
Sequence, SequenceOf, SetOf, SetOfSorted | Compose des valeurs encodées en conteneurs SEQUENCE ou SET ; SetOfSorted trie les valeurs par octets encodés |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Encode des valeurs BOOLEAN, INTEGER signés ou non signés, du contenu INTEGER arbitraire validé et ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Encode des valeurs binaires, chaînes de bits, NULL et identifiants d’objet sous forme de TLV autonomes |
PrintableString, Ia5String, Utf8String | Encode les formes de chaînes de caractères ASN.1 prises en charge |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Encode du texte temporel canonique ou des valeurs TDateTime UTC, TimeOf sélectionnant le type de temps DER correct |
AlgId, AlgIdWithParams | Construit une SEQUENCE AlgorithmIdentifier avec des paramètres NULL ou explicites |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Initialise un lecteur et inspecte sa fenêtre bornée et son nombre d’octets restants |
TryReadTlvAt, PeekTlv | Analyse des numéros de tags bas ou élevés et des longueurs définies minimales sans modifier Position |
ReadNextTlv, SkipTlv | Avance uniquement lorsqu’un TLV valide complet est disponible |
TryReadExpected | Avance uniquement lorsque la classe, la forme construite et le numéro de tag correspondent tous |
EnterConstructed | Crée une fenêtre de lecteur enfant sur le même tableau source sans copier le contenu |
ContentBytes, EncodedBytes | Copie une tranche de contenu validée ou de TLV complet lorsque la propriété est requise |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Décode des valeurs primitives canoniques avec vérifications de plage et de bits inutilisés |
TryReadString, TryReadTime, TryReadNull | Décode du contenu UTF8String, PrintableString, IA5String, temps DER ou NULL validé |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Fournissent 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 |
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
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 | Construit un TAsnIdentifier à partir de la classe, du numéro de tag et de l’indicateur construit, utilisé pour piloter TDerReader.TryReadExpected |
EncodeIdentifier | Encode un TAsnIdentifier en ses octets d’identifiant DER, y compris la forme à numéro de tag élevé |
ConcatBytes, Concat3, Concat4, ConcatMany | Concatènent deux, trois, quatre ou un tableau dynamique de TBytes en une seule allocation ; largement utilisés par le constructeur CMS |
EncodeOIDContent | Encode 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 |
DerValidationErrorKindName | Renvoie le nom d’affichage d’un TDerValidationErrorKind pour le diagnostic |
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 n’accepte les secondes fractionnaires facultatives que lorsque le dernier chiffre fractionnaire est non nulReadTlv, TryReadOID et TryReadInteger signé restent disponibles pour les appelants existantsFPdfAsn1 aux côtés des unités principales de PDFium Delphi Component