PDFium Delphi Component Docs

Unidade FPdfAsn1

Unidade: FPdfAsn1
Codifica, navega, decodifica e valida dados ASN.1 Distinguished Encoding Rules com uso delimitado de recursos

Public Types

TypeDescription
TAsnTagConstantes de tag universais (BOOLEAN, INTEGER, OCTET STRING, OID, SEQUENCE, SET, formas de tempo e de string) usadas pela construção e validação de identificadores
TAsnClassClasse do identificador: asnClassUniversal, asnClassApplication, asnClassContextSpecific ou asnClassPrivate
TAsnIdentifierClasse do identificador, flag constructed e número de tag de 64 bits, incluindo a forma high-tag-number
TDerTlvTLV analisado com Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier, sem copiar o buffer de origem
TDerWriterBuffer de saída DER reutilizável e codificador tipado
TDerReaderLeitor delimitado com operações de peek, avanço, skip, tag esperada, janela filha, fatia e decodificação tipada
TDerByteArraysArray dinâmico de TBytes usado por ConcatMany e por outros auxiliares de múltiplos buffers
TDerValidationErrorKindCategorias de erro de validação: dvekMalformedTlv, dvekTrailingData, limites de profundidade, de nós e de conteúdo (dvekDepthLimit, dvekNodeLimit, dvekContentLimit), dvekUniversalForm, falhas canônicas por tipo (dvekBoolean, dvekInteger, dvekBitString, dvekNull, dvekOid, dvekString, dvekTime) e dvekSetOrder
TDerValidationErrorRecord de erro ciente de offset e de Depth, com Kind e texto de mensagem legível
TDerValidationErrorsArray dinâmico de TDerValidationError retornado dentro de TDerValidationResult
TDerValidationOptionsLimites em MaxDepth, MaxNodes, MaxContentLength e MaxErrors, a flag RequireSingleRoot, o ValidateSetOrder opcional e a class function Default
TDerValidationResultStatus de validação com IsValid, NodeCount, MaximumDepth e Errors cientes de offset, além dos auxiliares ErrorCount e FirstError

Writer APIs

APIDescription
Clear, IsEmpty, Count, Capacity, Bytes, FinishRedefine ou inspeciona dados em buffer, copia um snapshot ou transfere o array concluído e redefine o writer
Reserve, Append, AppendMany, AppendByteCresce uma vez e anexa arrays, buffers de propriedade de quem chama, múltiplos arrays ou um byte, com verificações de overflow
Wrap, WrapIdentifier, WrapConstructedEnvelopa conteúdo com um octeto de identificador bruto, com qualquer classe de identificador e número de tag de 64 bits, ou com um identificador constructed
ContextSpecific, ApplicationSpecific, PrivateSpecificCodifica números de tag baixos ou altos sem truncar o identificador
Sequence, SequenceOf, SetOf, SetOfSortedCompõe valores codificados como contêineres SEQUENCE ou SET; SetOfSorted ordena os valores pelos bytes codificados
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOfCodifica valores BOOLEAN, INTEGER com ou sem sinal, conteúdo INTEGER arbitrário validado e ENUMERATED
OctetString, OctetStringOf, BitString, Null, OIDCodifica valores binários, bit-string, NULL e identificador de objeto como TLVs independentes
PrintableString, Ia5String, Utf8StringCodifica as formas de string de caracteres ASN.1 suportadas
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOfCodifica texto de tempo canônico ou valores TDateTime em UTC, com TimeOf selecionando o tipo de tempo DER correto
AlgId, AlgIdWithParamsConstrói uma SEQUENCE AlgorithmIdentifier com parâmetros NULL ou explícitos

Reader APIs

APIDescription
Initialize, AtEnd, EffectiveLimit, RemainingInicializa um leitor e inspeciona sua janela delimitada e a quantidade de bytes restante
TryReadTlvAt, PeekTlvAnalisa números de tag baixos ou altos e comprimentos definite mínimos sem alterar Position
ReadNextTlv, SkipTlvAvança somente depois que um TLV completo e válido está disponível
TryReadExpectedAvança somente quando classe, forma constructed e número de tag corresponderem todos
EnterConstructedCria uma janela de leitor filha sobre o mesmo array de origem sem copiar conteúdo
ContentBytes, EncodedBytesCopia uma fatia validada de conteúdo ou de TLV completo quando a propriedade dos bytes é necessária
TryReadBoolean, TryReadUnsignedInteger, TryReadBitStringDecodifica valores primitivos canônicos com verificações de intervalo e de bits não usados
TryReadString, TryReadTime, TryReadNullDecodifica conteúdo validado de UTF8String, PrintableString, IA5String, tempo DER ou NULL
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadIntegerOferece acesso de compatibilidade aos offsets brutos de TLV, além da decodificação de identificador de objeto e de inteiro com sinal

Validation

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

ValidateDer verifica a minimalidade de identificador e de comprimento, os limites do buffer, as formas primitivas universais, BOOLEAN, INTEGER, ENUMERATED, BIT STRING, NULL, OBJECT IDENTIFIER, as strings suportadas e os valores de tempo canônicos

Os limites padrão permitem profundidade máxima de 64, 100000 nós, 64 MiB por valor de conteúdo e 32 erros relatados, exigindo um TLV raiz

ValidateSetOrder vem desabilitado por padrão porque DER sem esquema não distingue todo SET de um SET OF; habilite-o para contêineres SET OF conhecidos, como coleções de atributos CMS

TDerValidationOptions.Default fornece os padrões delimitados, enquanto TDerValidationResult.ErrorCount e FirstError simplificam o tratamento 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;

FunctionDescription
AsnIdentifierConstrói um TAsnIdentifier a partir de classe, número de tag e flag constructed, usado para acionar TDerReader.TryReadExpected
EncodeIdentifierCodifica um TAsnIdentifier em seus bytes de identificador DER, incluindo a forma high-tag-number
ConcatBytes, Concat3, Concat4, ConcatManyConcatena dois, três, quatro ou um array dinâmico de TBytes em uma única alocação; amplamente usado pelo construtor de CMS
EncodeOIDContentCodifica uma string OID em decimal pontuada em seus bytes de conteúdo sem a tag e o comprimento, para que quem chama possa inspecionar ou reenvolver um OID
DerValidationErrorKindNameRetorna o nome de exibição de um TDerValidationErrorKind para diagnósticos

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