| Tipo | Descripción |
|---|---|
TAsnTag | Constantes de etiquetas universales (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, formas de tiempo y de cadena) usadas por la construcción y validación de identificadores |
TAsnClass | Clase del identificador: asnClassUniversal, asnClassApplication, asnClassContextSpecific o asnClassPrivate |
TAsnIdentifier | Clase del identificador, marca de construido y número de etiqueta de 64 bits, incluida la forma de etiqueta alta |
TDerTlv | TLV analizado con Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier sin copiar el búfer de origen |
TDerWriter | Búfer de salida DER reutilizable y codificador tipado |
TDerReader | Lector acotado con operaciones de peek, avance, salto, etiqueta esperada, ventana hija, porción y decodificación tipada |
TDerByteArrays | Matriz dinámica de TBytes usada por ConcatMany y otros asistentes multibúfer |
TDerValidationErrorKind | Categorías de errores de validación: dvekMalformedTlv, dvekTrailingData, límites de profundidad, de nodos y de contenido (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, fallos canónicos por tipo (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) y dvekSetOrder |
TDerValidationError | Registro de error con información de Offset y Depth, con Kind y texto de mensaje legible |
TDerValidationErrors | Matriz dinámica de TDerValidationError devuelta dentro de TDerValidationResult |
TDerValidationOptions | Límites en MaxDepth, MaxNodes, MaxContentLength, MaxErrors, la marca RequireSingleRoot, el ValidateSetOrder opcional y la función de clase Default |
TDerValidationResult | Estado de validación con IsValid, NodeCount, MaximumDepth, Errors con información de desplazamiento, más los asistentes ErrorCount y FirstError |
| API | Descripción |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Restablece o inspecciona los datos almacenados, copia una instantánea o transfiere la matriz completada y restablece el escritor |
Reserve, Append, AppendMany, AppendByte | Crece una sola vez y anexa matrices, búferes propiedad del llamador, varias matrices o un byte con comprobaciones de desbordamiento |
Wrap, WrapIdentifier, WrapConstructed | Envuelve el contenido con un octeto de identificador en bruto, cualquier clase de identificador y número de etiqueta de 64 bits, o un identificador construido |
ContextSpecific, ApplicationSpecific, PrivateSpecific | Codifica números de etiqueta bajos o altos sin truncar el identificador |
Sequence, SequenceOf, SetOf, SetOfSorted | Compone valores codificados como contenedores SEQUENCE o SET; SetOfSorted ordena los valores por sus bytes codificados |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Codifica BOOLEAN, INTEGER con o sin signo, contenido INTEGER arbitrario validado y valores ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Codifica valores binarios, de cadena de bits, NULL y de identificador de objeto como TLV independientes |
PrintableString, Ia5String, Utf8String | Codifica las formas de cadena de caracteres ASN.1 admitidas |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Codifica texto de tiempo canónico o valores UTC TDateTime, con TimeOf seleccionando el tipo de tiempo DER correcto |
AlgId, AlgIdWithParams | Construye una SEQUENCE AlgorithmIdentifier con parámetros NULL o explícitos |
| API | Descripción |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inicializa un lector e inspecciona su ventana acotada y el número de bytes restantes |
TryReadTlvAt, PeekTlv | Analiza números de etiqueta bajos o altos y longitudes definidas mínimas sin cambiar Position |
ReadNextTlv, SkipTlv | Avanza solo cuando hay un TLV válido completo disponible |
TryReadExpected | Avanza solo cuando la clase, la forma construida y el número de etiqueta coinciden todos |
EnterConstructed | Crea una ventana de lector hija sobre la misma matriz de origen sin copiar contenido |
ContentBytes, EncodedBytes | Copia una porción de contenido validada o de TLV completo cuando se requiere propiedad |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Decodifica valores primitivos canónicos con comprobaciones de rango y de bits no usados |
TryReadString, TryReadTime, TryReadNull | Decodifica contenido validado de UTF8String, PrintableString, IA5String, tiempo DER o NULL |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Proporcionan acceso de compatibilidad a los desplazamientos en bruto de los TLV más la decodificación de identificadores de objeto y enteros con signo |
function ValidateDer(const Data: TBytes): TDerValidationResult; overload;
function ValidateDer(const Data: TBytes; const Options: TDerValidationOptions): TDerValidationResult; overload;
ValidateDer comprueba la minimidad de identificador y longitud, los límites del búfer, las formas primitivas universales, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, las cadenas admitidas y los valores de tiempo canónicos
Los límites predeterminados permiten una profundidad máxima de 64, 100000 nodos, 64 MiB por valor de contenido y 32 errores notificados, exigiendo un único TLV raíz
ValidateSetOrder está desactivado de forma predeterminada porque DER sin esquema no puede distinguir todo SET de un SET OF; actívelo para contenedores SET OF conocidos, como las colecciones de atributos de CMS
TDerValidationOptions.Default aporta los valores acotados predeterminados, mientras que TDerValidationResult.ErrorCount y FirstError simplifican el manejo de diagnóstico
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;
| Función | Descripción |
|---|---|
AsnIdentifier | Construye un TAsnIdentifier a partir de la clase, el número de etiqueta y la marca de construido; se usa para impulsar TDerReader.TryReadExpected |
EncodeIdentifier | Codifica un TAsnIdentifier en sus bytes DER de identificador, incluida la forma de etiqueta alta |
ConcatBytes, Concat3, Concat4, ConcatMany | Concatenan dos, tres, cuatro o una matriz dinámica de TBytes en una sola asignación; de amplio uso por el constructor CMS |
EncodeOIDContent | Codifica una cadena OID decimal punteada en sus bytes de contenido sin la etiqueta ni la longitud, de modo que quien llama pueda inspeccionar o reenvolver un OID |
DerValidationErrorKindName | Devuelve el nombre visible de un TDerValidationErrorKind para diagnóstico |
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 acepta segundos fraccionarios opcionales solo cuando el último dígito fraccionario es distinto de ceroReadTlv, TryReadOID y el TryReadInteger con signo siguen disponibles para los llamadores existentesFPdfAsn1 junto con las unidades principales de PDFium Delphi Component