CMS_GET0_RECIPIENTINFOS(3SSL)

الاسم
CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id, CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kari_set0_pkey_and_peer, CMS_RecipientInfo_kari_set0_pkey, CMS_RecipientInfo_kari_get0_ctx, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_kemri_cert_cmp, CMS_RecipientInfo_kemri_set0_pkey, CMS_RecipientInfo_kemri_get0_ctx, CMS_RecipientInfo_kemri_get0_kdf_alg, CMS_RecipientInfo_kemri_set_ukm, CMS_RecipientInfo_decrypt, CMS_RecipientInfo_encrypt \&- إجراءات CMS envelopedData RecipientInfo

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

 STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
 int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);

 int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,
                                           ASN1_OCTET_STRING **keyid,
                                           X509_NAME **issuer,
                                           ASN1_INTEGER **sno);
 int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
 int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);
 int CMS_RecipientInfo_kari_set0_pkey_and_peer(CMS_RecipientInfo *ri,
                                               EVP_PKEY *pk, X509 *peer);
 int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk);
 EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri);
 int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, X509_ALGOR **palg,
                                     ASN1_OCTET_STRING **pid,
                                     ASN1_GENERALIZEDTIME **pdate,
                                     ASN1_OBJECT **potherid,
                                     ASN1_TYPE **pothertype);
 int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri,
                                    const unsigned char *id, size_t idlen);
 int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri,
                                unsigned char *key, size_t keylen);
 int CMS_RecipientInfo_kemri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);
 int CMS_RecipientInfo_kemri_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk);
 EVP_CIPHER_CTX *CMS_RecipientInfo_kemri_get0_ctx(CMS_RecipientInfo *ri);
 X509_ALGOR *CMS_RecipientInfo_kemri_get0_kdf_alg(CMS_RecipientInfo *ri);
 int CMS_RecipientInfo_kemri_set_ukm(CMS_RecipientInfo *ri,
                                     const unsigned char *ukm,
                                     int ukmLength);

 int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
 int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);

الوصف
الدالة CMS_get0_RecipientInfos() تُرجع جميع بنى CMS_RecipientInfo المرتبطة ببنية CMS EnvelopedData.

CMS_RecipientInfo_type() تُرجع نوع بنية CMS_RecipientInfo ri. تُرجع حالياً CMS_RECIPINFO_TRANS، أو CMS_RECIPINFO_AGREE، أو CMS_RECIPINFO_KEK، أو CMS_RECIPINFO_PASS، أو CMS_RECIPINFO_KEM، أو CMS_RECIPINFO_OTHER.

CMS_RecipientInfo_ktri_get0_signer_id() تسترجع معرّف مستلم الشهادة المرتبط ببنية CMS_RecipientInfo محددة ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_TRANS. إما أن يُضبط معرّف المفتاح في keyid أو كلا اسم المُصدر والرقم التسلسلي في issuer و sno.

CMS_RecipientInfo_ktri_cert_cmp() تُقارن الشهادة cert مع بنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_TRANS. تُرجع صفراً إذا نجحت المقارنة وقيمة غير صفرية إذا لم تنجح.

CMS_RecipientInfo_set0_pkey() تُربط المفتاح الخاص pkey ببنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_TRANS.

CMS_RecipientInfo_kari_set0_pkey_and_peer() تُربط المفتاح الخاص pkey وشهادة النظير peer ببنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_AGREE.

CMS_RecipientInfo_kari_set0_pkey() تُربط المفتاح الخاص pkey ببنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_AGREE.

CMS_RecipientInfo_kari_get0_ctx() تُرجع EVP_CIPHER_CTX لمفتاح تعمية المفتاح، مما يسمح للمستدعي بتحديد شيفرة لف المفتاح. يجب أن تكون بنية CMS_RecipientInfo ri من نوع CMS_RECIPINFO_AGREE.

CMS_RecipientInfo_kekri_get0_id() تسترجع معلومات المفتاح من بنية CMS_RecipientInfo ri والتي يجب أن تكون من نوع CMS_RECIPINFO_KEK. يمكن أن تكون أي من المعاملات المتبقية NULL إذا لم يكن التطبيق مهتماً بقيمة حقل. حيثما كان الحقل اختيارياً وغائباً، يُكتب NULL في المعامل المقابل. يُكتب حقل keyEncryptionAlgorithm في palg، ويُكتب حقل keyIdentifier في pid، ويُكتب حقل date إذا كان موجوداً في pdate، وإذا كان حقل other موجوداً، تُكتب المكونات keyAttrId و keyAttr في المعاملين potherid و pothertype.

CMS_RecipientInfo_kekri_id_cmp() تُقارن المُعرّف في المعاملين id و idlen مع keyIdentifier لبنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_KEK. تُرجع صفراً إذا نجحت المقارنة وقيمة غير صفرية إذا لم تنجح.

CMS_RecipientInfo_set0_key() تُربط المفتاح المتناظر key بطول keylen ببنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_KEK.

CMS_RecipientInfo_kemri_cert_cmp() تُقارن الشهادة cert مع بنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_KEM. تُرجع صفراً إذا نجحت المقارنة وقيمة غير صفرية إذا لم تنجح.

CMS_RecipientInfo_kemri_set0_pkey() تُربط المفتاح الخاص pkey ببنية CMS_RecipientInfo ri، والتي يجب أن تكون من نوع CMS_RECIPINFO_KEM.

CMS_RecipientInfo_kemri_get0_ctx() تُرجع EVP_CIPHER_CTX لمفتاح تعمية المفتاح، مما يسمح للمستدعي بتحديد شيفرة لف المفتاح. يجب أن تكون بنية CMS_RecipientInfo ri من نوع CMS_RECIPINFO_KEM.

تُرجع CMS_RecipientInfo_kemri_get0_kdf_alg() X509_ALGOR لـ KDF الخاص بـ RecipientInfo، مما يسمح للمستدعي بتحديد خوارزمية KDF. يجب أن يكون هيكل CMS_RecipientInfo ri من النوع CMS_RECIPINFO_KEM. إذا لم يحدد المستدعي خوارزمية KDF، فسيُستخدم HKDF-SHA256.

تضبط CMS_RecipientInfo_kemri_set_ukm() مادة مفاتيح المستخدم الاختيارية (UKM) الخاصة بـ RecipientInfo. يُرمّز UKM، مع معلومات أخرى، في معامل OSSL_KDF_PARAM_INFO الخاص بـ KDF الخاص بـ RecipientInfo. يجب أن يكون هيكل CMS_RecipientInfo ri من النوع CMS_RECIPINFO_KEM.

CMS_RecipientInfo_decrypt() تُحاول فك تعمية بنية CMS_RecipientInfo ri في البنية cms. يجب أن يكون مفتاح قد ارتبط بالبنية أولاً.

CMS_RecipientInfo_encrypt() تُحاول تعمية بنية CMS_RecipientInfo ri في البنية cms. يجب أن يكون مفتاح قد ارتبط بالبنية أولاً ويجب أن يكون مفتاح تعمية المحتوى متاحاً: مثلاً باستدعاء سابق لـ CMS_RecipientInfo_decrypt().

ملاحظات
الغرض الرئيس من هذه الدوال هو تمكين تطبيق من البحث عن مفاتيح المستلم باستخدام أي تقنية مناسبة عندما لا تكون الطريقة الأبسط لـ CMS_decrypt() مناسبة.

في الاستخدام النمطي، سيسترد التطبيق جميع بنى CMS_RecipientInfo باستخدام CMS_get0_RecipientInfos() ويتحقق من نوع كل منها باستخدام CMS_RecipientInfo_type(). اعتماداً على النوع، يمكن تجاهل بنية CMS_RecipientInfo أو استرداد بيانات معرِّف مفتاحها باستخدام دالة مناسبة. ثم إذا أمكن الحصول على المفتاح السري أو الخاص المقابل بأي وسيلة مناسبة، فيمكن ربطه بالبنية واستدعاء CMS_RecipientInfo_decrypt(). إذا نجح ذلك، يمكن استدعاء CMS_decrypt() بمفتاح NULL لفك تعمية المحتوى المُغلَّف.

يمكن استخدام CMS_RecipientInfo_encrypt() لإضافة مستلم جديد إلى بنية بيانات مُغلَّفة موجودة. عادةً، سيقوم تطبيق أولاً بفك تعمية بنية CMS_RecipientInfo مناسبة لجعل مفتاح تعمية المحتوى متاحاً، ثم سيضيف مستلماً جديداً باستخدام دالة مثل CMS_add1_recipient_cert() وأخيراً سيعمي مفتاح تعمية المحتوى باستخدام CMS_RecipientInfo_encrypt().

القيم المُرجعة
CMS_get0_RecipientInfos() تُرجع جميع بنى CMS_RecipientInfo، أو NULL إذا حدث خطأ.

CMS_RecipientInfo_ktri_get0_signer_id(), CMS_RecipientInfo_set0_pkey(), CMS_RecipientInfo_kekri_get0_id(), CMS_RecipientInfo_set0_key(), CMS_RecipientInfo_kemri_set0_pkey(), CMS_RecipientInfo_kemri_set_ukm(), CMS_RecipientInfo_decrypt() و CMS_RecipientInfo_encrypt() تُرجع 1 للنجاح أو 0 إذا حدث خطأ.

CMS_RecipientInfo_ktri_cert_cmp(), CMS_RecipientInfo_kemri_cert_cmp() و CMS_RecipientInfo_kekri_cmp() تُرجع 0 لمقارنة ناجحة وقيمة غير صفرية بخلاف ذلك.

تُرجع CMS_RecipientInfo_kemri_get0_ctx() و CMS_RecipientInfo_kari_get0_ctx EVP_CIPHER_CTX الخاص بـ RecipientInfo أو NULL إذا حدث خطأ.

تُرجع CMS_RecipientInfo_kemri_get0_kdf_alg() X509_ALGOR الخاص بـ KDF الخاص بـ RecipientInfo أو NULL إذا حدث خطأ.

يمكن الحصول على أي خطأ من ERR_get_error(3).

انظر أيضًا
ERR_get_error(3)، CMS_decrypt(3)

التاريخ
CMS_RecipientInfo_kari_set0_pkey_and_peer و CMS_RecipientInfo_kari_set0_pkey أُضيفتا في OpenSSL 3.0.

CMS_RecipientInfo_kemri_cert_cmp, CMS_RecipientInfo_kemri_set0_pkey, CMS_RecipientInfo_kemri_get0_ctx, CMS_RecipientInfo_kemri_get0_kdf_alg و CMS_RecipientInfo_kemri_set_ukm أُضيفت في OpenSSL 3.6.

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