EVP_PKEY_DERIVE(3SSL)

الاسم
EVP_PKEY_derive_init, EVP_PKEY_derive_init_ex, EVP_PKEY_derive_set_peer_ex, EVP_PKEY_derive_set_peer, EVP_PKEY_derive, EVP_PKEY_derive_SKEY - اشتقاق السر المشترك لخوارزمية المفتاح العام

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

 int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
 int EVP_PKEY_derive_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]);
 int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer,
                                 int validate_peer);
 int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
 int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
 EVP_SKEY *EVP_PKEY_derive_SKEY(EVP_PKEY_CTX *ctx, EVP_SKEYMGMT *mgmt,
                                const char *key_type, const char *propquery,
                                size_t keylen, const OSSL_PARAM params[]);

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

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

EVP_PKEY_derive_set_peer_ex() تُعين مفتاح النظير: سيكون هذا عادةً مفتاحًا عامًا. سيتحقق validate_peer من صحة المفتاح العام إذا كانت هذه القيمة غير صفرية.

EVP_PKEY_derive_set_peer() مماثلة لـ EVP_PKEY_derive_set_peer_ex() مع تعيين validate_peer إلى 1.

EVP_PKEY_derive() يشتق سرًا مشتركًا باستخدام ctx. إذا كان key فارغًا، فسيُكتب الحجم الأقصى للمخزن المؤقت للمخرجات إلى المعامل keylen. إذا لم يكن key فارغًا، فيجب أن يحتوي المعامل keylen قبل الاستدعاء على طول المخزن المؤقت key، وإذا كان الاستدعاء ناجحًا، فسيُكتب السر المشترك إلى key وكمية البيانات المكتوبة إلى keylen.

EVP_PKEY_derive_SKEY() مماثلة لـ EVP_PKEY_derive() ولكنها تُرجع كائن EVP_SKEY يُخزن البيانات المُعمَّاة للمفتاح المُشتق. إذا تم تمرير وسيطة EVP_SKEYMGMT، فسيتم استخدامها صراحةً لإنشاء EVP_SKEY. وإلا، فسيتم جلب كائن EVP_SKEYMGMT المستخدم لـ EVP_SKEY وفقًا لـ skeymgmtname وpropquery. إذا كان skeymgmtname فارغًا، فسيُفترض الاسم المطابق لاسم طريقة تبادل المفاتيح.

ملاحظات
بعد استدعاء EVP_PKEY_derive_init()، يمكن إجراء عمليات تحكم خاصة بالخوارزمية لتعيين أي معاملات مناسبة للعملية.

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

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

EVP_PKEY_derive_SKEY() تُرجع كائن EVP_SKEY مُنشأ حديثًا عند النجاح أو NULL عند الفشل.

أمثلة
اشتقاق السر المشترك (على سبيل المثال مفاتيح DH أو EC):

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

 EVP_PKEY_CTX *ctx;
 ENGINE *eng;
 unsigned char *skey;
 size_t skeylen;
 EVP_PKEY *pkey, *peerkey;
 /* NB: assumes pkey, eng, peerkey have been already set up */

 ctx = EVP_PKEY_CTX_new(pkey, eng);
 if (!ctx)
     /* Error occurred */
 if (EVP_PKEY_derive_init(ctx) <= 0)
     /* Error */
 if (EVP_PKEY_derive_set_peer(ctx, peerkey) <= 0)
     /* Error */

 /* Determine buffer length */
 if (EVP_PKEY_derive(ctx, NULL, &skeylen) <= 0)
     /* Error */

 skey = OPENSSL_malloc(skeylen);

 if (!skey)
     /* malloc failure */

 if (EVP_PKEY_derive(ctx, skey, &skeylen) <= 0)
     /* Error */

 /* Shared secret is skey bytes written to buffer skey */

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

التاريخ
الدوال EVP_PKEY_derive_init() وEVP_PKEY_derive_set_peer() وEVP_PKEY_derive() أُضيفت أصلاً في OpenSSL 1.0.0.

الدوال EVP_PKEY_derive_init_ex() وEVP_PKEY_derive_set_peer_ex() أُضيفت في OpenSSL 3.0.

الدالة EVP_PKEY_derive_SKEY() أُضيفت في OpenSSL 3.6.

حقوق النسخ
حقوق النشر 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.