.\" -*- 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_KEYGEN 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EVP_PKEY_KEYGEN 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_Q_keygen, EVP_PKEY_keygen_init, EVP_PKEY_paramgen_init, EVP_PKEY_generate, EVP_PKEY_CTX_set_cb, EVP_PKEY_CTX_get_cb, EVP_PKEY_CTX_get_keygen_info, EVP_PKEY_CTX_set_app_data, EVP_PKEY_CTX_get_app_data, EVP_PKEY_gen_cb, EVP_PKEY_paramgen, EVP_PKEY_keygen \&\- دوال توليد المفتاح والمعامل والتحقق .SH موجز .IX Header موجز .Vb 1 \& #include \& \& EVP_PKEY *EVP_PKEY_Q_keygen(OSSL_LIB_CTX *libctx, const char *propq, \& const char *type, ...); \& \& int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_generate(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); \& int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); \& int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); \& \& typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); \& \& void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); \& EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); \& \& int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); \& \& void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); \& void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); .Ve .SH الوصف .IX Header الوصف توليد المفاتيح يكون أحيانًا مباشرًا، فقط تُولَّد أرقام المفتاح وينتهي الأمر. لكن هناك أنواع مفاتيح معينة تحتاج إلى معاملات مفتاح، تُسمى غالبًا معاملات نطاق لكن لا تقتصر عليها، والتي تحتاج أيضًا إلى التوليد. بالإضافة إلى ذلك، قد يرغب المستدعي في تعيين معاملات توليد يقدمها المستخدم تؤثر بشكل أكبر على معامل المفتاح أو توليد المفتاح، مثل حجم المفتاح المطلوب. .PP للسماح بمرونة لكل ما وُصف للتو، يُقسم توليد معامل المفتاح والمفتاح إلى تهيئة لسياق خوارزمية المفتاح، ودوال لتعيين المعاملات التي يقدمها المستخدم، وأخيرًا دالة معامل المفتاح أو توليد المفتاح نفسها. .PP يجب إنشاء سياق خوارزمية المفتاح باستخدام \fBEVP_PKEY_CTX_new\fP\|(3) أو متغيراتها، انظر ذلك الدليل للتفاصيل. .PP \&\fBEVP_PKEY_keygen_init()\fP تُهيئ سياق خوارزمية مفتاح عام \fIctx\fP لعملية توليد مفتاح. .PP \&\fBEVP_PKEY_paramgen_init()\fP مشابهة لـ \fBEVP_PKEY_keygen_init()\fP باستثناء أن معاملات المفتاح تُولَّد. .PP بعد التهيئة، يمكن تقديم معاملات التوليد باستخدام \&\fBEVP_PKEY_CTX_ctrl\fP\|(3) أو \fBEVP_PKEY_CTX_set_params\fP\|(3)، أو أي دالة أخرى موصوفة في تلك الأدلة. .PP \&\fBEVP_PKEY_generate()\fP تُنفذ عملية التوليد، وتُكتب معاملات المفتاح أو المفتاح الناتج إلى \fI*ppkey\fP. إذا كان \fI*ppkey\fP NULL عند استدعاء هذه الدالة، فسيُخصص، ويجب تحريره بواسطة المستدعي عندما لا يعود مفيدًا، باستخدام \fBEVP_PKEY_free\fP\|(3). .PP \&\fBEVP_PKEY_paramgen()\fP و \fBEVP_PKEY_keygen()\fP تفعلان نفس الشيء تمامًا مثل \&\fBEVP_PKEY_generate()\fP، بعد التحقق من أن \fBEVP_PKEY_paramgen_init()\fP أو \fBEVP_PKEY_keygen_init()\fP المقابلة استُخدمت لتهيئة \fIctx\fP. هذه دوال أقدم محفوظة للتوافق مع الإصدارات السابقة. من الآمن استخدام \fBEVP_PKEY_generate()\fP بدلاً منها. .PP الدالة \fBEVP_PKEY_set_cb()\fP تعين استدعاء توليد المفتاح أو المعامل إلى \fIcb\fP. الدالة \fBEVP_PKEY_CTX_get_cb()\fP تُرجع استدعاء توليد المفتاح أو المعامل. .PP الدالة \fBEVP_PKEY_CTX_get_keygen_info()\fP تُرجع معاملات مرتبطة بعملية التوليد. إذا كان \fIidx\fP هو \-1، يُعاد العدد الإجمالي للمعاملات المتاحة. أي قيمة غير سالبة تُعيد قيمة ذلك المعامل. يجب استدعاء \fBEVP_PKEY_CTX_gen_keygen_info()\fP بقيمة غير سالبة لـ \&\fIidx\fP فقط داخل استدعاء التوليد. .PP إذا أعاد الاستدعاء 0، فتُلغى عملية توليد المفتاح ويحدث خطأ. قد يحدث هذا أثناء عملية تستغرق وقتًا حيث ينقر المستخدم على زر "إلغاء". .PP الدالتان \fBEVP_PKEY_CTX_set_app_data()\fP و \fBEVP_PKEY_CTX_get_app_data()\fP تربطان مؤشرًا معتمًا محددًا من التطبيق بكائن EVP_PKEY_CTX. .PP هذا المؤشر لا يُفسر بواسطة المكتبة وهو محجوز بالكامل لاستخدام التطبيق. قد يُستخدم لتخزين سياق أو حالة عشوائية تحتاج إلى أن تكون قابلة للوصول أينما كان EVP_PKEY_CTX المقابل متاحًا. .PP \&\fBEVP_PKEY_Q_keygen()\fP تُجرد من الاستخدام الصريح لـ \fBEVP_PKEY_CTX\fP مع توفير طريقة "سريعة" لكن محدودة لتوليد زوج مفاتيح غير متماثل جديد. توفر اختصارات للحالات البسيطة والشائعة لتوليد المفاتيح. كالمعتاد، يمكن تقديم سياق المكتبة \fIlibctx\fP واستعلام الخاصية \fIpropq\fP لجلب الخوارزميات من المزودين. إذا كان \fItype\fP هو \f(CW\*(C`RSA\*(C'\fP، يجب تقديم معامل \fBsize_t\fP لتحديد حجم مفتاح RSA. إذا كان \fItype\fP هو \f(CW\*(C`EC\*(C'\fP، يجب تقديم معامل سلسلة محارف لتحديد اسم منحنى EC. إذا كان \fItype\fP هو: \&\f(CW\*(C`ED25519\*(C'\fP, \&\f(CW\*(C`ED448\*(C'\fP, \&\f(CW\*(C`SM2\*(C'\fP, \&\f(CW\*(C`X25519\*(C'\fP, \&\f(CW\*(C`X448\*(C'\fP, \&\f(CW\*(C`ML\-DSA\-44\*(C'\fP, \&\f(CW\*(C`ML\-DSA\-65\*(C'\fP, \&\f(CW\*(C`ML\-DSA\-87\*(C'\fP, \&\f(CW\*(C`ML\-KEM\-512\*(C'\fP, \&\f(CW\*(C`ML\-KEM\-768\*(C'\fP, أو \&\f(CW\*(C`ML\-KEM\-1024\*(C'\fP فلا حاجة لمعاملات إضافية. قد تكون أنواع مفاتيح أخرى ممكنة إذا قدمها المزودون المحملون. قد تكون \fBEVP_PKEY_Q_keygen()\fP قابلة للاستخدام مع أنواع المفاتيح هذه طالما أنها لا تتطلب معاملات إضافية. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" \&\fBEVP_PKEY_keygen_init()\fP, \fBEVP_PKEY_paramgen_init()\fP, \fBEVP_PKEY_keygen()\fP و \&\fBEVP_PKEY_paramgen()\fP تُعيد 1 للنجاح و0 أو قيمة سالبة للفشل. على وجه الخصوص، قيمة الإرجاع \-2 تشير إلى أن العملية غير مدعومة من خوارزمية المفتاح العام. .PP \&\fBEVP_PKEY_Q_keygen()\fP تُعيد \fBEVP_PKEY\fP، أو NULL عند الفشل. .SH ملاحظات .IX Header ملاحظات بعد استدعاء \fBEVP_PKEY_keygen_init()\fP أو \fBEVP_PKEY_paramgen_init()\fP يمكن تنفيذ عمليات تحكم خاصة بالخوارزمية لتعيين أي معاملات مناسبة للعملية. .PP يمكن استدعاء الدالتين \fBEVP_PKEY_keygen()\fP و \fBEVP_PKEY_paramgen()\fP أكثر من مرة على نفس السياق إذا نُفذت عدة عمليات باستخدام نفس المعاملات. .PP يعتمد معنى المعاملات الممررة إلى رد النداء على الخوارزمية والتنفيذ المحدد للخوارزمية. قد لا يعطي بعضها أي معلومات مفيدة على الإطلاق أثناء توليد المفتاح أو المعامل. وقد لا يستدعي البعض الآخر رد النداء حتى. .PP تعتمد العملية التي ينفذها توليد المفتاح أو المعامل على الخوارزمية المستخدمة. في بعض الحالات (مثل EC مع منحنى مسمى مزود) يحدد خيار "التوليد" الحقول المناسبة في بنية EVP_PKEY فقط. .PP في OpenSSL، تحتوي بنية EVP_PKEY التي تحتوي على مفتاح خاص أيضًا على مكونات المفتاح العام والمعاملات (إن وجدت). المفتاح الخاص في OpenSSL يعادل ما تسميه بعض المكتبات "زوج مفاتيح". يمكن استخدام المفتاح الخاص في دوال تتطلب استخدام مفتاح عام أو معاملات. .SH أمثلة .IX Header أمثلة توليد مفتاح RSA بطول 2048 بت: .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& EVP_PKEY *pkey = NULL; \& \& ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_keygen_init(ctx) <= 0) \& /* Error */ \& if (EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048) <= 0) \& /* Error */ \& \& /* Generate key */ \& if (EVP_PKEY_keygen(ctx, &pkey) <= 0) \& /* Error */ .Ve .PP توليد مفتاح من مجموعة معاملات: .PP .Vb 2 \& #include \& #include \& \& EVP_PKEY_CTX *ctx; \& ENGINE *eng; \& EVP_PKEY *pkey = NULL, *param; \& \& /* Assumed param, eng are set up already */ \& ctx = EVP_PKEY_CTX_new(param, eng); \& if (!ctx) \& /* Error occurred */ \& if (EVP_PKEY_keygen_init(ctx) <= 0) \& /* Error */ \& \& /* Generate key */ \& if (EVP_PKEY_keygen(ctx, &pkey) <= 0) \& /* Error */ .Ve .PP مثال لرد نداء التوليد لتنفيذات المفتاح العام في OpenSSL: .PP .Vb 1 \& /* Application data is a BIO to output status to */ \& \& EVP_PKEY_CTX_set_app_data(ctx, status_bio); \& \& static int genpkey_cb(EVP_PKEY_CTX *ctx) \& { \& char c = \*(Aq*\*(Aq; \& BIO *b = EVP_PKEY_CTX_get_app_data(ctx); \& int p = EVP_PKEY_CTX_get_keygen_info(ctx, 0); \& \& if (p == 0) \& c = \*(Aq.\*(Aq; \& if (p == 1) \& c = \*(Aq+\*(Aq; \& if (p == 2) \& c = \*(Aq*\*(Aq; \& if (p == 3) \& c = \*(Aq\en\*(Aq; \& BIO_write(b, &c, 1); \& (void)BIO_flush(b); \& return 1; \& } .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBEVP_RSA_gen\fP\|(3), \fBEVP_EC_gen\fP\|(3), \&\fBEVP_PKEY_CTX_new\fP\|(3), \&\fBEVP_PKEY_encrypt\fP\|(3), \&\fBEVP_PKEY_decrypt\fP\|(3), \&\fBEVP_PKEY_sign\fP\|(3), \&\fBEVP_PKEY_verify\fP\|(3), \&\fBEVP_PKEY_verify_recover\fP\|(3), \&\fBEVP_PKEY_derive\fP\|(3) .SH التاريخ .IX Header التاريخ \&\fBEVP_PKEY_keygen_init()\fP, int \fBEVP_PKEY_paramgen_init()\fP, \fBEVP_PKEY_keygen()\fP, \&\fBEVP_PKEY_paramgen()\fP, \fBEVP_PKEY_gen_cb()\fP, \fBEVP_PKEY_CTX_set_cb()\fP, \&\fBEVP_PKEY_CTX_get_cb()\fP, \fBEVP_PKEY_CTX_get_keygen_info()\fP, \&\fBEVP_PKEY_CTX_set_app_data()\fP و \fBEVP_PKEY_CTX_get_app_data()\fP أُضيفت في OpenSSL 1.0.0. .PP \&\fBEVP_PKEY_Q_keygen()\fP و \fBEVP_PKEY_generate()\fP أُضيفتا في OpenSSL 3.0. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2006\-2026 لمؤلفي مشروع 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 .