PDFium Component Docs

FPdfSha1 unit

Unit: FPdfSha1
SHA-1-implementatie in pure Pascal met een incrementele init/update/final-context en one-shot-hulpfuncties, aanwezig zodat een certificaat aan zijn SHA-1-thumbprint kan worden herkend

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 implementeert SHA-1 in pure Pascal, zonder andere afhankelijkheid dan SysUtils, zodat de bibliotheek zelfstandig blijft op elke ondersteunde compiler. De compressiefunctie volgt FIPS 180-4 6.1, en de paddingregel van FIPS 180-4 5.1.1 vult de boodschap aan tot 56 mod 64 bytes vóór acht bytes big-endian bitlengte. Loads en stores zijn byte-explicitiek big-endian, waardoor de resultaten op elke CPU waarop de bibliotheek zich richt identiek blijven

De incrementele SHA1Init / SHA1Update / SHA1Final-API hasht invoer die in delen wordt aangeboden. SHA1Update geeft hele 64-byte-blokken rechtstreeks door aan de transformatie en buffert alleen de rest in TSHA1Context, zodat één groot blok aanvoeren en dezelfde bytes een paar tegelijk aanvoeren dezelfde digest opleveren

SHA1Bytes en SHA1Of zijn one-shot-hulpfuncties over een byte-array of een niet-getypeerde buffer van een gegeven lengte; een lege TBytes wordt geaccepteerd en gehasht als de lege boodschap. SHA1Hex zet een TSHA1Digest om in een hexadecimale string van 40 kleine letters, de vorm waarin een certificaat-thumbprint normaal wordt vergeleken

Functions

FunctionDescription
SHA1InitInitialiseert een hashcontext naar de begintoestand van FIPS 180-4 5.3.1 en wist zijn buffer en tellers
SHA1UpdateVoert BufLen bytes van een niet-getypeerde buffer in een open context in; een lengte van nul is een no-op
SHA1FinalPast het padding- en lengteblok toe en geeft vervolgens de 20-byte digest terug
SHA1BytesOne-shot-hash van een byte-array
SHA1OfOne-shot-hash van een niet-getypeerde buffer van een gegeven lengte
SHA1HexFormatteert een digest als hexadecimale string van 40 kleine letters

Types

TypeDescription
TSHA1Digest20-byte SHA-1-digest, het resultaattype van elk hash-entry point in de unit
TSHA1ContextIncrementele hashcontext: State bevat de vijf werkvariabelen, Buffer bevat het gedeeltelijke 64-byte-boodschapsblok, BufCnt telt de bytes die zich momenteel in die buffer bevinden, en Length houdt de totale boodschapslengte in bytes bij

Remarks

SHA-1 is in deze bibliotheek geen ondertekeningsdigest en dat moet het ook niet worden. De PAdES-stack ondertekent doorlopend met SHA-256, zowel voor de message digest als voor de signed attributes en het timestamp-verzoek. Niets uit het ondertekeningspad zou naar deze unit moeten worden verplaatst

FPdfSha1 bestaat voor één taak: een certificaat vergelijken met de SHA-1-thumbprint die TPadesSignerOptions meedraagt. Een tokenbackend ontvangt certificaat-DER en moet die vergelijking zelf uitvoeren, dus hij hasht de DER met SHA1Bytes en vergelijkt SHA1Hex met de geconfigureerde thumbprint, zonder onderscheid van hoofdletters. Op Windows lost de certificaatstore de thumbprint al op tijdens het certificaatopzoeken, dus de Windows-backend had nooit een eigen implementatie nodig

Wie een hash voor nieuwe code zoekt, zit hier niet goed. SHA-1 is ongeschikt waar botsingsweerstand ertoe doet, waaronder documentdigests, signed attributes en integriteitscontroles. Gebruik in plaats daarvan FPdfSha256, of FPdfSha512 of FPdfSha3 waar een langere of een andere digestfamilie gewenst is

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11