PDFium Component Docs

FPdfSha1 Moduł

Unit: FPdfSha1
Implementacja SHA-1 w czystym Pascalu z inkrementalnym kontekstem init/update/final i jednorazowymi funkcjami pomocniczymi, która istnieje po to, aby certyfikat dało się dopasować po jego odcisku 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 implementuje SHA-1 w czystym Pascalu, bez zależności poza SysUtils, więc biblioteka pozostaje samowystarczalna na każdym obsługiwanym kompilatorze. Funkcja kompresji trzyma się FIPS 180-4 6.1, a reguła dopełnienia z FIPS 180-4 5.1.1 uzupełnia komunikat do 56 mod 64 bajtów przed ośmioma bajtami długości w bitach zapisanymi big-endian. Odczyty i zapisy są bajt po bajcie jawnie big-endian, co utrzymuje identyczne wyniki na każdym procesorze, na który celuje biblioteka

Inkrementalne API SHA1Init / SHA1Update / SHA1Final haszuje wejście dostarczane fragmentami. SHA1Update przekazuje pełne bloki 64-bajtowe wprost do transformacji i buforuje w TSHA1Context tylko resztę, więc podanie jednego dużego bloku i podanie tych samych bajtów po kilka naraz daje ten sam skrót

SHA1Bytes i SHA1Of to jednorazowe funkcje pomocnicze działające na tablicy bajtów albo na nietypowanym buforze o podanej długości; puste TBytes jest akceptowane i haszowane jako pusty komunikat. SHA1Hex renderuje TSHA1Digest jako 40-znakowy szesnastkowy napis małymi literami, bo w tej postaci zwykle porównuje się odcisk certyfikatu

Functions

FunctionDescription
SHA1InitInicjalizuje kontekst haszujący do stanu początkowego z FIPS 180-4 5.3.1 i czyści jego bufor oraz liczniki
SHA1UpdatePodaje BufLen bajtów z nietypowanego bufora do otwartego kontekstu; zerowa długość jest operacją pustą
SHA1FinalNakłada dopełnienie i blok długości, po czym zwraca 20-bajtowy skrót
SHA1BytesJednorazowy skrót tablicy bajtów
SHA1OfJednorazowy skrót nietypowanego bufora o podanej długości
SHA1HexFormatuje skrót jako 40-znakowy szesnastkowy napis małymi literami

Types

TypeDescription
TSHA1Digest20-bajtowy skrót SHA-1, typ wyniku każdego punktu wejścia haszującego w tym module
TSHA1ContextInkrementalny kontekst haszujący: State przechowuje pięć słów roboczych, Buffer przechowuje częściowy 64-bajtowy blok komunikatu, BufCnt liczy bajty obecne aktualnie w tym buforze, a Length akumuluje łączną długość komunikatu w bajtach

Remarks

SHA-1 nie jest w tej bibliotece skrótem podpisu i nie może się nim stać. Stos PAdES podpisuje konsekwentnie SHA-256: zarówno dla skrótu komunikatu, jak i dla atrybutów podpisanych oraz żądania znacznika czasu. Nic ze ścieżki podpisywania nie powinno być przenoszone do tego modułu

FPdfSha1 istnieje dla jednego zadania: dopasowania certyfikatu do odcisku SHA-1, który niesie TPadesSignerOptions. Zaplecze tokenów otrzymuje certyfikat DER i musi samo wykonać to porównanie, więc haszuje DER przez SHA1Bytes i porównuje SHA1Hex ze skonfigurowanym odciskiem, bez rozróżniania wielkości liter. Na Windows magazyn certyfikatów rozwiązuje odcisk podczas wyszukiwania certyfikatu, więc zaplecze Windows nigdy nie potrzebowało własnej implementacji

Jeśli szukasz hasza do nowego kodu, to nie jest wybór ogólnego przeznaczenia. SHA-1 nie nadaje się tam, gdzie odporność na kolizje ma znaczenie, także dla skrótów dokumentów, atrybutów podpisanych i kontroli integralności. Użyj zamiast tego FPdfSha256, a tam, gdzie pożądany jest dłuższy skrót albo inna rodzina skrótów, FPdfSha512 lub FPdfSha3

See Also

FPdfSha256, FPdfSha512, FPdfSha3, FPdfCrypto, FPdfCryptoWin, FPdfPkcs11