.\" -*- coding: UTF-8 -*- .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .de IX .. .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .if n .ds AD l .\" .\" Required to disable full justification in groff 1.23.0. .\" ======================================================================== .\" .IX Title "EVP_PKEY_SIGN 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EVP_PKEY_SIGN 3ssl "7 أبريل 2026" 3.6.2 OpenSSL .if n .ad l .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .nh .SH الاسم EVP_PKEY_sign_init, EVP_PKEY_sign_init_ex, EVP_PKEY_sign_init_ex2, EVP_PKEY_sign, EVP_PKEY_sign_message_init, EVP_PKEY_sign_message_update, EVP_PKEY_sign_message_final \- التوقيع باستخدام خوارزمية مفتاح عام .SH موجز .IX Header موجز .Vb 1 \& #include \& \& int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_sign_init_ex(EVP_PKEY_CTX *ctx, const OSSL_PARAM params[]); \& int EVP_PKEY_sign_init_ex2(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, \& const OSSL_PARAM params[]); \& int EVP_PKEY_sign_message_init(EVP_PKEY_CTX *ctx, EVP_SIGNATURE *algo, \& const OSSL_PARAM params[]); \& int EVP_PKEY_sign_message_update(EVP_PKEY_CTX *ctx, \& unsigned char *in, size_t inlen); \& int EVP_PKEY_sign_message_final(EVP_PKEY_CTX *ctx, unsigned char *sig, \& size_t *siglen, size_t sigsize); \& int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, \& unsigned char *sig, size_t *siglen, \& const unsigned char *tbs, size_t tbslen); .Ve .SH الوصف .IX Header الوصف \&\fBEVP_PKEY_sign_init()\fP يُهيئ سياق خوارزمية مفتاح عام \fIctx\fP للتوقيع باستخدام الخوارزمية المُعطاة عند إنشاء السياق باستخدام \fBEVP_PKEY_CTX_new\fP\|(3) أو متغيراتها. تُستخدم الخوارزمية لجلب طريقة \fBEVP_SIGNATURE\fP ضمنيًا، انظر "الجلب الضمني" في \fBprovider\fP\|(7) لمزيد من المعلومات حول الجلب الضمني. .PP \&\fBEVP_PKEY_sign_init_ex()\fP هو نفسه \fBEVP_PKEY_sign_init()\fP لكنه يُعين بالإضافة إلى ذلك المُعاملات الممررة \fIparams\fP على السياق قبل الإرجاع. .PP \&\fBEVP_PKEY_sign_init_ex2()\fP يُهيئ سياق خوارزمية مفتاح عام \fIctx\fP لتوقيع ملخص رسالة محسوب مسبقًا باستخدام الخوارزمية المُعطاة بواسطة \fIalgo\fP والمفتاح المُعطى عبر \fBEVP_PKEY_CTX_new\fP\|(3) أو \fBEVP_PKEY_CTX_new_from_pkey\fP\|(3). لا يمكن استخدام سياق \fIctx\fP بدون مفتاح مُحمّل مسبقًا مع هذه الدالة. توفر هذه الدالة نفس الوظيفة تقريبًا مثل \fBEVP_PKEY_sign_init_ex()\fP، لكنها مخصصة بشكل فريد للاستخدام مع ملخص رسالة محسوب مسبقًا، وتسمح بتحديد الشروط الدقيقة لذلك الملخص مسبقًا، إذا جُلبت خوارزمية توقيع مركبة (مثل RSA\-SHA256). بعد استدعاء هذه الدالة، لا يُدعم عادةً تعيين مُعاملات تُعدل تنفيذ الملخص أو الحشو. .PP \&\fBEVP_PKEY_sign_message_init()\fP يُهيئ سياق خوارزمية مفتاح عام \fIctx\fP لتوقيع رسالة ذات حجم غير محدود باستخدام الخوارزمية المُعطاة بواسطة \fIalgo\fP والمفتاح المُعطى عبر \fBEVP_PKEY_CTX_new\fP\|(3) أو \fBEVP_PKEY_CTX_new_from_pkey\fP\|(3). يُدعم تمرير الرسالة بطريقة لمرة واحدة باستخدام \&\fBEVP_PKEY_sign()\fP، وعبر الجمع بين \fBEVP_PKEY_sign_message_update()\fP و \fBEVP_PKEY_sign_message_final()\fP. تُمكّن هذه الدالة من استخدام خوارزميات يمكنها معالجة إدخال بطول عشوائي، مثل ED25519 و RSA\-SHA256 وما شابه. .PP \&\fBEVP_PKEY_sign_message_update()\fP يُضيف \fIinlen\fP بايت من \fIin\fP إلى البيانات المُراد معالجتها للتوقيع. يُحدد مواصفات وتنفيذ خوارزمية التوقيع كيفية معالجة بايتات الإدخال وما إذا كان هناك حد للحجم الكلي للإدخال. انظر "ملاحظات" أدناه لشرح أعمق. .PP \&\fBEVP_PKEY_sign_message_final()\fP يُوقع البيانات المُعالجة ويضع البيانات في \&\fIsig\fP، وعدد بايتات التوقيع في \fI*siglen\fP، إذا لم يتجاوز عدد البايتات الحجم المُعطى بواسطة \fIsigsize\fP. يمكن أن يكون \&\fIsig\fP NULL، وفي هذه الحالة، يُحدث فقط \fI*siglen\fP بعدد بايتات التوقيع. .PP \&\fBEVP_PKEY_sign()\fP هي دالة لمرة واحدة يمكن استخدامها مع جميع دوال التهيئة أعلاه. عندما أُجريت التهيئة باستخدام \fBEVP_PKEY_sign_init()\fP أو \fBEVP_PKEY_sign_init_ex()\fP أو \fBEVP_PKEY_sign_init_ex2()\fP، تُوقع البيانات المُحددة بواسطة \fItbs\fP و \fItbslen\fP بعد الحشو المناسب. عندما أُجريت التهيئة باستخدام \fBEVP_PKEY_sign_message_init()\fP، تُهضم البيانات المُحددة بواسطة \fItbs\fP و \fItbslen\fP بواسطة خوارزمية ملخص الرسالة الضمنية، ويُوقع الناتج بعد الحشو المناسب. إذا كان \fIsig\fP NULL، يُكتب الحجم الأقصى للمخزن الناتج إلى المُعامل \&\fIsiglen\fP. إذا لم يكن \fIsig\fP NULL، فيجب أن يحتوي المُعامل \fIsiglen\fP قبل الاستدعاء على طول مخزن \fIsig\fP، وإذا كان الاستدعاء ناجحًا، يُكتب التوقيع إلى \fIsig\fP وتُكتب كمية البيانات إلى \fIsiglen\fP. .SH ملاحظات .IX Header ملاحظات .SS عام .IX Subsection عام بعض تطبيقات التوقيع تُراكم بيانات الإدخال فقط ولا تُجري معالجة إضافية قبل توقيعها (تتوقع أن يكون الإدخال ملخصًا)، بينما تضغط أخرى البيانات، عادةً بإنتاج ملخص داخليًا، وتوقع الناتج. بعضها يدعم كلا وضعي التشغيل في نفس الوقت. يُتوقع من المستدعي معرفة كيف يجب أن تتصرف الخوارزمية المُختارة وتحت أي ظروف. .PP على سبيل المثال، يمكن توقع أن يتوقع تطبيق RSA فقط ملخص رسالة كإدخال، بينما يمكن توقع أن يعالج ED25519 الإدخال بتجزئة، أي إنتاج ملخص الرسالة داخليًا، وبينما يمكن توقع أن يتعامل RSA\-SHA256 مع أي من وضعي التشغيل، اعتمادًا على ما إذا أُهيئت العملية باستخدام \fBEVP_PKEY_sign_init_ex2()\fP أو باستخدام \fBEVP_PKEY_sign_message_init()\fP. .PP بالمثل، يتوقع تنفيذ RSA عادةً ضبط تفاصيل إضافية، مثل خوارزمية خلاصة الرسالة التي يُفترض معالجة الإدخال بها، بالإضافة إلى وضع الحشو (padding) (انظر \fBEVP_PKEY_CTX_set_signature_md\fP\|(3) و \&\fBEVP_PKEY_CTX_set_rsa_padding\fP\|(3) وغيرها من الوظائف المماثلة)، بينما يحتوي تنفيذ RSA\-SHA256 عادةً على هذه التفاصيل محددة مسبقاً وغير قابلة للتغيير. .PP لا يمكن استخدام الدوال الموصوفة هنا لدمج خوارزميات منفصلة. على وجه الخصوص، لا يمكن استخدام \fBEVP_PKEY_CTX_set_signature_md\fP\|(3) ولا مُعامل \fBOSSL_PARAM\fP "digest" (\fBOSSL_SIGNATURE_PARAM_DIGEST\fP) لدمج خوارزمية توقيع مع خوارزمية تجزئة لمعالجة الإدخال. بعبارة أخرى، ليس من الممكن تحديد \fIctx\fP مُحمّل مسبقًا بمفتاح RSA، أو \fIalgo\fP جلب \f(CW\*(C`RSA\*(C'\fP ومحاولة تحديد SHA256 بشكل منفصل للحصول على وظيفة RSA\-SHA256. إذا كان دمج الخوارزميات بهذه الطريقة مرغوبًا، يُرجى استخدام \fBEVP_DigestSignInit\fP\|(3) والدوال المرتبطة. .SS "أداء توقيعات متعددة" .IX Subsection "أداء توقيعات متعددة" عند التهيئة باستخدام \fBEVP_PKEY_sign_init_ex()\fP أو \fBEVP_PKEY_sign_init_ex2()\fP، يمكن استدعاء \&\fBEVP_PKEY_sign()\fP أكثر من مرة على نفس السياق لإجراء عدة عمليات لمرة واحدة باستخدام نفس المُعاملات. .PP عند التهيئة باستخدام \fBEVP_PKEY_sign_message_init()\fP، ليس من الممكن استدعاء \fBEVP_PKEY_sign()\fP عدة مرات. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" جميع الدوال تُرجع 1 للنجاح و 0 أو قيمة سالبة للفشل. .PP على وجه الخصوص، قد تُرجع \fBEVP_PKEY_sign_init()\fP ومتغيراتها الأخرى \-2 للإشارة إلى أن العملية غير مدعومة من قبل خوارزمية المفتاح العام. .SH أمثلة .IX Header أمثلة .SS "RSA مع حشوة PKCS#1 لـ SHA256" .IX Subsection "RSA مع حشوة PKCS#1 لـ SHA256" توقيع البيانات باستخدام RSA مع حشو PKCS#1 وملخص SHA256 كإدخال: .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& /* md is a SHA\-256 digest in this example. */ \& unsigned char *md, *sig; \& size_t mdlen = 32, siglen; \& EVP_PKEY *signing_key; \& \& /* \& * NB: assumes signing_key and md are set up before the next \& * step. signing_key must be an RSA private key and md must \& * point to the SHA\-256 digest to be signed. \& */ \& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); \& if (ctx == NULL) \& /* Error occurred */ \& if (EVP_PKEY_sign_init(ctx) <= 0) \& /* Error */ \& if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) \& /* Error */ \& if (EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256()) <= 0) \& /* Error */ \& \& /* Determine buffer length */ \& if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0) \& /* Error */ \& \& sig = OPENSSL_malloc(siglen); \& \& if (sig == NULL) \& /* malloc failure */ \& \& if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0) \& /* Error */ \& \& /* Signature is siglen bytes written to buffer sig */ .Ve .SS "RSA\-SHA256 مع ملخص محسوب مسبقًا" .IX Subsection "RSA\-SHA256 مع ملخص محسوب مسبقًا" وقع ملخصًا باستخدام RSA\-SHA256 باستخدام دوال اللقطة الواحدة. يُلاحظ أن RSA\-SHA256 يُفترض أن يكون تطبيقًا لـ \f(CW\*(C`sha256WithRSAEncryption\*(C'\fP، حيث يكون الحشو محددًا مسبقًا ليكون \fBRSA_PKCS1_PADDING\fP، ويُفترض أن الملخص المُدخل قد حُسب باستخدام SHA256. .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& /* md is a SHA\-256 digest in this example. */ \& unsigned char *md, *sig; \& size_t mdlen = 32, siglen; \& EVP_PKEY *signing_key; \& \& /* \& * NB: assumes signing_key and md are set up before the next \& * step. signing_key must be an RSA private key and md must \& * point to the SHA\-256 digest to be signed. \& */ \& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); \& alg = EVP_SIGNATURE_fetch(NULL, "RSA\-SHA256", NULL); \& \& if (ctx == NULL) \& /* Error occurred */ \& if (EVP_PKEY_sign_init_ex2(ctx, alg, NULL) <= 0) \& /* Error */ \& \& /* Determine buffer length */ \& if (EVP_PKEY_sign(ctx, NULL, &siglen, md, mdlen) <= 0) \& /* Error */ \& \& sig = OPENSSL_malloc(siglen); \& \& if (sig == NULL) \& /* malloc failure */ \& \& if (EVP_PKEY_sign(ctx, sig, &siglen, md, mdlen) <= 0) \& /* Error */ \& \& /* Signature is siglen bytes written to buffer sig */ .Ve .SS "RSA\-SHA256، طلقة واحدة" .IX Subsection "RSA\-SHA256، طلقة واحدة" وقع مستندًا باستخدام RSA\-SHA256 باستخدام دوال اللقطة الواحدة. يُلاحظ أن RSA\-SHA256 يُفترض أن يكون تطبيقًا لـ \&\f(CW\*(C`sha256WithRSAEncryption\*(C'\fP، حيث يكون الحشو محددًا مسبقًا ليكون \&\fBRSA_PKCS1_PADDING\fP. .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& /* in is the input in this example. */ \& unsigned char *in, *sig; \& /* inlen is the length of the input in this example. */ \& size_t inlen, siglen; \& EVP_PKEY *signing_key; \& EVP_SIGNATURE *alg; \& \& /* \& * NB: assumes signing_key, in and inlen are set up before \& * the next step. signing_key must be an RSA private key, \& * in must point to data to be digested and signed, and \& * inlen must be the size of the data in bytes. \& */ \& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); \& alg = EVP_SIGNATURE_fetch(NULL, "RSA\-SHA256", NULL); \& \& if (ctx == NULL || alg == NULL) \& /* Error occurred */ \& if (EVP_PKEY_sign_message_init(ctx, alg, NULL) <= 0) \& /* Error */ \& \& /* Determine sig buffer length */ \& if (EVP_PKEY_sign(ctx, NULL, &siglen, in, inlen) <= 0) \& /* Error */ \& \& sig = OPENSSL_malloc(siglen); \& \& if (sig == NULL) \& /* malloc failure */ \& \& if (EVP_PKEY_sign(ctx, sig, &siglen, in, inlen) <= 0) \& /* Error */ \& \& /* Signature is siglen bytes written to buffer sig */ .Ve .SS "RSA\-SHA256، باستخدام التحديث والنهاية" .IX Subsection "RSA\-SHA256، باستخدام التحديث والنهاية" هذا مماثل للمثال السابق، لكن مع السماح بوظيفية شبيهة بالدفق. .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& /* in is the input in this example. */ \& unsigned char *in, *sig; \& /* inlen is the length of the input in this example. */ \& size_t inlen, siglen; \& EVP_PKEY *signing_key; \& EVP_SIGNATURE *alg; \& \& /* \& * NB: assumes signing_key, in and inlen are set up before \& * the next step. signing_key must be an RSA private key, \& * in must point to data to be digested and signed, and \& * inlen must be the size of the data in bytes. \& */ \& ctx = EVP_PKEY_CTX_new(signing_key, NULL /* no engine */); \& alg = EVP_SIGNATURE_fetch(NULL, "RSA\-SHA256", NULL); \& \& if (ctx == NULL || alg == NULL) \& /* Error occurred */ \& if (EVP_PKEY_sign_message_init(ctx, alg, NULL) <= 0) \& /* Error */ \& \& while (inlen > 0) { \& if (EVP_PKEY_sign_message_update(ctx, in, inlen)) <= 0) \& /* Error */ \& if (inlen > 256) { \& inlen \-= 256; \& in += 256; \& } else { \& inlen = 0; \& } \& } \& \& /* Determine sig buffer length */ \& if (EVP_PKEY_sign_message_final(ctx, NULL, &siglen) <= 0) \& /* Error */ \& \& sig = OPENSSL_malloc(siglen); \& \& if (sig == NULL) \& /* malloc failure */ \& \& if (EVP_PKEY_sign_message_final(ctx, sig, &siglen) <= 0) \& /* Error */ \& \& /* Signature is siglen bytes written to buffer sig */ .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBEVP_PKEY_CTX_new\fP\|(3), \&\fBEVP_PKEY_CTX_ctrl\fP\|(3), \&\fBEVP_PKEY_encrypt\fP\|(3), \&\fBEVP_PKEY_decrypt\fP\|(3), \&\fBEVP_PKEY_verify\fP\|(3), \&\fBEVP_PKEY_verify_recover\fP\|(3), \&\fBEVP_PKEY_derive\fP\|(3) .SH التاريخ .IX Header التاريخ أُضيفت الدالتان \fBEVP_PKEY_sign_init()\fP و \fBEVP_PKEY_sign()\fP في OpenSSL 1.0.0. .PP الدالة \fBEVP_PKEY_sign_init_ex()\fP أُضيفت في OpenSSL 3.0. .PP أُضيفت الدوال \fBEVP_PKEY_sign_init_ex2()\fP و \fBEVP_PKEY_sign_message_init()\fP و \fBEVP_PKEY_sign_message_update()\fP و \&\fBEVP_PKEY_sign_message_final()\fP في OpenSSL 3.4. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2006\-2025 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة. .PP مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط . .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .