EVP_PKEY_DECRYPT(3SSL)

الاسم
EVP_PKEY_decrypt_init, EVP_PKEY_decrypt_init_ex, EVP_PKEY_decrypt - فك التعمية باستخدام خوارزمية مفتاح عام

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

 int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);
 int EVP_PKEY_decrypt_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
 int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,
                      unsigned char *out, size_t *outlen,
                      const unsigned char *in, size_t inlen);

الوصف
الدالة EVP_PKEY_decrypt_init() تُهيئ سياق خوارزمية مفتاح عام باستخدام المفتاح pkey لعملية فك تعمية.

الدالة EVP_PKEY_decrypt_init_ex() تُهيئ سياق خوارزمية مفتاح عام باستخدام المفتاح pkey لعملية فك تعمية وتضبط params الخاصة بالخوارزمية.

الدالة EVP_PKEY_decrypt() تُنفذ عملية فك تعمية بمفتاح عام باستخدام ctx. تُحدد البيانات المراد فك تعميتها باستخدام المعاملين in وinlen. إذا كان out هو NULL، يُكتب الحجم الأدنى المطلوب للمخزن المؤقت للمخرجات إلى المعامل *outlen.

إذا لم يكن out هو NULL، فيجب قبل الاستدعاء أن يحتوي المعامل *outlen على طول المخزن المؤقت out. إذا نجح الاستدعاء، تُكتب البيانات المفكوكة إلى out ويُكتب مقدار البيانات المفكوكة إلى *outlen، وإلا يُعاد خطأ.

ملاحظات
بعد استدعاء EVP_PKEY_decrypt_init()، يمكن تنفيذ عمليات تحكم خاصة بالخوارزمية لضبط أي معاملات مناسبة للعملية. يمكن تضمين هذه العمليات في استدعاء EVP_PKEY_decrypt_init_ex().

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

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

تحذيرات
في إصدارات OpenSSL قبل 3.2.0، عند استخدامها في حشو PKCS#1 v1.5، قدمت كل من قيمة الإرجاع من EVP_PKEY_decrypt() وoutlen معلومات مفيدة في شن هجوم Bleichenbacher ضد المفتاح الخاص المستخدم. كان يجب معالجتها بطريقة خالية من القنوات الجانبية.

منذ الإصدار 3.2.0، تُنفذ طريقة EVP_PKEY_decrypt() عند استخدامها مع حشو PKCS#1 v1.5 كما هو مطبق في المزود default آلية الرفض الضمني (انظر OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION في provider-asym_cipher(7)). هذا يعني أنها لا تُعيد خطأ عند اكتشاف خطأ في الحشو، بل تُعيد رسالة مولدة بشكل شبه عشوائي، مما يلغي الحاجة إلى كود آمن من القنوات الجانبية من التطبيقات التي تستخدم OpenSSL. إذا تم تكوين OpenSSL لاستخدام مزود لا يُنفذ الرفض الضمني، فلا يزال الكود بحاجة إلى معالجة القيم المُعادة باستخدام كود خالٍ من القنوات الجانبية. يمكن إجراء معالجة خالية من القنوات الجانبية لمكدس الأخطاء باستخدام إما زوج من استدعاءات ERR_set_mark(3) وERR_pop_to_mark(3) غير المشروطة أو باستخدام استدعاء ERR_clear_error(3).

أمثلة
فك تعمية البيانات باستخدام OAEP (لمفاتيح RSA):

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

 EVP_PKEY_CTX *ctx;
 ENGINE *eng;
 unsigned char *out, *in;
 size_t outlen, inlen;
 EVP_PKEY *key;

 /*
  * NB: assumes key, eng, in, inlen are already set up
  * and that key is an RSA private key
  */
 ctx = EVP_PKEY_CTX_new(key, eng);
 if (!ctx)
     /* Error occurred */
 if (EVP_PKEY_decrypt_init(ctx) <= 0)
     /* Error */
 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING) <= 0)
     /* Error */

 /* Determine buffer length */
 if (EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen) <= 0)
     /* Error */

 out = OPENSSL_malloc(outlen);

 if (!out)
     /* malloc failure */

 if (EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen) <= 0)
     /* Error */

 /* Decrypted data is outlen bytes written to buffer out */

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

التاريخ
أُضيفت هذه الدوال في OpenSSL 1.0.0.

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