PDFium Delphi Component Docs

FPdfSha1 Unité

Module: FPdfSha1
Implémentation SHA-1 en pur Pascal avec un contexte incrémental init/update/final et des aides en un seul appel, présente afin qu’un certificat puisse être rapproché de son empreinte 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 implémente SHA-1 en pur Pascal, sans autre dépendance que SysUtils, si bien que la bibliothèque reste autonome sur chaque compilateur pris en charge. La fonction de compression suit FIPS 180-4 6.1, et la règle de remplissage de FIPS 180-4 5.1.1 comble le message à 56 mod 64 octets avant huit octets de longueur en bits gros boutiste. Les chargements et stockages sont gros boutistes explicites à l’octet, ce qui garde des résultats identiques sur chaque CPU ciblé par la bibliothèque

L’API incrémentale SHA1Init / SHA1Update / SHA1Final hache une entrée fournie par morceaux. SHA1Update passe les blocs entiers de 64 octets directement à la transformation et ne met en tampon que le reste dans TSHA1Context, de sorte que fournir un grand bloc d’un coup ou fournir les mêmes octets quelques-uns à la fois produit le même condensé

SHA1Bytes et SHA1Of sont des aides en un seul appel sur un tableau d’octets ou un tampon non typé d’une longueur donnée ; un TBytes vide est accepté et se hache comme le message vide. SHA1Hex rend un TSHA1Digest sous forme de chaîne hexadécimale minuscule de 40 caractères, qui est la forme sous laquelle une empreinte de certificat est normalement comparée

Functions

FunctionDescription
SHA1InitInitialise un contexte de hachage à l’état initial de FIPS 180-4 5.3.1 et efface son tampon et ses compteurs
SHA1UpdateInjecte BufLen octets d’un tampon non typé dans un contexte ouvert ; une longueur nulle est un no-op
SHA1FinalApplique le bloc de remplissage et de longueur, puis renvoie le condensé de 20 octets
SHA1BytesHachage en un seul appel d’un tableau d’octets
SHA1OfHachage en un seul appel d’un tampon non typé d’une longueur donnée
SHA1HexMet en forme un condensé sous forme de chaîne hexadécimale minuscule de 40 caractères

Types

TypeDescription
TSHA1DigestCondensé SHA-1 de 20 octets, le type de résultat de chaque point d’entrée de hachage de l’unité
TSHA1ContextContexte de hachage incrémental : State contient les cinq mots de travail, Buffer contient le bloc de message partiel de 64 octets, BufCnt compte les octets actuellement dans ce tampon, et Length accumule la longueur totale du message en octets

Remarks

SHA-1 n’est pas un condensé de signature dans cette bibliothèque et ne doit pas le devenir. La pile PAdES signe en SHA-256 partout, tant pour le condensé de message que pour les attributs signés et la demande d’horodatage. Rien du chemin de signature ne doit être déplacé vers cette unité

FPdfSha1 existe pour un unique travail : rapprocher un certificat de l’empreinte SHA-1 que porte TPadesSignerOptions. Un backend de jeton reçoit le DER du certificat et doit faire cette comparaison lui-même, il hache donc le DER avec SHA1Bytes et compare SHA1Hex à l’empreinte configurée, sans tenir compte de la casse. Sous Windows, le magasin de certificats résout l’empreinte pendant la recherche du certificat, si bien que le backend Windows n’a jamais eu besoin de sa propre implémentation

Si vous cherchez un hachage pour du code nouveau, ce n’est pas le choix généraliste. SHA-1 ne convient pas partout où la résistance aux collisions compte, y compris les condensés de document, les attributs signés et les contrôles d’intégrité. Utilisez FPdfSha256 à la place, ou FPdfSha512 ou FPdfSha3 lorsqu’une famille de condensés plus longue ou différente est voulue

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11