| Tipo | Descripción |
|---|---|
TAsnTag | Constantes de etiqueta universal (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, formas de hora y de cadena) usadas por la construcción y la validación de identificadores |
TAsnClass | Clase de identificador: asnClassUniversal, asnClassApplication, asnClassContextSpecific o asnClassPrivate |
TAsnIdentifier | Clase de identificador, indicador de construido y número de etiqueta de 64 bits, incluida la forma de número de etiqueta alto |
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 inspección, avance, salto, etiqueta esperada, ventana secundaria, segmento y decodificación tipada |
TDerByteArrays | Arreglo dinámico de TBytes usado por ConcatMany y otros auxiliares de múltiples búferes |
TDerValidationErrorKind | Categorías de error 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 desplazamiento y Depth, con Kind y un texto de mensaje legible |
TDerValidationErrors | Arreglo dinámico de TDerValidationError devuelto dentro de TDerValidationResult |
TDerValidationOptions | Límites en MaxDepth, MaxNodes, MaxContentLength y MaxErrors, el indicador RequireSingleRoot, el ValidateSetOrder opcional y la función de clase Default |
TDerValidationResult | Estado de la validación con IsValid, NodeCount, MaximumDepth y Errors con desplazamientos, además de los auxiliares ErrorCount y FirstError |
| API | Descripción |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Restablece o inspecciona los datos en búfer, copia una instantánea, o transfiere el arreglo completado y reinicia el escritor |
Reserve, Append, AppendMany, AppendByte | Crece una sola vez y anexa arreglos, búferes propiedad de quien llama, varios arreglos o un byte, con verificaciones de desbordamiento |
Wrap, WrapIdentifier, WrapConstructed | Envuelve contenido con un octeto de identificador sin procesar, con cualquier clase de identificador y número de etiqueta de 64 bits, o con 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 de ASN.1 admitidas |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Codifica texto de hora canónico o valores TDateTime en UTC, con TimeOf seleccionando el tipo de hora DER correcto |
AlgId, AlgIdWithParams | Construye una secuencia AlgorithmIdentifier con parámetros NULL o explícitos |
| API | Descripción |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inicializa un lector e inspecciona su ventana acotada y la cantidad 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 disponible un TLV completo y válido |
TryReadExpected | Avanza solo cuando la clase, la forma construida y el número de etiqueta coinciden |
EnterConstructed | Crea una ventana de lector secundaria sobre el mismo arreglo de origen sin copiar el contenido |
ContentBytes, EncodedBytes | Copia un contenido validado o el segmento TLV completo cuando se requiere propiedad |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Decodifica valores primitivos canónicos con verificaciones de rango y de bits no usados |
TryReadString, TryReadTime, TryReadNull | Decodifica contenido UTF8String, PrintableString, IA5String, hora DER o NULL validado |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Proporcionan acceso de compatibilidad a los desplazamientos de TLV sin procesar, además de 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 verifica la minimalidad del identificador y de la 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 canónicos de hora
Los límites predeterminados permiten una profundidad máxima de 64, 100000 nodos, 64 MiB por valor de contenido y 32 errores informados, y exigen un único TLV raíz
ValidateSetOrder está desactivado de forma predeterminada porque el DER sin esquema no puede distinguir todo SET de SET OF; actívelo para contenedores SET OF conocidos, como las colecciones de atributos CMS
TDerValidationOptions.Default suministra los valores acotados predeterminados, mientras que TDerValidationResult.ErrorCount y FirstError simplifican el manejo de diagnósticos
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 el indicador de construido; se usa para dirigir TDerReader.TryReadExpected |
EncodeIdentifier | Codifica un TAsnIdentifier en sus bytes de identificador DER, incluida la forma de número de etiqueta alto |
ConcatBytes, Concat3, Concat4, ConcatMany | Concatena dos, tres, cuatro o un arreglo dinámico de TBytes en una sola asignación; usados ampliamente por el constructor de CMS |
EncodeOIDContent | Codifica una cadena OID decimal con puntos 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 para mostrar de un TDerValidationErrorKind para fines de 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 quienes ya los llamanFPdfAsn1 junto con las unidades principales de PDFiumPas