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 implementerar SHA-1 i ren Pascal, utan något beroende utöver SysUtils, så att biblioteket förblir självförsörjande på alla stödda kompilatorer. Komprimeringsfunktionen följer FIPS 180-4 6.1, och padding-regeln i FIPS 180-4 5.1.1 fyller meddelandet till 56 mod 64 bytes innan åtta bytes med big-endian-bitlängd läggs till. Inläsningar och lagringar är uttryckligen byte-ordnade big-endian, vilket håller resultaten identiska på alla CPU:er biblioteket riktar sig mot
Det inkrementella SHA1Init / SHA1Update / SHA1Final-API:et hashar indata som lämnas i bitar. SHA1Update skickar hela 64-bytes-block rakt till transformeringen och buffrar endast resten i TSHA1Context, så att samma bytes matas in i en stor bit eller lite i taget med samma digest som resultat
SHA1Bytes och SHA1Of är engångshjälpare över en byte-array eller en otypad buffert med en given längd; en tom TBytes accepteras och hashas som det tomma meddelandet. SHA1Hex återger en TSHA1Digest som en gemen 40-tecken hex-sträng, vilket är den form ett certifikattumavtryck normalt jämförs i
| Function | Description |
|---|---|
SHA1Init | Initierar en hashningskontext till initialtillståndet i FIPS 180-4 5.3.1 och rensar dess buffert och räknare |
SHA1Update | Matar BufLen bytes ur en otypad buffert till en öppen kontext; längden noll är en no-op |
SHA1Final | Tillämpar padding- och längdblocket och returnerar därefter den 20 bytes stora digesten |
SHA1Bytes | Engångshash av en byte-array |
SHA1Of | Engångshash av en otypad buffert med en given längd |
SHA1Hex | Formaterar en digest som en gemen 40-tecken hex-sträng |
| Type | Description |
|---|---|
TSHA1Digest | SHA-1-digest på 20 bytes, resultattypen för varje hashningsingångspunkt i enheten |
TSHA1Context | Inkrementell hashningskontext: State håller de fem arbetsorden, Buffer håller det partiella 64-bytes-meddelandeblocket, BufCnt räknar de bytes som för närvarande finns i bufferten och Length ackumulerar den totala meddelandelängden i bytes |
SHA-1 är ingen signeringsdigest i detta bibliotek och får inte bli en. PAdES-stacken signerar SHA-256 genomgående, för meddelandedigesten, de signerade attributen och tidsstämpelbegäran likaså. Inget i signeringsvägen ska flyttas över till denna enhet
FPdfSha1 finns för ett enda jobb: att matcha ett certifikat mot SHA-1-tumavtrycket som TPadesSignerOptions bär. En token-backend tar emot certifikatets DER och måste göra den jämförelsen själv, så den hashar DER:en med SHA1Bytes och jämför SHA1Hex mot det konfigurerade tumavtrycket, skiftlägesokänsligt. På Windows löser certifikatarkivet tumavtrycket under certifikatsökningen, så Windows-backenden behövde aldrig en egen implementering
Om du söker en hash för ny kod är detta inte det generella valet. SHA-1 är olämpligt överallt där kollisionsmotstånd spelar roll, inklusive dokumentdigestar, signerade attribut och integritetskontroller. Använd FPdfSha256 i stället, eller FPdfSha512 eller FPdfSha3 där en längre eller annan digestfamilj önskas