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;
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ção | Descrição |
|---|---|
SHA1Init | Inicializa um contexto de hash no estado inicial da FIPS 180-4 5.3.1 e limpa seu buffer e seus contadores |
SHA1Update | Alimenta BufLen bytes de um buffer não tipado em um contexto aberto; comprimento zero é uma operação nula |
SHA1Final | Aplica o bloco de preenchimento e comprimento e então retorna o digest de 20 bytes |
SHA1Bytes | Hash de execução única de um array de bytes |
SHA1Of | Hash de execução única de um buffer não tipado de comprimento dado |
SHA1Hex | Formata um digest como uma string hex de 40 caracteres minúsculos |
| Tipo | Descrição |
|---|---|
TSHA1Digest | Digest SHA-1 de 20 bytes, o tipo de resultado de todo ponto de entrada de hash da unidade |
TSHA1Context | Contexto 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 |
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