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 بـ Pascal خالص دون أي اعتماد يتجاوز SysUtils، فيبقى المكتبة مكتفية بذاتها على كل مترجم مدعوم؛ تتبع دالة الضغط FIPS 180-4 6.1، وتحشو قاعدة الحشو في FIPS 180-4 5.1.1 الرسالة حتى 56 mod 64 بايتًا قبل ثمانية بايتات من طول البتات بالترتيب كبير النهاية؛ وعمليات التحميل والتخزين صريحة البايت وبالترتيب كبير النهاية، فتبقى النتائج متطابقة على كل معالج تستهدفه المكتبة
تُجزِّئ واجهة SHA1Init / SHA1Update / SHA1Final التدريجية المدخلات المقدَّمة على دفعات؛ ويمرر SHA1Update كتل 64 بايت الكاملة مباشرة إلى دالة التحويل ولا يخزن سوى الباقي في TSHA1Context، لذا ينتج عن تغذية كتلة كبيرة واحدة وتغذية البايتات نفسها على دفعات صغيرة الملخص نفسه
يعمل SHA1Bytes و SHA1Of مساعدين بطلب واحد على مصفوفة بايتات أو مخزن غير مُنمَّط بطول معلوم؛ ويُقبل TBytes فارغ ويُجزَّأ بوصفه رسالة فارغة؛ ويصيغ SHA1Hex قيمة TSHA1Digest كسلسلة ست عشرية بحروف صغيرة من 40 محرفًا، وهي الصيغة التي تُقارن بها بصمة الشهادة عادةً
| الدالة | الوصف |
|---|---|
SHA1Init | تهيئ سياق تجزئة إلى الحالة الابتدائية في FIPS 180-4 5.3.1 وتمسح مخزنه وعداداته |
SHA1Update | تغذي سياقًا مفتوحًا بعدد BufLen بايت من مخزن غير مُنمَّط؛ والطول الصفر لا يفعل شيئًا |
SHA1Final | تطبق كتلة الحشو والطول ثم تعيد ملخص 20 بايت |
SHA1Bytes | تجزئة بطلب واحد لمصفوفة بايتات |
SHA1Of | تجزئة بطلب واحد لمخزن غير مُنمَّط بطول معلوم |
SHA1Hex | تنسق الملخص كسلسلة ست عشرية بحروف صغيرة من 40 محرفًا |
| النوع | الوصف |
|---|---|
TSHA1Digest | ملخص SHA-1 بطول 20 بايت، وهو نوع نتيجة كل نقاط دخول التجزئة في الوحدة |
TSHA1Context | سياق تجزئة تدريجي: يحمل State كلمات العمل الخمس، ويحمل Buffer كتلة الرسالة الجزئية البالغة 64 بايت، ويعد BufCnt البايتات الموجودة حاليًا في ذلك المخزن، ويراكم Length الطول الكلي للرسالة بالبايتات |
ليست SHA-1 ملخص توقيع في هذه المكتبة ويجب ألا تصبح كذلك؛ فحزمة PAdES توقّع بـ SHA-256 في كل موضع، سواء لملخص الرسالة أو السمات الموقَّعة أو طلب الطابع الزمني على حد سواء، ولا يجوز نقل أي شيء من مسار التوقيع إلى هذه الوحدة
وُجد FPdfSha1 لغرض واحد: مطابقة شهادة مع بصمة SHA-1 التي يحملها TPadesSignerOptions؛ فخلفية الرموز تستقبل شهادة DER وعليها إجراء تلك المقارنة بنفسها، فتُجزِّئ الـ DER بـ SHA1Bytes وتقارن SHA1Hex مع البصمة المضبوطة دون حساسية لحالة الأحرف؛ وفي Windows يحل مخزن الشهادات البصمة أثناء بحث الشهادة، فلم تحتد خلفية Windows يومًا إلى تنفيذ خاص بها
إذا كنت تبحث عن تجزئة لكود جديد، فهذه ليست الخيار العام؛ فلا تصلح SHA-1 في أي موضع تهم فيه مقاومة التصادم، بما في ذلك ملخصات المستندات والسمات الموقَّعة وفحوص السلامة؛ استخدم FPdfSha256 بدلًا منها، أو FPdfSha512 أو FPdfSha3 عندما تريد عائلة ملخصات أطول أو مختلفة