EVP_PKEY_VERIFY_RECOVER(3ssl)

الاسم
EVP_PKEY_verify_recover_init, EVP_PKEY_verify_recover_init_ex, EVP_PKEY_verify_recover_init_ex2, EVP_PKEY_verify_recover - استعادة التوقيع باستخدام خوارزمية المفتاح العام

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

 int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);
 int EVP_PKEY_verify_recover_init_ex(EVP_PKEY_CTX *ctx,
                                     const OSSL_PARAM params[]);
 int EVP_PKEY_verify_recover_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo,
                                      const OSSL_PARAM params[]);
 int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,
                             unsigned char *rout, size_t *routlen,
                             const unsigned char *sig, size_t siglen);

الوصف
EVP_PKEY_verify_recover_init() يُهيئ سياق خوارزمية المفتاح العام ctx للتوقيع باستخدام الخوارزمية المُعطاة عند إنشاء السياق باستخدام EVP_PKEY_CTX_new(3) أو متغيراتها. تُستخدم الخوارزمية لجلب طريقة EVP_SIGNATURE ضمنيًا، انظر "الجلب الضمني" في provider(7) لمزيد من المعلومات حول الجلب الضمني.

EVP_PKEY_verify_recover_init_ex() مماثلة لـ EVP_PKEY_verify_recover_init() ولكنها تُعين أيضًا المُعاملات المُمررة params على السياق قبل الإرجاع.

EVP_PKEY_verify_recover_init_ex2() مماثلة لـ EVP_PKEY_verify_recover_init_ex()، ولكنها تعمل مع EVP_SIGNATURE algo مأخوذ صراحة. لا يمكن استخدام سياق ctx بدون مفتاح مُحمّل مسبقًا مع هذه الدالة. اعتمادًا على الخوارزمية التي جُلبت، قد تكون بعض التفاصيل المتعلقة بمعالجة المُدخل إلى EVP_PKEY_verify() مُحددة مسبقًا، وفي هذه الحالة، لا يمكن تغيير تلك التفاصيل عادةً. انظر "ملاحظات" أدناه للحصول على شرح أعمق.

الدالة EVP_PKEY_verify_recover() تستعيد البيانات المُوقعة باستخدام ctx. يُحدد التوقيع باستخدام المُعاملين sig و siglen. إذا كان rout فارغًا، يُكتب الحجم الأقصى للمُخزن المُخرج إلى المُعامل routlen. إذا لم يكن rout فارغًا، فيجب أن يحتوي المُعامل routlen قبل الاستدعاء على طول المُخزن rout، إذا كان الاستدعاء ناجحًا، تُكتب البيانات المستعادة إلى rout وتُكتب كمية البيانات إلى routlen.

ملاحظات
عادةً ما يهتم التطبيق فقط بما إذا كانت عملية التحقق من التوقيع ناجحة، في تلك الحالات يجب استخدام الدالة EVP_verify().

ومع ذلك، في بعض الأحيان يكون من المفيد الحصول على البيانات المُوقعة أصلاً باستخدام عملية التوقيع. فقط بعض خوارزميات المفتاح العام يمكنها استعادة توقيع بهذه الطريقة (مثل RSA في وضع حشو PKCS).

بعد استدعاء EVP_PKEY_verify_recover_init()، يمكن تنفيذ عمليات تحكم خاصة بالخوارزمية لتعيين أي مُعاملات مناسبة للعملية.

بعد استدعاء EVP_PKEY_verify_recover_init_ex2()، قد لا تكون عمليات التحكم الخاصة بالخوارزمية ضرورية إذا كانت الخوارزمية المُختارة تعني أن تلك الضوابط مُحددة مسبقًا (وغير قابلة للتغيير).

يمكن استدعاء الدالة EVP_PKEY_verify_recover() أكثر من مرة على نفس السياق إذا تم تنفيذ عدة عمليات باستخدام نفس المُعاملات.

القيم المُرجعة
EVP_PKEY_verify_recover_init() و EVP_PKEY_verify_recover() تُرجعان 1 للنجاح و 0 أو قيمة سالبة للفشل. على وجه الخصوص، تشير قيمة الإرجاع -2 إلى أن العملية غير مدعومة من قبل خوارزمية المفتاح العام.

أمثلة
استعادة الملخص المُوقع أصلاً باستخدام PKCS#1 وملخص SHA256:

 #include <openssl/evp.h>
 #include <openssl/rsa.h>

 EVP_PKEY_CTX *ctx;
 unsigned char *rout, *sig;
 size_t routlen, siglen;
 EVP_PKEY *verify_key;

 /*
  * NB: يفترض أن verify_key و sig و siglen قد أُعدت بالفعل
  * وأن verify_key هو مفتاح عام RSA
  */
 ctx = EVP_PKEY_CTX_new(verify_key, NULL /* لا محرك */);
 if (!ctx)
     /* حدث خطأ */
 if (EVP_PKEY_verify_recover_init(ctx) <= 0)
     /* خطأ */
 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
     /* خطأ */
 if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0)
     /* خطأ */

 /* تحديد طول المُخزن */
 if (EVP_PKEY_verify_recover(ctx, NULL, &routlen, sig, siglen) <= 0)
     /* خطأ */

 rout = OPENSSL_malloc(routlen);

 if (!rout)
     /* فشل malloc */

 if (EVP_PKEY_verify_recover(ctx, rout, &routlen, sig, siglen) <= 0)
     /* خطأ */

 /* البيانات المستعادة هي routlen بايت مكتوبة في المُخزن rout */

انظر أيضًا
EVP_PKEY_CTX_new(3), EVP_PKEY_encrypt(3), EVP_PKEY_decrypt(3), EVP_PKEY_sign(3), EVP_PKEY_verify(3), EVP_PKEY_derive(3)

التاريخ
أُضيفت الدالتان EVP_PKEY_verify_recover_init() و EVP_PKEY_verify_recover() في OpenSSL 1.0.0.

أُضيفت الدالة EVP_PKEY_verify_recover_init_ex() في OpenSSL 3.0.

حقوق النسخ
حقوق النشر 2013-2024 مؤلفو مشروع 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.