PDFium Delphi Component Docs

FPdfSha1 Unità

Unità: FPdfSha1
Implementazione SHA-1 in puro Pascal con un contesto incrementale init/update/final e helper a chiamata singola, presente perché un certificato possa essere abbinato al suo thumbprint SHA-1

Syntax

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;

Description

FPdfSha1 implementa SHA-1 in puro Pascal, senza dipendenze oltre SysUtils, così la libreria resta autonoma su ogni compilatore supportato. La funzione di compressione segue FIPS 180-4 6.1, e la regola di padding di FIPS 180-4 5.1.1 porta il messaggio a 56 mod 64 byte prima di otto byte di lunghezza in bit big-endian. Load e store sono big-endian espliciti a livello di byte, il che mantiene risultati identici su ogni CPU a cui la libreria punta

L'API incrementale SHA1Init / SHA1Update / SHA1Final calcola l'hash di un input presentato a blocchi. SHA1Update passa i blocchi interi da 64 byte direttamente alla trasformazione e bufferizza solo il resto in TSHA1Context, così fornire un grande blocco in una volta o fornire gli stessi byte pochi alla volta produce lo stesso digest

SHA1Bytes e SHA1Of sono helper a chiamata singola su un array di byte o un buffer non tipizzato di una data lunghezza; un TBytes vuoto è accettato e viene calcolato come messaggio vuoto. SHA1Hex rende un TSHA1Digest come stringa esadecimale minuscola di 40 caratteri, che è la forma in cui un thumbprint di certificato viene normalmente confrontato

Functions

FunctionDescription
SHA1InitInizializza un contesto di hashing allo stato iniziale di FIPS 180-4 5.3.1 e azzera il suo buffer e i suoi contatori
SHA1UpdateIntroduce BufLen byte di un buffer non tipizzato in un contesto aperto; una lunghezza zero è un no-op
SHA1FinalApplica il blocco di padding e lunghezza, poi restituisce il digest di 20 byte
SHA1BytesHash a chiamata singola di un array di byte
SHA1OfHash a chiamata singola di un buffer non tipizzato di una data lunghezza
SHA1HexFormatta un digest come stringa esadecimale minuscola di 40 caratteri

Types

TypeDescription
TSHA1DigestDigest SHA-1 di 20 byte, il tipo di risultato di ogni entry point di hashing dell'unità
TSHA1ContextContesto di hashing incrementale: State contiene le cinque parole di lavoro, Buffer contiene il blocco di messaggio parziale da 64 byte, BufCnt conta i byte attualmente in quel buffer, e Length accumula la lunghezza totale del messaggio in byte

Remarks

SHA-1 non è un digest di firma in questa libreria e non deve diventarlo. Lo stack PAdES firma SHA-256 ovunque, per il digest del messaggio, gli attributi firmati e la richiesta di timestamp allo stesso modo. Nulla del percorso di firma deve essere spostato su questa unità

FPdfSha1 esiste per un solo compito: abbinare un certificato al thumbprint SHA-1 che TPadesSignerOptions porta. Un backend di token riceve il DER del certificato e deve fare quel confronto da sé, quindi calcola l'hash del DER con SHA1Bytes e confronta SHA1Hex con il thumbprint configurato, senza distinguere maiuscole e minuscole. Su Windows lo store dei certificati risolve il thumbprint durante la ricerca del certificato, così il backend Windows non ha mai avuto bisogno di una propria implementazione

Se state cercando un hash per codice nuovo, questa non è la scelta generale. SHA-1 non è adatto ovunque la resistenza alle collisioni conti, compresi i digest dei documenti, gli attributi firmati e i controlli di integrità. Usate FPdfSha256 al suo posto, o FPdfSha512 oppure FPdfSha3 quando si vuole una famiglia di digest più lunga o diversa

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11