PDFium Delphi Component Docs

FPdfSha1-enhet

Unit: FPdfSha1
SHA-1-implementering i ren Pascal med ett inkrementellt init/update/final-kontext och engångshjälpare, tillgänglig så att ett certifikat kan matchas via dess SHA-1-tumavtryck

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 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

Functions

FunctionDescription
SHA1InitInitierar en hashningskontext till initialtillståndet i FIPS 180-4 5.3.1 och rensar dess buffert och räknare
SHA1UpdateMatar BufLen bytes ur en otypad buffert till en öppen kontext; längden noll är en no-op
SHA1FinalTillämpar padding- och längdblocket och returnerar därefter den 20 bytes stora digesten
SHA1BytesEngångshash av en byte-array
SHA1OfEngångshash av en otypad buffert med en given längd
SHA1HexFormaterar en digest som en gemen 40-tecken hex-sträng

Types

TypeDescription
TSHA1DigestSHA-1-digest på 20 bytes, resultattypen för varje hashningsingångspunkt i enheten
TSHA1ContextInkrementell 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

Remarks

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

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11