PDFium Component Docs

Unidad FPdfAsn1

Unidad: FPdfAsn1
Codifica, navega, decodifica y valida datos Distinguished Encoding Rules de ASN.1 con un uso acotado de recursos

Public Types

TipoDescripción
TAsnTagConstantes 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
TAsnClassClase de identificador: asnClassUniversal, asnClassApplication, asnClassContextSpecific o asnClassPrivate
TAsnIdentifierClase de identificador, indicador de construido y número de etiqueta de 64 bits, incluida la forma de número de etiqueta alto
TDerTlvTLV analizado con Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier, sin copiar el búfer de origen
TDerWriterBúfer de salida DER reutilizable y codificador tipado
TDerReaderLector acotado con operaciones de inspección, avance, salto, etiqueta esperada, ventana secundaria, segmento y decodificación tipada
TDerByteArraysArreglo dinámico de TBytes usado por ConcatMany y otros auxiliares de múltiples búferes
TDerValidationErrorKindCategorí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
TDerValidationErrorRegistro de error con desplazamiento y Depth, con Kind y un texto de mensaje legible
TDerValidationErrorsArreglo dinámico de TDerValidationError devuelto dentro de TDerValidationResult
TDerValidationOptionsLímites en MaxDepth, MaxNodes, MaxContentLength y MaxErrors, el indicador RequireSingleRoot, el ValidateSetOrder opcional y la función de clase Default
TDerValidationResultEstado de la validación con IsValid, NodeCount, MaximumDepth y Errors con desplazamientos, además de los auxiliares ErrorCount y FirstError

Writer APIs

APIDescripción
Clear, IsEmpty, Count, Capacity, Bytes, FinishRestablece o inspecciona los datos en búfer, copia una instantánea, o transfiere el arreglo completado y reinicia el escritor
Reserve, Append, AppendMany, AppendByteCrece una sola vez y anexa arreglos, búferes propiedad de quien llama, varios arreglos o un byte, con verificaciones de desbordamiento
Wrap, WrapIdentifier, WrapConstructedEnvuelve 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, PrivateSpecificCodifica números de etiqueta bajos o altos sin truncar el identificador
Sequence, SequenceOf, SetOf, SetOfSortedCompone valores codificados como contenedores SEQUENCE o SET; SetOfSorted ordena los valores por sus bytes codificados
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfCodifica BOOLEAN, INTEGER con o sin signo, contenido INTEGER arbitrario validado y valores ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDCodifica valores binarios, de cadena de bits, NULL y de identificador de objeto como TLV independientes
PrintableString, Ia5String, Utf8StringCodifica las formas de cadena de caracteres de ASN.1 admitidas
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfCodifica texto de hora canónico o valores TDateTime en UTC, con TimeOf seleccionando el tipo de hora DER correcto
AlgId, AlgIdWithParamsConstruye una secuencia AlgorithmIdentifier con parámetros NULL o explícitos

Reader APIs

APIDescripción
Initialize, AtEnd, EffectiveLimit, RemainingInicializa un lector e inspecciona su ventana acotada y la cantidad de bytes restantes
TryReadTlvAt, PeekTlvAnaliza números de etiqueta bajos o altos y longitudes definidas mínimas sin cambiar Position
ReadNextTlv, SkipTlvAvanza solo cuando hay disponible un TLV completo y válido
TryReadExpectedAvanza solo cuando la clase, la forma construida y el número de etiqueta coinciden
EnterConstructedCrea una ventana de lector secundaria sobre el mismo arreglo de origen sin copiar el contenido
ContentBytes, EncodedBytesCopia un contenido validado o el segmento TLV completo cuando se requiere propiedad
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDecodifica valores primitivos canónicos con verificaciones de rango y de bits no usados
TryReadString, TryReadTime, TryReadNullDecodifica contenido UTF8String, PrintableString, IA5String, hora DER o NULL validado
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerProporcionan acceso de compatibilidad a los desplazamientos de TLV sin procesar, además de la decodificación de identificadores de objeto y enteros con signo

Validation

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

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;

FunciónDescripción
AsnIdentifierConstruye un TAsnIdentifier a partir de la clase, el número de etiqueta y el indicador de construido; se usa para dirigir TDerReader.TryReadExpected
EncodeIdentifierCodifica un TAsnIdentifier en sus bytes de identificador DER, incluida la forma de número de etiqueta alto
ConcatBytes, Concat3, Concat4, ConcatManyConcatena dos, tres, cuatro o un arreglo dinámico de TBytes en una sola asignación; usados ampliamente por el constructor de CMS
EncodeOIDContentCodifica 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
DerValidationErrorKindNameDevuelve el nombre para mostrar de un TDerValidationErrorKind para fines de diagnóstico

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