PDFium Delphi Component Docs

Unidad FPdfSha1

Unidad: FPdfSha1
Implementación SHA-1 en Pascal puro con contexto incremental init/update/final y ayudantes de una sola pasada, presente para que un certificado pueda emparejarse por su huella SHA-1

Sintaxis

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;

Descripción

FPdfSha1 implementa SHA-1 en Pascal puro, sin dependencia más allá de SysUtils, de modo que la biblioteca permanece autosuficiente en todos los compiladores admitidos. La función de compresión sigue FIPS 180-4 6.1, y la regla de relleno de FIPS 180-4 5.1.1 rellena el mensaje hasta 56 mod 64 bytes antes de ocho bytes de longitud en bits big-endian. Las cargas y los almacenamientos son big-endian explícitos por bytes, lo que mantiene los resultados idénticos en cada CPU a la que se dirige la biblioteca

La API incremental SHA1Init/SHA1Update/SHA1Final hashea la entrada presentada en bloques. SHA1Update pasa los bloques completos de 64 bytes directamente a la transformación y solo almacena en el búfer el resto en TSHA1Context, de modo que alimentar un bloque grande y alimentar los mismos bytes poco a poco producen el mismo digest

SHA1Bytes y SHA1Of son ayudantes de una sola pasada sobre una matriz de bytes o un búfer sin tipo de longitud dada; un TBytes vacío se acepta y se hashea como el mensaje vacío. SHA1Hex representa un TSHA1Digest como una cadena hexadecimal de 40 caracteres en minúsculas, la forma en la que habitualmente se compara una huella de certificado

Funciones

FunciónDescripción
SHA1InitInicializa un contexto de hash al estado inicial de FIPS 180-4 5.3.1 y vacía su búfer y sus contadores
SHA1UpdateAlimenta BufLen bytes de un búfer sin tipo en un contexto abierto; una longitud de cero es una operación nula
SHA1FinalAplica el bloque de relleno y de longitud y después devuelve el digest de 20 bytes
SHA1BytesHash de una sola pasada de una matriz de bytes
SHA1OfHash de una sola pasada de un búfer sin tipo de longitud dada
SHA1HexFormatea un digest como una cadena hexadecimal de 40 caracteres en minúsculas

Tipos

TipoDescripción
TSHA1DigestDigest SHA-1 de 20 bytes, el tipo de resultado de todos los puntos de entrada de hash de la unidad
TSHA1ContextContexto de hash incremental: State contiene las cinco palabras de trabajo, Buffer contiene el bloque parcial de 64 bytes del mensaje, BufCnt cuenta los bytes que hay actualmente en ese búfer, y Length acumula la longitud total del mensaje en bytes

Observaciones

SHA-1 no es un digest de firma en esta biblioteca y no debe llegar a serlo. La pila PAdES firma SHA-256 de principio a fin, tanto para el digest del mensaje como para los atributos firmados y la solicitud de marca de tiempo. Nada del camino de firma debe trasladarse a esta unidad

FPdfSha1 existe para un único trabajo: emparejar un certificado contra la huella SHA-1 que transporta TPadesSignerOptions. Un backend de token recibe el DER del certificado y tiene que hacer esa comparación por sí mismo, de modo que hashea el DER con SHA1Bytes y compara SHA1Hex con la huella configurada, sin distinguir mayúsculas de minúsculas. En Windows el almacén de certificados resuelve la huella durante la búsqueda del certificado, así que el backend de Windows nunca necesitó una implementación propia

Si busca un hash para código nuevo, esta no es la elección de propósito general. SHA-1 no es adecuado donde importa la resistencia a colisiones, incluidos los digests de documentos, los atributos firmados y las comprobaciones de integridad. Use FPdfSha256 en su lugar, o FPdfSha512 o FPdfSha3 donde se desee un digest más largo o de otra familia

Véase también

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11