EVP_SIGNINIT(3SSL)

الاسم
EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal_ex, EVP_SignFinal \&- دوال التوقيع لـ EVP

موجز
 #include <openssl/evp.h>

 int EVP_SignInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
 int EVP_SignUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
 int EVP_SignFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,
                      EVP_PKEY *pkey, OSSL_LIB_CTX *libctx, const char *propq);
 int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *sig, unsigned int *s,
                   EVP_PKEY *pkey);

 void EVP_SignInit(EVP_MD_CTX *ctx, const EVP_MD *type);

الوصف
إجراءات التوقيع لـ EVP هي واجهة عالية المستوى للتوقيعات الرقمية.

EVP_SignInit_ex() تُهيئ سياق التوقيع ctx لاستخدام المُعمِّي \&type من ENGINE impl. يجب إنشاء ctx باستخدام \&EVP_MD_CTX_new() قبل استدعاء هذه الدالة.

EVP_SignUpdate() يُعمي cnt بايت من البيانات عند d في سياق التوقيع ctx. يمكن استدعاء هذه الدالة عدة مرات على نفس ctx لتضمين بيانات إضافية.

EVP_SignFinal_ex() يُوقع البيانات في ctx باستخدام المفتاح الخاص \&pkey ويضع التوقيع في sig. يُستخدم سياق المكتبة libctx واستعلام الخاصية propq عند إنشاء سياق لاستخدامه مع المفتاح \&pkey. يجب أن يكون حجم sig على الأقل EVP_PKEY_get_size(pkey) بايت. \&s هو معامل إخراج، ولا يُستخدم كمعامل إدخال. سيُكتب عدد بايتات البيانات المكتوبة (أي طول التوقيع) إلى العدد الصحيح عند s، وسيُكتب على الأكثر EVP_PKEY_get_size(pkey) بايت.

EVP_SignFinal() مشابه لـ EVP_SignFinal_ex() لكنه يستخدم قيمًا مبدئية NULL لسياق المكتبة libctx واستعلام الخاصية propq.

EVP_SignInit() يُهيئ سياق توقيع ctx لاستخدام التنفيذ المبدئي للمُعمِّي type.

القيم المُرجعة
EVP_SignInit_ex()، EVP_SignUpdate()، EVP_SignFinal_ex() و \&EVP_SignFinal() تُرجع 1 للنجاح و 0 للفشل.

يمكن الحصول على رموز الخطأ بواسطة ERR_get_error(3).

ملاحظات
ينبغي دائمًا استخدام واجهة EVP للتواقيع الرقمية بدلاً من الواجهات منخفضة المستوى. هذا لأن الكود يصبح حينها شفافًا للخوارزمية المستخدمة وأكثر مرونة بكثير.

عند التوقيع ببعض أنواع المفاتيح الخاصة، يجب تغذية مولد الأرقام العشوائية. إذا فشلت التغذية الآلية أو إعادة التغذية لـ CSPRNG الخاص بـ OpenSSL بسبب ظروف خارجية (انظر RAND(7))، ستفشل العملية.

استدعاء EVP_SignFinal() يُنهي داخليًا نسخة من سياق المُعمِّي. هذا يعني أن استدعاءات EVP_SignUpdate() و EVP_SignFinal() يمكن استدعاؤها لاحقًا لتعمية وتوقيع بيانات إضافية. يمكن للتطبيقات تعطيل هذا السلوك بتعيين علم السياق EVP_MD_CTX_FLAG_FINALISE عبر \&EVP_MD_CTX_set_flags(3).

بما أن نسخة فقط من سياق الملخص (digest context) هي التي تُنهى (finalized)، فيجب تنظيف السياق بعد الاستخدام عبر استدعاء EVP_MD_CTX_free()، وإلا سيحدث تسريب في الذاكرة.

لاحظ أنه ليست كل المزودات تدعم الاستمرار، في حال عدم السماح للمزود المختار بتكرار السياقات، سينهي EVP_SignFinal() سياق المُعمِّي وستؤدي محاولة معالجة بيانات إضافية عبر \&EVP_SignUpdate() إلى خطأ.

العلل
ذكرت الإصدارات الأقدم من هذا التوثيق خطأً أنه لا يمكن إجراء استدعاءات لـ \&EVP_SignUpdate() بعد استدعاء EVP_SignFinal().

بما أن المفتاح الخاص يُمرر في استدعاء EVP_SignFinal()، فلن يُشار إلى أي خطأ يتعلق بالمفتاح الخاص (مثل تركيبة غير مناسبة للمفتاح والمُعمِّي) إلا بعد تمرير كميات كبيرة محتملة من البيانات عبر EVP_SignUpdate().

لا يمكن تغيير معطيات التوقيع باستخدام هذه الدوال.

الخطآن السابقان تم إصلاحهما في دوال EVP_DigestSign*() الأحدث.

انظر أيضًا
EVP_PKEY_get_size(3)، EVP_PKEY_get_bits(3)، \&EVP_PKEY_get_security_bits(3)، \&EVP_VerifyInit(3)، \&EVP_DigestInit(3)، \&evp(7)، HMAC(3)، MD2(3)، \&MD5(3)، MDC2(3)، RIPEMD160(3)، \&SHA1(3)، openssl-dgst(1)

التاريخ
أُضيفت الدالة EVP_SignFinal_ex() في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2000-2023 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.