.\" -*- 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_CTX_CTRL 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EVP_PKEY_CTX_CTRL 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_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_CTX_ctrl_uint64, EVP_PKEY_CTX_md, EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_get_signature_md, EVP_PKEY_CTX_set_mac_key, EVP_PKEY_CTX_set_group_name, EVP_PKEY_CTX_get_group_name, EVP_PKEY_CTX_set_rsa_padding, EVP_PKEY_CTX_get_rsa_padding, EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_get_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_keygen_bits, EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set1_rsa_keygen_pubexp, EVP_PKEY_CTX_set_rsa_keygen_primes, EVP_PKEY_CTX_set_rsa_mgf1_md_name, EVP_PKEY_CTX_set_rsa_mgf1_md, EVP_PKEY_CTX_get_rsa_mgf1_md, EVP_PKEY_CTX_get_rsa_mgf1_md_name, EVP_PKEY_CTX_set_rsa_oaep_md_name, EVP_PKEY_CTX_set_rsa_oaep_md, EVP_PKEY_CTX_get_rsa_oaep_md, EVP_PKEY_CTX_get_rsa_oaep_md_name, EVP_PKEY_CTX_set0_rsa_oaep_label, EVP_PKEY_CTX_get0_rsa_oaep_label, EVP_PKEY_CTX_set_dsa_paramgen_bits, EVP_PKEY_CTX_set_dsa_paramgen_q_bits, EVP_PKEY_CTX_set_dsa_paramgen_md, EVP_PKEY_CTX_set_dsa_paramgen_md_props, EVP_PKEY_CTX_set_dsa_paramgen_gindex, EVP_PKEY_CTX_set_dsa_paramgen_type, EVP_PKEY_CTX_set_dsa_paramgen_seed, EVP_PKEY_CTX_set_dh_paramgen_prime_len, EVP_PKEY_CTX_set_dh_paramgen_subprime_len, EVP_PKEY_CTX_set_dh_paramgen_generator, EVP_PKEY_CTX_set_dh_paramgen_type, EVP_PKEY_CTX_set_dh_paramgen_gindex, EVP_PKEY_CTX_set_dh_paramgen_seed, EVP_PKEY_CTX_set_dh_rfc5114, EVP_PKEY_CTX_set_dhx_rfc5114, EVP_PKEY_CTX_set_dh_pad, EVP_PKEY_CTX_set_dh_nid, EVP_PKEY_CTX_set_dh_kdf_type, EVP_PKEY_CTX_get_dh_kdf_type, EVP_PKEY_CTX_set0_dh_kdf_oid, EVP_PKEY_CTX_get0_dh_kdf_oid, EVP_PKEY_CTX_set_dh_kdf_md, EVP_PKEY_CTX_get_dh_kdf_md, EVP_PKEY_CTX_set_dh_kdf_outlen, EVP_PKEY_CTX_get_dh_kdf_outlen, EVP_PKEY_CTX_set0_dh_kdf_ukm, EVP_PKEY_CTX_get0_dh_kdf_ukm, EVP_PKEY_CTX_set_ec_paramgen_curve_nid, EVP_PKEY_CTX_set_ec_param_enc, EVP_PKEY_CTX_set_ecdh_cofactor_mode, EVP_PKEY_CTX_get_ecdh_cofactor_mode, EVP_PKEY_CTX_set_ecdh_kdf_type, EVP_PKEY_CTX_get_ecdh_kdf_type, EVP_PKEY_CTX_set_ecdh_kdf_md, EVP_PKEY_CTX_get_ecdh_kdf_md, EVP_PKEY_CTX_set_ecdh_kdf_outlen, EVP_PKEY_CTX_get_ecdh_kdf_outlen, EVP_PKEY_CTX_set0_ecdh_kdf_ukm, EVP_PKEY_CTX_get0_ecdh_kdf_ukm, EVP_PKEY_CTX_set1_id, EVP_PKEY_CTX_get1_id, EVP_PKEY_CTX_get1_id_len, EVP_PKEY_CTX_set_kem_op \&\- عمليات تحكم خاصة بالخوارزمية .SH موجز .IX Header موجز .Vb 1 \& #include \& \& int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, \& int cmd, int p1, void *p2); \& int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, \& int cmd, uint64_t value); \& int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, \& const char *value); \& \& int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); \& \& int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **pmd); \& \& int EVP_PKEY_CTX_set_mac_key(EVP_PKEY_CTX *ctx, const unsigned char *key, \& int len); \& int EVP_PKEY_CTX_set_group_name(EVP_PKEY_CTX *ctx, const char *name); \& int EVP_PKEY_CTX_get_group_name(EVP_PKEY_CTX *ctx, char *name, size_t namelen); \& \& int EVP_PKEY_CTX_set_kem_op(EVP_PKEY_CTX *ctx, const char *op); \& \& #include \& \& int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad); \& int EVP_PKEY_CTX_get_rsa_padding(EVP_PKEY_CTX *ctx, int *pad); \& int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int saltlen); \& int EVP_PKEY_CTX_get_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int *saltlen); \& int EVP_PKEY_CTX_set_rsa_keygen_bits(EVP_PKEY_CTX *ctx, int mbits); \& int EVP_PKEY_CTX_set1_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); \& int EVP_PKEY_CTX_set_rsa_keygen_primes(EVP_PKEY_CTX *ctx, int primes); \& int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, \& const char *mdprops); \& int EVP_PKEY_CTX_set_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_get_rsa_mgf1_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); \& int EVP_PKEY_CTX_get_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, char *name, \& size_t namelen); \& int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, \& const char *mdprops); \& int EVP_PKEY_CTX_set_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_get_rsa_oaep_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); \& int EVP_PKEY_CTX_get_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, char *name, \& size_t namelen); \& int EVP_PKEY_CTX_set0_rsa_oaep_label(EVP_PKEY_CTX *ctx, void *label, \& int len); \& int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); \& \& #include \& \& int EVP_PKEY_CTX_set_dsa_paramgen_bits(EVP_PKEY_CTX *ctx, int nbits); \& int EVP_PKEY_CTX_set_dsa_paramgen_q_bits(EVP_PKEY_CTX *ctx, int qbits); \& int EVP_PKEY_CTX_set_dsa_paramgen_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_set_dsa_paramgen_md_props(EVP_PKEY_CTX *ctx, \& const char *md_name, \& const char *md_properties); \& int EVP_PKEY_CTX_set_dsa_paramgen_type(EVP_PKEY_CTX *ctx, const char *name); \& int EVP_PKEY_CTX_set_dsa_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); \& int EVP_PKEY_CTX_set_dsa_paramgen_seed(EVP_PKEY_CTX *ctx, \& const unsigned char *seed, \& size_t seedlen); \& \& #include \& \& int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int len); \& int EVP_PKEY_CTX_set_dh_paramgen_subprime_len(EVP_PKEY_CTX *ctx, int len); \& int EVP_PKEY_CTX_set_dh_paramgen_generator(EVP_PKEY_CTX *ctx, int gen); \& int EVP_PKEY_CTX_set_dh_paramgen_type(EVP_PKEY_CTX *ctx, int type); \& int EVP_PKEY_CTX_set_dh_pad(EVP_PKEY_CTX *ctx, int pad); \& int EVP_PKEY_CTX_set_dh_nid(EVP_PKEY_CTX *ctx, int nid); \& int EVP_PKEY_CTX_set_dh_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114); \& int EVP_PKEY_CTX_set_dhx_rfc5114(EVP_PKEY_CTX *ctx, int rfc5114); \& int EVP_PKEY_CTX_set_dh_paramgen_gindex(EVP_PKEY_CTX *ctx, int gindex); \& int EVP_PKEY_CTX_set_dh_paramgen_seed(EVP_PKEY_CTX *ctx, \& const unsigned char *seed, \& size_t seedlen); \& int EVP_PKEY_CTX_set_dh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); \& int EVP_PKEY_CTX_get_dh_kdf_type(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_CTX_set0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT *oid); \& int EVP_PKEY_CTX_get0_dh_kdf_oid(EVP_PKEY_CTX *ctx, ASN1_OBJECT **oid); \& int EVP_PKEY_CTX_set_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_get_dh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); \& int EVP_PKEY_CTX_set_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); \& int EVP_PKEY_CTX_get_dh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); \& int EVP_PKEY_CTX_set0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); \& \& #include \& \& int EVP_PKEY_CTX_set_ec_paramgen_curve_nid(EVP_PKEY_CTX *ctx, int nid); \& int EVP_PKEY_CTX_set_ec_param_enc(EVP_PKEY_CTX *ctx, int param_enc); \& int EVP_PKEY_CTX_set_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx, int cofactor_mode); \& int EVP_PKEY_CTX_get_ecdh_cofactor_mode(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_CTX_set_ecdh_kdf_type(EVP_PKEY_CTX *ctx, int kdf); \& int EVP_PKEY_CTX_get_ecdh_kdf_type(EVP_PKEY_CTX *ctx); \& int EVP_PKEY_CTX_set_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); \& int EVP_PKEY_CTX_get_ecdh_kdf_md(EVP_PKEY_CTX *ctx, const EVP_MD **md); \& int EVP_PKEY_CTX_set_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int len); \& int EVP_PKEY_CTX_get_ecdh_kdf_outlen(EVP_PKEY_CTX *ctx, int *len); \& int EVP_PKEY_CTX_set0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char *ukm, int len); \& \& int EVP_PKEY_CTX_set1_id(EVP_PKEY_CTX *ctx, void *id, size_t id_len); \& int EVP_PKEY_CTX_get1_id(EVP_PKEY_CTX *ctx, void *id); \& int EVP_PKEY_CTX_get1_id_len(EVP_PKEY_CTX *ctx, size_t *id_len); .Ve .PP الدوال التالية أصبحت مهجورة منذ OpenSSL 3.0، ويمكن إخفاؤها تماماً عن طريق تعريف \fBOPENSSL_API_COMPAT\fP بقيمة إصدار مناسبة، انظر \fBopenssl_user_macros\fP\|(7): .PP .Vb 1 \& #include \& \& int EVP_PKEY_CTX_set_rsa_keygen_pubexp(EVP_PKEY_CTX *ctx, BIGNUM *pubexp); \& \& #include \& \& int EVP_PKEY_CTX_get0_dh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); \& \& #include \& \& int EVP_PKEY_CTX_get0_ecdh_kdf_ukm(EVP_PKEY_CTX *ctx, unsigned char **ukm); .Ve .SH الوصف .IX Header الوصف \&تُرسِل الدالة \fBEVP_PKEY_CTX_ctrl()\fP عملية تحكم إلى السياق \fIctx\fP. يجب أن يطابق نوع المفتاح المُستخدَم \fIkeytype\fP إذا لم يكن \-1. المعامل \fIoptype\fP هو قناع يُشير إلى أي العمليات يمكن تطبيق التحكم عليها. يُشار إلى أمر التحكم في \fIcmd\fP وأي وسائط إضافية في \&\fIp1\fP و \fIp2\fP. .PP بالنسبة لـ \fIcmd\fP = \fBEVP_PKEY_CTRL_SET_MAC_KEY\fP، فإن \fIp1\fP هو طول مفتاح MAC، و \fIp2\fP هو مفتاح MAC. يُستخدم هذا بواسطة Poly1305 و SipHash و HMAC و CMAC. .PP لن تستدعي التطبيقات عادةً \fBEVP_PKEY_CTX_ctrl()\fP مباشرةً بل ستستدعي بدلاً من ذلك إحدى الدوال الخاصة بالخوارزمية أدناه. .PP \&الدالة \fBEVP_PKEY_CTX_ctrl_uint64()\fP هي غلاف يُمرر قيمة uint64 مباشرةً كـ \fIp2\fP إلى \fBEVP_PKEY_CTX_ctrl()\fP. .PP \&تسمح الدالة \fBEVP_PKEY_CTX_ctrl_str()\fP للتطبيق بإرسال عملية تحكم خاصة بخوارزمية إلى سياق \fIctx\fP في شكل سلسلة محارف. هذا مُعد للاستخدام مع الخيارات المُحددة في سطر الأوامر أو في ملفات نصية. الأوامر المدعومة مُوثقة في صفحات سطر أوامر أداة openssl للخيار \fI\-pkeyopt\fP المدعوم بواسطة أوامر \&\fIpkeyutl\fP و \fIgenpkey\fP و \fIreq\fP. .PP \&تُرسِل الدالة \fBEVP_PKEY_CTX_md()\fP عملية تحكم لمستخلص الرسالة إلى السياق \&\fIctx\fP. يُحدد مستخلص الرسالة باسمه \fImd\fP. .PP \&تضبط الدالة \fBEVP_PKEY_CTX_set_signature_md()\fP نوع مستخلص الرسالة المُستخدم في توقيع. يمكن استخدامها في خوارزميات RSA و DSA و ECDSA. .PP \&تحصل الدالة \fBEVP_PKEY_CTX_get_signature_md()\fP على نوع مستخلص الرسالة المُستخدم في توقيع. يمكن استخدامها في خوارزميات RSA و DSA و ECDSA. .PP يتضمن توليد المفاتيح عادةً إعداد المعاملات المراد استخدامها وتوليد بيانات المفتاح الخاص والعام. تسمح بعض تطبيقات الخوارزمية بتعيين بيانات المفتاح الخاص صراحةً باستخدام \fBEVP_PKEY_CTX_set_mac_key()\fP. في هذه الحالة، يكون توليد المفتاح ببساطة هو عملية إعداد معاملات المفتاح ثم تعيين بيانات المفتاح الخام إلى القيمة صراحةً. عادةً، ستستدعي التطبيقات \fBEVP_PKEY_new_raw_private_key\fP\|(3) أو دوال مشابهة بدلاً من ذلك. .PP \&يمكن استخدام الدالة \fBEVP_PKEY_CTX_set_mac_key()\fP مع أي من الخوارزميات المدعومة بواسطة الدالة \fBEVP_PKEY_new_raw_private_key\fP\|(3). .PP \&تضبط الدالة \fBEVP_PKEY_CTX_set_group_name()\fP اسم المجموعة إلى \fIname\fP لتوليد المعاملات والمفاتيح. على سبيل المثال، بالنسبة لمفاتيح EC، سيضبط هذا اسم المنحنى، وبالنسبة لمفاتيح DH، سيضبط اسم مجموعة الحقل المحدود. .PP \&\fBEVP_PKEY_CTX_get_group_name()\fP يجد اسم المجموعة المُعيّن حاليًا مع \fIctx\fP، ويكتبه في الموقع الذي يشير إليه \fIname\fP، طالما أن حجمه \fInamelen\fP كبير كافٍ لتخزين ذلك الاسم، بما في ذلك بايت NUL الختامي. .SS "معاملات RSA" .IX Subsection "معاملات RSA" \&تضبط الدالة \fBEVP_PKEY_CTX_set_rsa_padding()\fP وضع حشو RSA لـ \fIctx\fP. يمكن للمعامل \fIpad\fP أن يأخذ القيمة \fBRSA_PKCS1_PADDING\fP لحشو PKCS#1، و \fBRSA_NO_PADDING\fP لعدم وجود حشو، و \fBRSA_PKCS1_OAEP_PADDING\fP لحشو OAEP (التعمية وفك التعمية فقط)، و \fBRSA_X931_PADDING\fP لحشو X9.31 (عمليات التوقيع فقط)، و \fBRSA_PKCS1_PSS_PADDING\fP (التوقيع والتحقق فقط)، و \&\fBRSA_PKCS1_WITH_TLS_PADDING\fP لحشو رسالة TLS RSA ClientKeyExchange (فك التعمية فقط). .PP يتصرف وضعا حشو RSA بشكل مختلف إذا استُخدمت \fBEVP_PKEY_CTX_set_signature_md()\fP. إذا استُدعيت هذه الدالة لحشو PKCS#1، فإن المخزن المؤقت للنص العادي هو قيمة مستخلص فعلية وتُغلّف في بنية DigestInfo وفقًا لـ PKCS#1 عند التوقيع، وتُتوقع هذه البنية (وتُزال) عند التحقق. إذا لم يُستخدم هذا التحكم مع RSA وحشو PKCS#1، فإن البيانات المُقدمة تُستخدم مباشرةً ولا تُغلّف. في حالة حشو X9.31 لـ RSA، يُضاف بايت معرف الخوارزمية أو يُفحص ويُزال إذا استُدعي هذا التحكم. إذا لم يُستدعَ، فإن البايت الأول من المخزن المؤقت للنص العادي يُتوقع أن يكون بايت معرف الخوارزمية. .PP \&\fBEVP_PKEY_CTX_get_rsa_padding()\fP يحصل على وضع حشو RSA لـ \fIctx\fP. .PP \&\fBEVP_PKEY_CTX_set_rsa_pss_saltlen()\fP يضبط طول ملح RSA PSS إلى \fIsaltlen\fP. كما يوحي اسمه، فهو مدعوم فقط لحشو PSS. إذا لم تُستدعَ هذه الدالة، فسيُعظّم طول الملح حتى طول الملخص عند التوقيع، ويُكتشف آليًا عند التحقق. أربع قيم خاصة مدعومة: .IP \fBRSA_PSS_SALTLEN_DIGEST\fP 4 .IX Item RSA_PSS_SALTLEN_DIGEST يضبط طول الملح إلى طول الملخص. .IP \fBRSA_PSS_SALTLEN_MAX\fP 4 .IX Item RSA_PSS_SALTLEN_MAX يضبط طول الملح إلى أقصى قيمة مسموح بها. .IP \fBRSA_PSS_SALTLEN_AUTO\fP 4 .IX Item RSA_PSS_SALTLEN_AUTO يُسبب تحديد طول الملح آليًا بناءً على بنية كتلة \&\fBPSS\fP عند التحقق. عند التوقيع، له نفس معنى \fBRSA_PSS_SALTLEN_MAX\fP. .IP \fBRSA_PSS_SALTLEN_AUTO_DIGEST_MAX\fP 4 .IX Item RSA_PSS_SALTLEN_AUTO_DIGEST_MAX يُسبب تحديد طول الملح آليًا بناءً على بنية كتلة \fBPSS\fP عند التحقق، مثل \fBRSA_PSS_SALTLEN_AUTO\fP. عند التوقيع، يُعظّم طول الملح حتى أقصى طول للملخص للامتثال لـ FIPS 186\-4 القسم 5.5. .PP \&\fBEVP_PKEY_CTX_get_rsa_pss_saltlen()\fP يحصل على طول ملح RSA PSS لـ \fIctx\fP. يجب أن يكون وضع الحشو قد ضُبط مسبقًا على \fBRSA_PKCS1_PSS_PADDING\fP. .PP \&\fBEVP_PKEY_CTX_set_rsa_keygen_bits()\fP يضبط طول مفتاح RSA لتوليد مفتاح RSA إلى \fIbits\fP. إذا لم يُحدد، يُستخدم 2048 بت. .PP \&\fBEVP_PKEY_CTX_set1_rsa_keygen_pubexp()\fP يضبط قيمة الأس العام لتوليد مفتاح RSA إلى القيمة المخزنة في \fIpubexp\fP. حاليًا، يجب أن يكون عددًا صحيحًا فرديًا. وفقًا لاتفاقية تسمية OpenSSL، يجب تحرير مؤشر \fIpubexp\fP بشكل مستقل عن EVP_PKEY_CTX (أي، يُنسخ داخليًا). إذا لم يُحدد، يُستخدم 65537. .PP \&\fBEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fP يفعل نفس \&\fBEVP_PKEY_CTX_set1_rsa_keygen_pubexp()\fP باستثناء عدم وجود نسخ داخلي، وبالتالي لا ينبغي تعديل \fIpubexp\fP أو تحريره بعد الاستدعاء. .PP \&\fBEVP_PKEY_CTX_set_rsa_keygen_primes()\fP يضبط عدد الأعداد الأولية لتوليد مفتاح RSA إلى \fIprimes\fP. إذا لم يُحدد، يُستخدم 2. .PP \&\fBEVP_PKEY_CTX_set_rsa_mgf1_md_name()\fP يضبط ملخص MGF1 لمخططات حشو RSA إلى الملخص المسمى \fImdname\fP. إذا كان تنفيذ خوارزمية RSA للمزوّد المحدد يدعم ذلك، فسيُجلب الملخص باستخدام الخصائص \fImdprops\fP. إذا لم يُضبط صراحةً، يُستخدم ملخص التوقيع. يجب أن يكون وضع الحشو قد ضُبط على \fBRSA_PKCS1_OAEP_PADDING\fP أو \fBRSA_PKCS1_PSS_PADDING\fP. .PP \&\fBEVP_PKEY_CTX_set_rsa_mgf1_md()\fP يفعل نفس \&\fBEVP_PKEY_CTX_set_rsa_mgf1_md_name()\fP باستثناء أن اسم المُعمِّي يُستنتج من \fImd\fP المُقدم ولا يمكن تحديد أي خصائص. .PP \&\fBEVP_PKEY_CTX_get_rsa_mgf1_md_name()\fP يحصل على اسم خوارزمية المُعمِّي MGF1 لـ \fIctx\fP. إذا لم يُضبط صراحة، يُستخدم مُعمِّي التوقيع. يجب أن يكون نمط الحشو قد ضُبط على \fBRSA_PKCS1_OAEP_PADDING\fP أو \&\fBRSA_PKCS1_PSS_PADDING\fP. .PP \&\fBEVP_PKEY_CTX_get_rsa_mgf1_md()\fP يفعل نفس \&\fBEVP_PKEY_CTX_get_rsa_mgf1_md_name()\fP باستثناء أنه يُرجع مؤشرًا لكائن EVP_MD بدلاً من ذلك. لاحظ أنه سيُعاد فقط كائنات EVP_MD المعروفة والمضمنة. قد يكون كائن EVP_MD NULL إذا لم يكن المُعمِّي واحدًا منها (مثل مُعمِّي مُنفَّذ فقط في موفر طرف ثالث). .PP \&\fBEVP_PKEY_CTX_set_rsa_oaep_md_name()\fP يضبط نوع مُعمِّي الرسالة المستخدم في RSA OAEP على المُعمِّي المُسمى \fImdname\fP. إذا كان تنفيذ خوارزمية RSA للموفر المحدد يدعمه، فسيُجلب المُعمِّي باستخدام الخصائص \fImdprops\fP. يجب أن يكون نمط الحشو قد ضُبط على \&\fBRSA_PKCS1_OAEP_PADDING\fP. .PP \&\fBEVP_PKEY_CTX_set_rsa_oaep_md()\fP يفعل نفس \&\fBEVP_PKEY_CTX_set_rsa_oaep_md_name()\fP باستثناء أن اسم المُعمِّي يُستنتج من \fImd\fP المُقدم ولا يمكن تحديد أي خصائص. .PP \&\fBEVP_PKEY_CTX_get_rsa_oaep_md_name()\fP يحصل على اسم خوارزمية مُعمِّي الرسالة المستخدم في RSA OAEP ويخزنه في المخزن المؤقت \fIname\fP بحجم \fInamelen\fP. يجب أن يكون نمط الحشو قد ضُبط على \&\fBRSA_PKCS1_OAEP_PADDING\fP. يجب أن يكون المخزن المؤقت كبيرًا بما يكفي لأي أسماء خوارزميات مُعمِّي متوقعة وإلا ستفشل الدالة. .PP \&\fBEVP_PKEY_CTX_get_rsa_oaep_md()\fP يفعل نفس \&\fBEVP_PKEY_CTX_get_rsa_oaep_md_name()\fP باستثناء أنه يُرجع مؤشرًا لكائن EVP_MD بدلاً من ذلك. لاحظ أنه سيُعاد فقط كائنات EVP_MD المعروفة والمضمنة. قد يكون كائن EVP_MD NULL إذا لم يكن المُعمِّي واحدًا منها (مثل مُعمِّي مُنفَّذ فقط في موفر طرف ثالث). .PP \&\fBEVP_PKEY_CTX_set0_rsa_oaep_label()\fP يضبط تسمية RSA OAEP على البيانات الثنائية \&\fIlabel\fP وطولها بالبايت على \fIlen\fP. إذا كان \fIlabel\fP NULL أو \fIlen\fP 0، فتُمسح التسمية. تأخذ المكتبة ملكية التسمية لذا لا ينبغي للمتصل تحرير الذاكرة الأصلية المُشار إليها بـ \fIlabel\fP. يجب أن يكون نمط الحشو قد ضُبط على \fBRSA_PKCS1_OAEP_PADDING\fP. .PP \&\fBEVP_PKEY_CTX_get0_rsa_oaep_label()\fP يحصل على تسمية RSA OAEP إلى \&\fIlabel\fP. قيمة الإرجاع هي طول التسمية. يجب أن يكون نمط الحشو قد ضُبط على \fBRSA_PKCS1_OAEP_PADDING\fP. المؤشر الناتج مملوك للمكتبة ولا ينبغي للمتصل تحريره. .PP \&\fBRSA_PKCS1_WITH_TLS_PADDING\fP يُستخدم عند فك تعمية سر ما قبل الرئيسي لـ TLS المُعمَّى بـ RSA في رسالة ClientKeyExchange لـ TLS. هو نفس RSA_PKCS1_PADDING باستثناء أنه يتحقق إضافيًا من أن النتيجة بالطول الصحيح وأن أول بايتين هما إصدار البروتوكول الذي طلبه العميل مبدئيًا. إذا كان المحتوى المُعمَّى غير صالح علنًا، فسيفشل فك التعمية. ومع ذلك، إذا فشلت فحوصات الحشو، فسيظل فك التعمية يبدو ناجحًا ولكن سيُعاد سر ما قبل رئيسي عشوائي لـ TLS بدلاً من ذلك. يقبل نمط الحشو هذا معاملين يمكن ضبطهما باستخدام الدالة \&\fBEVP_PKEY_CTX_set_params\fP\|(3). هما OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION و OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION، وكلاهما يُتوقع أن يكونا أعدادًا صحيحة غير موقعة. عادةً، سيُضبط الأول فقط ويمثل إصدار بروتوكول TLS الذي طلبه العميل أولاً (مثل 0x0303 لـ TLSv1.2، 0x0302 لـ TLSv1.1 إلخ). تاريخيًا، استخدم بعض العملاء ذوو الأخطاء إصدار البروتوكول المُفاوَض بدلاً من إصدار البروتوكول المطلوب أولاً. إذا كان يجب تحمل هذا السلوك، فيجب ضبط OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION على إصدار البروتوكول المُفاوَض الفعلي. وإلا، فيجب تركه غير مضبوط. .PP بالمثل لـ \fBRSA_PKCS1_WITH_TLS_PADDING\fP أعلاه، منذ إصدار OpenSSL 3.2.0، سيُعيد استخدام \fBRSA_PKCS1_PADDING\fP رسالة مُولَّدة عشوائيًا بدلاً من أخطاء الحشو في حالة فشل فحوصات الحشو. التطبيقات التي تريد البقاء آمنة أثناء استخدام إصدارات أقدم من OpenSSL، أو موفر لا يُنفذ آلية الرفض الضمني، لا تزال بحاجة إلى معالجة كل من رمز الخطأ من عملية فك تعمية RSA والرسالة المُعادة بطريقة آمنة للقناة الجانبية. يمكن تعطيل هذه الحماية ضد هجمات Bleichenbacher بضبط \&\fBOSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION\fP (عدد صحيح غير موقع) على 0. .SS "معاملات DSA" .IX Subsection "معاملات DSA" \&\fBEVP_PKEY_CTX_set_dsa_paramgen_bits()\fP يضبط عدد البتات المستخدمة لتوليد معاملات DSA على \fBnbits\fP. إذا لم يُحدد، يُستخدم 2048. .PP \&\fBEVP_PKEY_CTX_set_dsa_paramgen_q_bits()\fP يضبط عدد البتات في المعامل الفرعي الأولي \fIq\fP لتوليد معاملات DSA على \fIqbits\fP. إذا لم يُحدد، يُستخدم 224. إذا حُددت دالة مُعمِّي أدناه، يُتجاهل هذا المعامل وبدلاً من ذلك، يطابق عدد البتات في \fIq\fP حجم المُعمِّي. .PP \&\fBEVP_PKEY_CTX_set_dsa_paramgen_md()\fP يضبط دالة المُعمِّي المستخدمة لتوليد معاملات DSA على \fImd\fP. إذا لم تُحدد، يُختار واحد من SHA\-1 أو SHA\-224 أو SHA\-256 ليطابق طول البت لـ \fIq\fP أعلاه. .PP \&\fBEVP_PKEY_CTX_set_dsa_paramgen_md_props()\fP يضبط دالة المُعمِّي المستخدمة لتوليد معاملات DSA باستخدام \fImd_name\fP و \fImd_properties\fP لاسترداد المُعمِّي من موفر. إذا لم تُحدد، سيُضبط \fImd_name\fP على واحد من SHA\-1 أو SHA\-224 أو SHA\-256 اعتمادًا على طول البت لـ \fIq\fP أعلاه. \fImd_properties\fP هي سلسلة استعلام خصائص بقيمة مبدئية \*(Aq\*(Aq إذا لم تُحدد. .PP \&\fBEVP_PKEY_CTX_set_dsa_paramgen_gindex()\fP يضبط \fIgindex\fP المستخدم بواسطة المولد G. القيمة المبدئية هي \-1 التي تستخدم g غير قابل للتحقق، وإلا فإن القيمة الموجبة تستخدم g قابل للتحقق. يجب حفظ هذه القيمة إذا كان التحقق من صحة المفتاح لـ g مطلوبًا، لأنها ليست جزءًا من مفتاح مستمر. .PP \&\fBEVP_PKEY_CTX_set_dsa_paramgen_seed()\fP يضبط \fIseed\fP لاستخدامه في التوليد بدلاً من استخدام قيمة مولدة عشوائيًا للبذرة. هذا مفيد لأغراض الاختبار فقط وقد يفشل إذا لم تُنتج البذرة أعدادًا أولية لكل من p و q في تكرارها الأول. يجب حفظ هذه القيمة إذا كان التحقق من صحة المفتاح p و q و g القابل للتحقق مطلوبًا، لأنها ليست جزءًا من مفتاح مستمر. .PP \&تضبط الدالة \fBEVP_PKEY_CTX_set_dsa_paramgen_type()\fP نوع التوليد لاستخدام توليد FIPS186\-4 إذا كان \fIname\fP هو "fips186_4"، أو توليد FIPS186\-2 إذا كان \fIname\fP هو "fips186_2". القيمة المبدئية للمزود المبدئي هي "fips186_2". القيمة المبدئية لمزود FIPS هي "fips186_4". .SS "معاملات DH" .IX Subsection "معاملات DH" \&\fBEVP_PKEY_CTX_set_dh_paramgen_prime_len()\fP يضبط طول معامل العدد الأولي DH \fIp\fP لتوليد معاملات DH. إذا لم تُستدعَ هذه الدالة، يُستخدم 2048. تقبل فقط أطوالًا أكبر من أو تساوي 256. .PP \&\fBEVP_PKEY_CTX_set_dh_paramgen_subprime_len()\fP يضبط طول معامل العدد الأولي الفرعي الاختياري \fIq\fP لتوليد معاملات DH. المبدئي هو 256 إذا كان العدد الأولي بطول 2048 بت على الأقل، أو 160 بخلاف ذلك. يجب أن يكون نوع توليد معاملات DH قد ضُبط على "fips186_4". .PP \&\fBEVP_PKEY_CTX_set_dh_paramgen_generator()\fP يضبط مولد DH على \fIgen\fP لتوليد معاملات DH. إذا لم يُحدد، يُستخدم 2. .PP \&\fBEVP_PKEY_CTX_set_dh_paramgen_type()\fP يضبط نوع المفتاح لتوليد معاملات DH. المعاملات المدعومة هي: .IP \fBDH_PARAMGEN_TYPE_GROUP\fP 4 .IX Item DH_PARAMGEN_TYPE_GROUP استخدم مجموعة مسماة. إذا ضُبط معامل العدد الأولي الآمن \fIp\fP فقط، يمكن استخدام هذا لاختيار مجموعة عدد أولي آمن ffdhe بالحجم الصحيح. .IP \fBDH_PARAMGEN_TYPE_FIPS_186_4\fP 4 .IX Item DH_PARAMGEN_TYPE_FIPS_186_4 مولد معاملات FFC FIPS186\-4. .IP \fBDH_PARAMGEN_TYPE_FIPS_186_2\fP 4 .IX Item DH_PARAMGEN_TYPE_FIPS_186_2 مولد معاملات FFC FIPS186\-2 (X9.42 DH). .IP \fBDH_PARAMGEN_TYPE_GENERATOR\fP 4 .IX Item DH_PARAMGEN_TYPE_GENERATOR يستخدم مولد عدد أولي آمن g (تنسيق PKCS#3). .PP المبدئي في المزوّد المبدئي هو \fBDH_PARAMGEN_TYPE_GENERATOR\fP لنوع المفتاح "DH"، و\fBDH_PARAMGEN_TYPE_FIPS_186_2\fP لنوع المفتاح "DHX". في مزوّد FIPS، القيمة المبدئية هي \fBDH_PARAMGEN_TYPE_GROUP\fP لنوع المفتاح "DH" و<\fBDH_PARAMGEN_TYPE_FIPS_186_4\fP لنوع المفتاح "DHX". .PP \&\fBEVP_PKEY_CTX_set_dh_paramgen_gindex()\fP يضبط \fIgindex\fP المستخدم بواسطة المولد G. القيمة المبدئية هي \-1 والتي تستخدم g غير قابل للتحقق، وإلا فإن القيمة الموجبة تستخدم g قابل للتحقق. يجب حفظ هذه القيمة إذا كان التحقق من صحة المفتاح g مطلوبًا، لأنها ليست جزءًا من مفتاح مستمر. .PP \&\fBEVP_PKEY_CTX_set_dh_paramgen_seed()\fP يضبط \fIseed\fP لاستخدامه في التوليد بدلاً من استخدام قيمة مولدة عشوائيًا للبذرة. هذا مفيد لأغراض الاختبار فقط وقد يفشل إذا لم تُنتج البذرة أعدادًا أولية لكل من p و q في تكرارها الأول. يجب حفظ هذه القيمة إذا كان التحقق من صحة المفتاح p و q و g القابل للتحقق مطلوبًا، لأنها ليست جزءًا من مفتاح مستمر. .PP \&\fBEVP_PKEY_CTX_set_dh_pad()\fP يضبط وضع حشو DH. إذا كان \fIpad\fP هو 1، يُحشى السر المشترك بالأصفار حتى حجم العدد الأولي DH \fIp\fP. إذا كان \fIpad\fP صفرًا (المبدئي)، فلا يُجرى أي حشو. .PP \&\fBEVP_PKEY_CTX_set_dh_nid()\fP يضبط معاملات DH على القيم المطابقة لـ \&\fInid\fP كما هو معرف في RFC7919 أو RFC3526. يجب أن يكون معامل \fInid\fP إما \&\fBNID_ffdhe2048\fP، \fBNID_ffdhe3072\fP، \fBNID_ffdhe4096\fP، \fBNID_ffdhe6144\fP، \&\fBNID_ffdhe8192\fP، \fBNID_modp_1536\fP، \fBNID_modp_2048\fP، \fBNID_modp_3072\fP، \&\fBNID_modp_4096\fP، \fBNID_modp_6144\fP، \fBNID_modp_8192\fP أو \fBNID_undef\fP لمسح القيمة المخزنة. يمكن استدعاء هذه الدالة أثناء توليد المعاملات أو المفاتيح. معامل nid ومعامل rfc5114 متنافيان. .PP \&\fBEVP_PKEY_CTX_set_dh_rfc5114()\fP و \fBEVP_PKEY_CTX_set_dhx_rfc5114()\fP كلاهما يضبط معاملات DH على القيم المعرفة في RFC5114. يجب أن يكون معامل \fIrfc5114\fP إما 1 أو 2 أو 3 مطابقًا لأقسام RFC5114 2.1 و 2.2 و 2.3، أو 0 لمسح القيمة المخزنة. يمكن استدعاء هذه الكلية أثناء توليد المعاملات. يجب أن يكون \&\fIctx\fP من نوع مفتاح \fBEVP_PKEY_DHX\fP. معامل rfc5114 ومعامل nid متنافيان. .SS "معاملات دالة اشتقاق المفتاح DH" .IX Subsection "معاملات دالة اشتقاق المفتاح DH" لاحظ أن جميع الدوال التالية تتطلب أن يكون معامل \fIctx\fP من نوع مفتاح خاص \fBEVP_PKEY_DHX\fP. عند استخدام اشتقاق المفتاح، يكون مخرج \&\fBEVP_PKEY_derive()\fP هو مخرج KDF بدلاً من السر المشترك DH. يُستخدم مخرج KDF عادةً كمفتاح تشفير المفاتيح (KEK) الذي بدوره يعمي مفتاح تشفير المحتوى (CEK). .PP \&\fBEVP_PKEY_CTX_set_dh_kdf_type()\fP يضبط نوع دالة اشتقاق المفتاح على \fIkdf\fP لاشتقاق مفتاح DH. القيم الممكنة هي \fBEVP_PKEY_DH_KDF_NONE\fP و \&\fBEVP_PKEY_DH_KDF_X9_42\fP الذي يستخدم الاشتقاق المحدد في RFC2631 (استنادًا إلى خوارزمية التكييف الموصوفة في X9.42). عند استخدام اشتقاق المفتاح، يجب أيضًا تحديد معاملات \fIkdf_oid\fP و \fIkdf_md\fP و \fIkdf_outlen\fP. .PP \&\fBEVP_PKEY_CTX_get_dh_kdf_type()\fP يحصل على نوع دالة اشتقاق المفتاح لـ \fIctx\fP المستخدمة لاشتقاق مفتاح DH. القيم الممكنة هي \fBEVP_PKEY_DH_KDF_NONE\fP و \&\fBEVP_PKEY_DH_KDF_X9_42\fP. .PP \&\fBEVP_PKEY_CTX_set0_dh_kdf_oid()\fP يضبط معرف كائن دالة اشتقاق المفتاح على \fIoid\fP لاشتقاق مفتاح DH. يجب أن يحدد هذا OID الخوارزمية المستخدمة مع مفتاح تشفير المحتوى. تأخذ المكتبة ملكية معرف الكائن لذا لا ينبغي للمستدعي تحرير الذاكرة الأصلية المشار إليها بواسطة \fIoid\fP. .PP \&\fBEVP_PKEY_CTX_get0_dh_kdf_oid()\fP يحصل على oid دالة اشتقاق المفتاح لـ \fIctx\fP المستخدمة لاشتقاق مفتاح DH. المؤشر الناتج مملوك للمكتبة ولا ينبغي للمستدعي تحريره. .PP \&\fBEVP_PKEY_CTX_set_dh_kdf_md()\fP يضبط ملخص رسالة دالة اشتقاق المفتاح على \&\fImd\fP لاشتقاق مفتاح DH. لاحظ أن RFC2631 يحدد أن هذا الملخص يجب أن يكون SHA1 لكن OpenSSL يتسامح مع ملخصات أخرى. .PP \&\fBEVP_PKEY_CTX_get_dh_kdf_md()\fP يحصل على ملخص رسالة دالة اشتقاق المفتاح لـ \&\fIctx\fP المستخدمة لاشتقاق مفتاح DH. .PP \&\fBEVP_PKEY_CTX_set_dh_kdf_outlen()\fP يضبط طول مخرج دالة اشتقاق المفتاح على \fIlen\fP لاشتقاق مفتاح DH. .PP \&\fBEVP_PKEY_CTX_get_dh_kdf_outlen()\fP يحصل على طول مخرج دالة اشتقاق المفتاح لـ \fIctx\fP المستخدمة لاشتقاق مفتاح DH. .PP \&\fBEVP_PKEY_CTX_set0_dh_kdf_ukm()\fP يضبط مادة مفتاح المستخدم على \fIukm\fP وطولها على \fIlen\fP لاشتقاق مفتاح DH. هذا المعامل اختياري ويطابق حقل partyAInfo في مصطلحات RFC2631. تتطلب المواصفات أن يكون طوله 512 بت لكن OpenSSL لا يفرض ذلك. تأخذ المكتبة ملكية مادة مفتاح المستخدم لذا لا ينبغي للمستدعي تحرير الذاكرة الأصلية المشار إليها بواسطة \fIukm\fP. .PP \&\fBEVP_PKEY_CTX_get0_dh_kdf_ukm()\fP يحصل على مادة مفتاح المستخدم لـ \fIctx\fP. قيمة الإرجاع هي طول مادة مفتاح المستخدم. المؤشر الناتج مملوك للمكتبة ولا ينبغي للمستدعي تحريره. .SS "معاملات EC" .IX Subsection "معاملات EC" استخدم \fBEVP_PKEY_CTX_set_group_name()\fP (الموصوف أعلاه) لضبط اسم المنحنى على \&\fIname\fP لتوليد المعاملات والمفاتيح. .PP \&\fBEVP_PKEY_CTX_set_ec_paramgen_curve_nid()\fP يفعل نفس ما يفعله \&\fBEVP_PKEY_CTX_set_group_name()\fP، لكنه خاص بـ EC ويستخدم \fInid\fP بدلاً من سلسلة محارف اسم. .PP لتوليد معاملات EC، يجب استدعاء إما \fBEVP_PKEY_CTX_set_group_name()\fP أو \fBEVP_PKEY_CTX_set_ec_paramgen_curve_nid()\fP وإلا يحدث خطأ لعدم وجود منحنى مبدئي. يمكن أيضًا استدعاء هذه الدوال لضبط المنحنى صراحةً عند توليد مفتاح EC. .PP \&\fBEVP_PKEY_CTX_get_group_name()\fP (الموصوف أعلاه) يمكن استخدامه للحصول على اسم المنحنى المضبوط حاليًا مع \fIctx\fP. .PP \&\fBEVP_PKEY_CTX_set_ec_param_enc()\fP يضبط ترميز معاملات EC على \fIparam_enc\fP عند توليد معاملات EC أو مفتاح EC. يمكن أن يكون الترميز \&\fBOPENSSL_EC_EXPLICIT_CURVE\fP للمعاملات الصريحة (المبدئي في إصدارات OpenSSL قبل 1.1.0) أو \fBOPENSSL_EC_NAMED_CURVE\fP لاستخدام صيغة المنحنى المسمى. لتحقيق أقصى توافق، يجب استخدام صيغة المنحنى المسمى. ملاحظة: أُضيفت قيمة \&\fBOPENSSL_EC_NAMED_CURVE\fP في OpenSSL 1.1.0؛ يجب أن تستخدم الإصدارات السابقة 0 بدلاً من ذلك. .SS "معاملات ECDH" .IX Subsection "معاملات ECDH" \&\fBEVP_PKEY_CTX_set_ecdh_cofactor_mode()\fP يضبط وضع المعامل المساعد على \fIcofactor_mode\fP لاشتقاق مفتاح ECDH. القيم الممكنة هي 1 لتمكين اشتقاق المفتاح بالمعامل المساعد، و0 لتعطيله، و\-1 لمسح وضع المعامل المساعد المخزن والرجوع إلى وضع المعامل المساعد للمفتاح الخاص. .PP \&\fBEVP_PKEY_CTX_get_ecdh_cofactor_mode()\fP يُرجع وضع المعامل المساعد لـ \fIctx\fP المستخدم لاشتقاق مفتاح ECDH. القيم الممكنة هي 1 عند تمكين اشتقاق المفتاح بالمعامل المساعد و0 خلاف ذلك. .SS "معاملات دالة اشتقاق مفتاح ECDH" .IX Subsection "معاملات دالة اشتقاق مفتاح ECDH" \&\fBEVP_PKEY_CTX_set_ecdh_kdf_type()\fP يضبط نوع دالة اشتقاق المفتاح على \&\fIkdf\fP لاشتقاق مفتاح ECDH. القيم الممكنة هي \fBEVP_PKEY_ECDH_KDF_NONE\fP و\fBEVP_PKEY_ECDH_KDF_X9_63\fP التي تستخدم اشتقاق المفتاح المحدد في X9.63. عند استخدام اشتقاق المفتاح، يجب أيضًا تحديد المعاملين \fIkdf_md\fP و\fIkdf_outlen\fP. .PP \&\fBEVP_PKEY_CTX_get_ecdh_kdf_type()\fP يُرجع نوع دالة اشتقاق المفتاح لـ \&\fIctx\fP المستخدم لاشتقاق مفتاح ECDH. القيم الممكنة هي \&\fBEVP_PKEY_ECDH_KDF_NONE\fP و\fBEVP_PKEY_ECDH_KDF_X9_63\fP. .PP \&\fBEVP_PKEY_CTX_set_ecdh_kdf_md()\fP يضبط ملخص رسالة دالة اشتقاق المفتاح على \fImd\fP لاشتقاق مفتاح ECDH. لاحظ أن X9.63 يحدد أن هذا الملخص يجب أن يكون SHA1 لكن OpenSSL يتحمل ملخصات أخرى. .PP \&\fBEVP_PKEY_CTX_get_ecdh_kdf_md()\fP يحصل على ملخص رسالة دالة اشتقاق المفتاح لـ \fIctx\fP المستخدم لاشتقاق مفتاح ECDH. .PP \&\fBEVP_PKEY_CTX_set_ecdh_kdf_outlen()\fP يضبط طول مخرج دالة اشتقاق المفتاح على \fIlen\fP لاشتقاق مفتاح ECDH. .PP \&\fBEVP_PKEY_CTX_get_ecdh_kdf_outlen()\fP يحصل على طول مخرج دالة اشتقاق المفتاح لـ \fIctx\fP المستخدم لاشتقاق مفتاح ECDH. .PP \&\fBEVP_PKEY_CTX_set0_ecdh_kdf_ukm()\fP يضبط مادة مفتاح المستخدم على \fIukm\fP لاشتقاق مفتاح ECDH. هذا المعامل اختياري ويتوافق مع المعلومات المشتركة في مصطلحات X9.63. تأخذ المكتبة ملكية مادة مفتاح المستخدم لذا لا ينبغي للمستدعي تحرير الذاكرة الأصلية المشار إليها بواسطة \fIukm\fP. .PP \&\fBEVP_PKEY_CTX_get0_ecdh_kdf_ukm()\fP يحصل على مادة مفتاح المستخدم لـ \fIctx\fP. قيمة الإرجاع هي طول مادة مفتاح المستخدم. المؤشر الناتج مملوك للمكتبة ولا ينبغي تحريره بواسطة المستدعي. .SS "معاملات أخرى" .IX Subsection "معاملات أخرى" \&\fBEVP_PKEY_CTX_set1_id()\fP و\fBEVP_PKEY_CTX_get1_id()\fP و\fBEVP_PKEY_CTX_get1_id_len()\fP تُستخدم للتلاعب بحقل المعرف الخاص لخوارزميات التوقيع المحددة مثل SM2. يضبط \fBEVP_PKEY_CTX_set1_id()\fP معرفًا مشارًا إليه بواسطة \fIid\fP بطول \fIid_len\fP للمكتبة. تأخذ المكتبة نسخة من المعرف بحيث يمكن للمستدعي تحرير الذاكرة الأصلية المشار إليها بواسطة \fIid\fP بأمان. يُرجع \&\fBEVP_PKEY_CTX_get1_id_len()\fP طول المعرف المضبوط عبر استدعاء سابق لـ \fBEVP_PKEY_CTX_set1_id()\fP. يُستخدم الطول عادةً لتخصيص ذاكرة كافية لاستدعاءات لاحقة لـ \fBEVP_PKEY_CTX_get1_id()\fP. يُرجع \fBEVP_PKEY_CTX_get1_id()\fP قيمة المعرف المضبوطة سابقًا للمستدعي في \fIid\fP. يجب على المستدعي تخصيص مساحة ذاكرة كافية لـ \fIid\fP قبل استدعاء \fBEVP_PKEY_CTX_get1_id()\fP. .PP \&\fBEVP_PKEY_CTX_set_kem_op()\fP يضبط عملية KEM للتشغيل. يمكن ضبط هذا بعد \&\fBEVP_PKEY_encapsulate_init()\fP أو \fBEVP_PKEY_decapsulate_init()\fP لاختيار عملية kem. لأنواع المفاتيح التي تدعم التغليف وليس لها عملية مبدئية، مثل RSA، يجب استدعاء هذه الدالة قبل \&\fBEVP_PKEY_encapsulate()\fP أو \fBEVP_PKEY_decapsulate()\fP. .PP المعاملات المدعومة للخوارزميات المضمنة موثقة في \&\fBEVP_KEM\-RSA\fP\|(7) و\fBEVP_KEM\-EC\fP\|(7) و\fBEVP_KEM\-X25519\fP\|(7) و\&\fBEVP_KEM\-X448\fP\|(7) و\fBEVP_KEM\-ML\-KEM\fP\|(7). .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" جميع الدوال الأخرى الموصوفة في هذه الصفحة تُرجع قيمة موجبة للنجاح و0 أو قيمة سالبة للفشل. على وجه الخصوص، تشير قيمة الإرجاع \-2 إلى أن العملية غير مدعومة بواسطة خوارزمية المفتاح العام. .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBEVP_PKEY_CTX_set_params\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) و\&\fBEVP_PKEY_keygen\fP\|(3) و\&\fBEVP_PKEY_encapsulate\fP\|(3) و\&\fBEVP_PKEY_decapsulate\fP\|(3) .SH التاريخ .IX Header التاريخ \&\fBEVP_PKEY_CTX_get_rsa_oaep_md_name()\fP و\fBEVP_PKEY_CTX_get_rsa_mgf1_md_name()\fP و\&\fBEVP_PKEY_CTX_set_rsa_mgf1_md_name()\fP و\fBEVP_PKEY_CTX_set_rsa_oaep_md_name()\fP و\&\fBEVP_PKEY_CTX_set_dsa_paramgen_md_props()\fP و\fBEVP_PKEY_CTX_set_dsa_paramgen_gindex()\fP و\&\fBEVP_PKEY_CTX_set_dsa_paramgen_type()\fP و\fBEVP_PKEY_CTX_set_dsa_paramgen_seed()\fP و\&\fBEVP_PKEY_CTX_set_group_name()\fP و\fBEVP_PKEY_CTX_get_group_name()\fP أُضيفت في OpenSSL 3.0. .PP وحدات الماكرو \fBEVP_PKEY_CTX_set1_id()\fP و\fBEVP_PKEY_CTX_get1_id()\fP و\&\fBEVP_PKEY_CTX_get1_id_len()\fP أُضيفت في 1.1.1، والدوال الأخرى أُضيفت في OpenSSL 1.0.0. .PP في OpenSSL 1.1.1 وما دونه كانت الدوال غالبًا وحدات ماكرو. من OpenSSL 3.0 أصبحت جميعها دوال. .PP \&\fBEVP_PKEY_CTX_set_rsa_keygen_pubexp()\fP, \fBEVP_PKEY_CTX_get0_dh_kdf_ukm()\fP, و \fBEVP_PKEY_CTX_get0_ecdh_kdf_ukm()\fP أُهملت في OpenSSL 3.0. .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 .