| Type | Description |
|---|---|
TAsnTag | Constantes 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 |
TAsnClass | Classe do identificador: asnClassUniversal, asnClassApplication, asnClassContextSpecific ou asnClassPrivate |
TAsnIdentifier | Classe do identificador, flag constructed e número de tag de 64 bits, incluindo a forma high-tag-number |
TDerTlv | TLV analisado com Offset, HeaderLength, ContentOffset, ContentLength, NextOffset e Identifier, sem copiar o buffer de origem |
TDerWriter | Buffer de saída DER reutilizável e codificador tipado |
TDerReader | Leitor delimitado com operações de peek, avanço, skip, tag esperada, janela filha, fatia e decodificação tipada |
TDerByteArrays | Array dinâmico de TBytes usado por ConcatMany e por outros auxiliares de múltiplos buffers |
TDerValidationErrorKind | Categorias 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 |
TDerValidationError | Record de erro ciente de offset e de Depth, com Kind e texto de mensagem legível |
TDerValidationErrors | Array dinâmico de TDerValidationError retornado dentro de TDerValidationResult |
TDerValidationOptions | Limites em MaxDepth, MaxNodes, MaxContentLength e MaxErrors, a flag RequireSingleRoot, o ValidateSetOrder opcional e a class function Default |
TDerValidationResult | Status de validação com IsValid, NodeCount, MaximumDepth e Errors cientes de offset, além dos auxiliares ErrorCount e FirstError |
| API | Description |
|---|---|
Clear, IsEmpty, Count, Capacity, Bytes, Finish | Redefine ou inspeciona dados em buffer, copia um snapshot ou transfere o array concluído e redefine o writer |
Reserve, Append, AppendMany, AppendByte | Cresce uma vez e anexa arrays, buffers de propriedade de quem chama, múltiplos arrays ou um byte, com verificações de overflow |
Wrap, WrapIdentifier, WrapConstructed | Envelopa 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, PrivateSpecific | Codifica números de tag baixos ou altos sem truncar o identificador |
Sequence, SequenceOf, SetOf, SetOfSorted | Compõe valores codificados como contêineres SEQUENCE ou SET; SetOfSorted ordena os valores pelos bytes codificados |
BooleanOf, IntegerOf, UnsignedIntegerOf, IntegerBytes, EnumeratedOf | Codifica valores BOOLEAN, INTEGER com ou sem sinal, conteúdo INTEGER arbitrário validado e ENUMERATED |
OctetString, OctetStringOf, BitString, Null, OID | Codifica valores binários, bit-string, NULL e identificador de objeto como TLVs independentes |
PrintableString, Ia5String, Utf8String | Codifica as formas de string de caracteres ASN.1 suportadas |
UTCTime, GeneralizedTime, UTCTimeOf, GeneralizedTimeOf, TimeOf | Codifica texto de tempo canônico ou valores TDateTime em UTC, com TimeOf selecionando o tipo de tempo DER correto |
AlgId, AlgIdWithParams | Constrói uma SEQUENCE AlgorithmIdentifier com parâmetros NULL ou explícitos |
| API | Description |
|---|---|
Initialize, AtEnd, EffectiveLimit, Remaining | Inicializa um leitor e inspeciona sua janela delimitada e a quantidade de bytes restante |
TryReadTlvAt, PeekTlv | Analisa números de tag baixos ou altos e comprimentos definite mínimos sem alterar Position |
ReadNextTlv, SkipTlv | Avança somente depois que um TLV completo e válido está disponível |
TryReadExpected | Avança somente quando classe, forma constructed e número de tag corresponderem todos |
EnterConstructed | Cria uma janela de leitor filha sobre o mesmo array de origem sem copiar conteúdo |
ContentBytes, EncodedBytes | Copia uma fatia validada de conteúdo ou de TLV completo quando a propriedade dos bytes é necessária |
TryReadBoolean, TryReadUnsignedInteger, TryReadBitString | Decodifica valores primitivos canônicos com verificações de intervalo e de bits não usados |
TryReadString, TryReadTime, TryReadNull | Decodifica conteúdo validado de UTF8String, PrintableString, IA5String, tempo DER ou NULL |
ReadTlv, TryReadOID, ReadOID, TryReadInteger, ReadInteger | Oferece acesso de compatibilidade aos offsets brutos de TLV, além da decodificação de identificador de objeto e de inteiro com sinal |
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
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 | Constrói um TAsnIdentifier a partir de classe, número de tag e flag constructed, usado para acionar TDerReader.TryReadExpected |
EncodeIdentifier | Codifica um TAsnIdentifier em seus bytes de identificador DER, incluindo a forma high-tag-number |
ConcatBytes, Concat3, Concat4, ConcatMany | Concatena dois, três, quatro ou um array dinâmico de TBytes em uma única alocação; amplamente usado pelo construtor de CMS |
EncodeOIDContent | Codifica 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 |
DerValidationErrorKindName | Retorna o nome de exibição de um TDerValidationErrorKind para diagnósticos |
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 aceita segundos fracionários opcionais somente quando o último dígito fracionário é diferente de zeroReadTlv, TryReadOID e TryReadInteger com sinal permanecem disponíveis para quem já os chamaFPdfAsn1 junto com as unidades principais do PDFium Delphi Component