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, SHA-1'i SysUtils ötesinde hiçbir bağımlılık olmadan saf Pascal'da uygular; böylece kütüphane desteklenen her derleyicide kendi kendine yeterli kalır. Sıkıştırma işlevi FIPS 180-4 6.1'i izler ve FIPS 180-4 5.1.1'in dolgu kuralı, sekiz baytlık big-endian bit uzunluğundan önce iletiyi 56 mod 64 bayta doldurur. Yüklemeler ve saklamalar bayt bazında açık big-endian'dır; bu, sonuçların kütüphanenin hedeflediği her CPU'da özdeş kalmasını sağlar
Artımlı SHA1Init / SHA1Update / SHA1Final API'si parçalar halinde verilen girdiyi hash'ler. SHA1Update, bütün 64 baytlık blokları doğrudan dönüşüme geçirir ve kalanı yalnızca TSHA1Context içinde tamponlar; böylece tek seferde büyük bir blok vermekle aynı baytları birkaç parça halinde vermek aynı özeti üretir
SHA1Bytes ve SHA1Of, bir bayt dizisi ya da verilen uzunlukta türsüz bir tampon üzerinde çalışan tek seferlik yardımcılardır; boş bir TBytes kabul edilir ve boş ileti olarak hash'lenir. SHA1Hex, bir TSHA1Digest değerini küçük harfli 40 karakterlik bir hex dizesi olarak işler; sertifika parmak izleri normalde bu biçimde karşılaştırılır
| Function | Description |
|---|---|
SHA1Init | Bir hash bağlamını FIPS 180-4 5.3.1 başlangıç durumuna getirir ve tamponunu ile sayaçlarını temizler |
SHA1Update | Türsüz bir tampondan BufLen baytı açık bir bağlama verir; sıfır uzunluk işlemsizdir (no-op) |
SHA1Final | Dolgu ve uzunluk bloğunu uygular, ardından 20 baytlık özeti döndürür |
SHA1Bytes | Bir bayt dizisinin tek seferlik hash'i |
SHA1Of | Verilen uzunlukta türsüz bir tamponun tek seferlik hash'i |
SHA1Hex | Bir özeti küçük harfli 40 karakterlik hex dizesi olarak biçimlendirir |
| Type | Description |
|---|---|
TSHA1Digest | 20 baytlık SHA-1 özeti; birimdeki her hash giriş noktasının sonuç türü |
TSHA1Context | Artımlı hash bağlamı: State beş çalışma sözcüğünü tutar, Buffer eksik 64 baytlık ileti bloğunu tutar, BufCnt o anda tampondaki baytları sayar ve Length toplam ileti uzunluğunu bayt olarak biriktirir |
SHA-1 bu kütüphanede bir imzalama özeti değildir ve hiçbir zaman olmamalıdır. PAdES yığını; ileti özeti, imzalı öznitelikler ve zaman damgası isteği dahil her yerde SHA-256 ile imzalar. İmzalama yolundaki hiçbir şey bu birime taşınmamalıdır
FPdfSha1 tek bir iş için vardır: bir sertifikayı TPadesSignerOptions içindeki SHA-1 parmak iziyle eşleştirmek. Bir token arka ucu sertifika DER'ini alır ve bu karşılaştırmayı kendisi yapmak zorundadır; bu yüzden DER'i SHA1Bytes ile hash'ler ve SHA1Hex çıktısını yapılandırılmış parmak iziyle, büyük/küçük harf duyarsız olarak karşılaştırır. Windows'ta sertifika deposu parmak izini sertifika araması sırasında çözer; bu yüzden Windows arka ucunun hiç kendi uygulamasına gereksinim duyulmadı
Yeni kod için bir hash arıyorsanız bu, genel amaçlı seçim değildir. SHA-1; belge özetleri, imzalı öznitelikler ve bütünlük denetimleri dahil çarpışma direncinin önemli olduğu her yerde uygunsuzdur. Bunun yerine FPdfSha256 kullanın; daha uzun ya da farklı bir özet ailesi gerekiyorsa FPdfSha512 ya da FPdfSha3 kullanın