PDFium Delphi Component Docs

Unidade FPdfSha1

Unidade: FPdfSha1
Implementação de SHA-1 em Pascal puro com contexto incremental init/update/final e auxiliares de execução única, presente para que um certificado possa ser correspondido pela sua impressão digital SHA-1

Sintaxe

TSHA1Digest = array[0..19] of Byte;

TSHA1Context = record
  State: array[0..4] of Cardinal;
  Buffer: array[0..63] of Byte;
  BufCnt: Cardinal;
  Length: UInt64;
end;

procedure SHA1Init(out Ctx: TSHA1Context);
procedure SHA1Update(var Ctx: TSHA1Context; const Buf; BufLen: Cardinal);
procedure SHA1Final(var Ctx: TSHA1Context; out Digest: TSHA1Digest);
function SHA1Bytes(const B: TBytes): TSHA1Digest;
function SHA1Of(const Buf; BufLen: Cardinal): TSHA1Digest;
function SHA1Hex(const Digest: TSHA1Digest): string;

Descrição

FPdfSha1 implementa SHA-1 em Pascal puro, sem dependência além de SysUtils, de modo que a biblioteca permanece autocontida em todos os compiladores suportados. A função de compressão segue a FIPS 180-4 6.1, e a regra de preenchimento da FIPS 180-4 5.1.1 completa a mensagem até 56 mod 64 bytes antes de oito bytes de comprimento em bits big-endian. As cargas e os armazenamentos são big-endian explícitos em bytes, o que mantém os resultados idênticos em cada CPU visada pela biblioteca

A API incremental SHA1Init / SHA1Update / SHA1Final faz o hash de uma entrada apresentada em partes. SHA1Update passa blocos inteiros de 64 bytes diretamente à transformação e armazena em buffer apenas o restante em TSHA1Context, de modo que alimentar um grande bloco de uma vez e alimentar os mesmos bytes aos poucos produzem o mesmo digest

SHA1Bytes e SHA1Of são auxiliares de execução única sobre um array de bytes ou um buffer não tipado de comprimento dado; um TBytes vazio é aceito e tem o hash da mensagem vazia. SHA1Hex renderiza um TSHA1Digest como uma string hex de 40 caracteres minúsculos, que é a forma em que uma impressão digital de certificado normalmente é comparada

Funções

FunçãoDescrição
SHA1InitInicializa um contexto de hash no estado inicial da FIPS 180-4 5.3.1 e limpa seu buffer e seus contadores
SHA1UpdateAlimenta BufLen bytes de um buffer não tipado em um contexto aberto; comprimento zero é uma operação nula
SHA1FinalAplica o bloco de preenchimento e comprimento e então retorna o digest de 20 bytes
SHA1BytesHash de execução única de um array de bytes
SHA1OfHash de execução única de um buffer não tipado de comprimento dado
SHA1HexFormata um digest como uma string hex de 40 caracteres minúsculos

Tipos

TipoDescrição
TSHA1DigestDigest SHA-1 de 20 bytes, o tipo de resultado de todo ponto de entrada de hash da unidade
TSHA1ContextContexto de hash incremental: State guarda as cinco palavras de trabalho, Buffer guarda o bloco parcial de 64 bytes da mensagem, BufCnt conta os bytes atualmente nesse buffer e Length acumula o comprimento total da mensagem em bytes

Observações

SHA-1 não é um digest de assinatura nesta biblioteca e não deve se tornar um. A pilha PAdES assina com SHA-256 do início ao fim, tanto para o message digest quanto para os signed attributes e a requisição de timestamp. Nada do caminho de assinatura deve ser movido para esta unidade

FPdfSha1 existe para um único trabalho: corresponder um certificado à impressão digital SHA-1 que TPadesSignerOptions carrega. Um back-end de token recebe o DER do certificado e precisa fazer essa comparação por conta própria, então ele faz o hash do DER com SHA1Bytes e compara SHA1Hex com a impressão digital configurada, sem diferenciar maiúsculas de minúsculas. No Windows o repositório de certificados resolve a impressão digital durante a busca do certificado, de modo que o back-end do Windows nunca precisou de uma implementação própria

Se você procura um hash para código novo, esta não é a escolha de uso geral. SHA-1 é inadequado onde quer que a resistência a colisões importe, incluindo digests de documentos, signed attributes e verificações de integridade. Use FPdfSha256 em vez disso, ou FPdfSha512 ou FPdfSha3 onde se queira uma família de digests mais longa ou diferente

Consulte também

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11