CMS_ENCRYPT(3SSL)

الاسم
CMS_encrypt_ex، CMS_encrypt - إنشاء بنية CMS envelopedData

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

 CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in,
                                 const EVP_CIPHER *cipher, unsigned int flags,
                                 OSSL_LIB_CTX *libctx, const char *propq);
 CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,
                              const EVP_CIPHER *cipher, unsigned int flags);

الوصف
CMS_encrypt_ex() تُنشئ وتُعيد بنية CMS EnvelopedData أو AuthEnvelopedData. certs هي قائمة شهادات المستلمين. in هو المحتوى الذي سيُعمّى. cipher هو التعمية التماثلي المستخدم. flags هي مجموعة اختيارية من الأعلام. سياق المكتبة libctx واستعلام الخاصية propq يُستخدمان داخليًا عند استرداد الخوارزميات من المزوّدين.

فقط الشهادات التي تحمل مفاتيح RSA أو Diffie-Hellman أو EC مدعومة بهذه الدالة.

EVP_des_ede3_cbc() (DES الثلاثي) هو الخوارزمية المختارة لاستخدام S/MIME لأن معظم العملاء سيدعمونها.

الخوارزمية المُمرّرة في معامل cipher يجب أن تدعم ترميز ASN1 لمعاملاتها. إذا كان وضع التعمية هو GCM، فتُستخدم بنية AuthEnvelopedData تحتوي على MAC. وإلا تُستخدم بنية EnvelopedData. حاليًا، متغيرات AES مع وضع GCM هي خوارزميات AEAD الوحيدة المدعومة.

العديد من المتصفحات تُنفّذ خيار "التوقيع والتعمية" وهو ببساطة envelopedData من S/MIME يحتوي على رسالة موقّعة من S/MIME. يمكن إنتاج هذا بسهولة بتخزين الرسالة الموقّعة من S/MIME في BIO ذاكرة وتمريرها إلى CMS_encrypt().

يمكن تمرير العلامات التالية في معامل flags.

إذا ضُبِطَ علم CMS_TEXT، يُلحَقُ رؤوس MIME للنوع text/plain في بداية البيانات.

عادةً ما يُحول المحتوى المزود إلى تنسيق MIME القياسي (كما تتطلبه مواصفات S/MIME) وإذا جرى ضبط CMS_BINARY فلا يحدث أي تحويل. يجب استخدام هذا الخيار إذا كانت البيانات المزودة بتنسيق ثنائي وإلا فإن التحويل سيفسدها. إذا جرى ضبط CMS_BINARY فسيجري تجاهل CMS_TEXT.

سيقوم OpenSSL مبدئيًا بتحديد شهادات المستلمين باستخدام اسم المصدر والرقم التسلسلي. إذا جرى ضبط CMS_USE_KEYID فسيستخدم قيمة معرف مفتاح الموضوع بدلاً من ذلك. سيحدث خطأ إذا كانت جميع شهادات المستلمين لا تحتوي على امتداد معرف مفتاح الموضوع.

إذا جرى ضبط علم CMS_STREAM، يُرجَع هيكل CMS_ContentInfo جزئي مناسب لتدفق الإدخال/الإخراج: لا تُقرَأ أي بيانات من BIO in.

إذا وُضع العلم CMS_PARTIAL، تُعاد بنية CMS_ContentInfo جزئية يمكن إضافة مستلمين وسمات إضافية إليها قبل الإيداع النهائي.

البيانات التي تُعمّى تُضمّن في بنية CMS_ContentInfo، ما لم يُضبط CMS_DETACHED فتُحذف. هذا نادر الاستخدام عمليًا ولا تدعمه SMIME_write_CMS().

إذا ضُبطت الراية CMS_STREAM، فإن بنية CMS_ContentInfo المعادة ليست كاملة، وإخراج محتوياتها عبر دالة لا تنهي بنية CMS_ContentInfo بشكل صحيح سيعطي نتائج لا يمكن التنبؤ بها.

تقوم عدة دوال بما في ذلك SMIME_write_CMS() و i2d_CMS_bio_stream() و PEM_write_bio_CMS_stream() بإنهاء البنية. بدلاً من ذلك، يمكن إجراء الإنهاء بالحصول على تدفق ASN1 BIO مباشرة باستخدام BIO_new_CMS().

المستلمون المُحدّدون في certs يستخدمون بنية معلومات CMS KeyTransRecipientInfo. KEKRecipientInfo مدعوم أيضًا باستخدام العلم CMS_PARTIAL و CMS_add0_recipient_key(). KEMRecipientInfo مدعوم أيضًا باستخدام العلم CMS_PARTIAL و CMS_add1_recipient().

المعامل certs قد يكون NULL إذا ضُبط CMS_PARTIAL وأُضيف المستلمون لاحقًا باستخدام CMS_add1_recipient() أو CMS_add1_recipient_cert() مع CMS_add0_recipient_key().

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

القيم المُرجعة
CMS_encrypt_ex() و CMS_encrypt() تُعيدان إما بنية CMS_ContentInfo أو NULL إذا حدث خطأ. يمكن الحصول على الخطأ من ERR_get_error(3).

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

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

العلم CMS_STREAM دُعم لأول مرة في OpenSSL 1.0.0.

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