.\" -*- 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_ENCRYPTINIT 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EVP_ENCRYPTINIT 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_CIPHER_fetch, EVP_CIPHER_up_ref, EVP_CIPHER_free, EVP_CIPHER_CTX_new, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX_free, EVP_CIPHER_CTX_dup, EVP_CIPHER_CTX_copy, EVP_EncryptInit_ex, EVP_EncryptInit_ex2, EVP_EncryptUpdate, EVP_EncryptFinal_ex, EVP_DecryptInit_ex, EVP_DecryptInit_ex2, EVP_DecryptUpdate, EVP_DecryptFinal_ex, EVP_CipherInit_ex, EVP_CipherInit_ex2, EVP_CipherInit_SKEY, EVP_CipherUpdate, EVP_CipherFinal_ex, EVP_CIPHER_CTX_set_key_length, EVP_CIPHER_CTX_ctrl, EVP_EncryptInit, EVP_EncryptFinal, EVP_DecryptInit, EVP_DecryptFinal, EVP_CipherInit, EVP_CipherFinal, EVP_Cipher, EVP_CIPHER_can_pipeline, EVP_CipherPipelineEncryptInit, EVP_CipherPipelineDecryptInit, EVP_CipherPipelineUpdate, EVP_CipherPipelineFinal, EVP_get_cipherbyname, EVP_get_cipherbynid, EVP_get_cipherbyobj, EVP_CIPHER_is_a, EVP_CIPHER_get0_name, EVP_CIPHER_get0_description, EVP_CIPHER_names_do_all, EVP_CIPHER_get0_provider, EVP_CIPHER_get_nid, EVP_CIPHER_get_params, EVP_CIPHER_gettable_params, EVP_CIPHER_get_block_size, EVP_CIPHER_get_key_length, EVP_CIPHER_get_iv_length, EVP_CIPHER_get_flags, EVP_CIPHER_get_mode, EVP_CIPHER_get_type, EVP_CIPHER_CTX_cipher, EVP_CIPHER_CTX_get0_cipher, EVP_CIPHER_CTX_get1_cipher, EVP_CIPHER_CTX_get0_name, EVP_CIPHER_CTX_get_nid, EVP_CIPHER_CTX_get_params, EVP_CIPHER_gettable_ctx_params, EVP_CIPHER_CTX_gettable_params, EVP_CIPHER_CTX_set_params, EVP_CIPHER_settable_ctx_params, EVP_CIPHER_CTX_settable_params, EVP_CIPHER_CTX_get_block_size, EVP_CIPHER_CTX_get_key_length, EVP_CIPHER_CTX_get_iv_length, EVP_CIPHER_CTX_get_tag_length, EVP_CIPHER_CTX_flags, EVP_CIPHER_CTX_set_flags, EVP_CIPHER_CTX_clear_flags, EVP_CIPHER_CTX_test_flags, EVP_CIPHER_CTX_get_type, EVP_CIPHER_CTX_get_mode, EVP_CIPHER_CTX_get_num, EVP_CIPHER_CTX_set_num, EVP_CIPHER_CTX_is_encrypting, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param, EVP_CIPHER_CTX_set_padding, EVP_enc_null, EVP_CIPHER_do_all_provided, EVP_CIPHER_nid, EVP_CIPHER_name, EVP_CIPHER_block_size, EVP_CIPHER_key_length, EVP_CIPHER_iv_length, EVP_CIPHER_flags, EVP_CIPHER_mode, EVP_CIPHER_type, EVP_CIPHER_CTX_encrypting, EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length, EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_tag_length, EVP_CIPHER_CTX_num, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_mode \&\- EVP cipher routines .SH موجز .IX Header موجز .Vb 1 \& #include \& \& EVP_CIPHER *EVP_CIPHER_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, \& const char *properties); \& int EVP_CIPHER_up_ref(EVP_CIPHER *cipher); \& void EVP_CIPHER_free(EVP_CIPHER *cipher); \& EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); \& int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx); \& void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx); \& EVP_CIPHER_CTX *EVP_CIPHER_CTX_dup(const EVP_CIPHER_CTX *in); \& int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); \& \& int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& ENGINE *impl, const unsigned char *key, const unsigned char *iv); \& int EVP_EncryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv, \& const OSSL_PARAM params[]); \& int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, \& int *outl, const unsigned char *in, int inl); \& int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); \& \& int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& ENGINE *impl, const unsigned char *key, const unsigned char *iv); \& int EVP_DecryptInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv, \& const OSSL_PARAM params[]); \& int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, \& int *outl, const unsigned char *in, int inl); \& int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); \& \& int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& ENGINE *impl, const unsigned char *key, const unsigned char *iv, int enc); \& int EVP_CipherInit_ex2(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv, \& int enc, const OSSL_PARAM params[]); \& int EVP_CipherInit_SKEY(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, \& EVP_SKEY *skey, const unsigned char *iv, size_t iv_len, \& int enc, const OSSL_PARAM params[]); \& int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, \& int *outl, const unsigned char *in, int inl); \& int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); \& \& int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv); \& int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); \& \& int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv); \& int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); \& \& int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, \& const unsigned char *key, const unsigned char *iv, int enc); \& int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl); \& \& int EVP_Cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, \& const unsigned char *in, unsigned int inl); \& \& int EVP_CIPHER_can_pipeline(const EVP_CIPHER *cipher, int enc); \& int EVP_CipherPipelineEncryptInit(EVP_CIPHER_CTX *ctx, \& const EVP_CIPHER *cipher, \& const unsigned char *key, size_t keylen, \& size_t numpipes, \& const unsigned char **iv, size_t ivlen); \& int EVP_CipherPipelineDecryptInit(EVP_CIPHER_CTX *ctx, \& const EVP_CIPHER *cipher, \& const unsigned char *key, size_t keylen, \& size_t numpipes, \& const unsigned char **iv, size_t ivlen); \& int EVP_CipherPipelineUpdate(EVP_CIPHER_CTX *ctx, \& unsigned char **out, size_t *outl, \& const size_t *outsize, \& const unsigned char **in, const size_t *inl); \& int EVP_CipherPipelineFinal(EVP_CIPHER_CTX *ctx, \& unsigned char **outm, size_t *outl, \& const size_t *outsize); \& \& int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *x, int padding); \& int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); \& int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int cmd, int p1, void *p2); \& int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); \& void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); \& void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); \& int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); \& \& const EVP_CIPHER *EVP_get_cipherbyname(const char *name); \& const EVP_CIPHER *EVP_get_cipherbynid(int nid); \& const EVP_CIPHER *EVP_get_cipherbyobj(const ASN1_OBJECT *a); \& \& int EVP_CIPHER_get_nid(const EVP_CIPHER *e); \& int EVP_CIPHER_is_a(const EVP_CIPHER *cipher, const char *name); \& int EVP_CIPHER_names_do_all(const EVP_CIPHER *cipher, \& void (*fn)(const char *name, void *data), \& void *data); \& const char *EVP_CIPHER_get0_name(const EVP_CIPHER *cipher); \& const char *EVP_CIPHER_get0_description(const EVP_CIPHER *cipher); \& const OSSL_PROVIDER *EVP_CIPHER_get0_provider(const EVP_CIPHER *cipher); \& int EVP_CIPHER_get_block_size(const EVP_CIPHER *e); \& int EVP_CIPHER_get_key_length(const EVP_CIPHER *e); \& int EVP_CIPHER_get_iv_length(const EVP_CIPHER *e); \& unsigned long EVP_CIPHER_get_flags(const EVP_CIPHER *e); \& unsigned long EVP_CIPHER_get_mode(const EVP_CIPHER *e); \& int EVP_CIPHER_get_type(const EVP_CIPHER *cipher); \& \& const EVP_CIPHER *EVP_CIPHER_CTX_get0_cipher(const EVP_CIPHER_CTX *ctx); \& EVP_CIPHER *EVP_CIPHER_CTX_get1_cipher(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_nid(const EVP_CIPHER_CTX *ctx); \& const char *EVP_CIPHER_CTX_get0_name(const EVP_CIPHER_CTX *ctx); \& \& int EVP_CIPHER_get_params(EVP_CIPHER *cipher, OSSL_PARAM params[]); \& int EVP_CIPHER_CTX_set_params(EVP_CIPHER_CTX *ctx, const OSSL_PARAM params[]); \& int EVP_CIPHER_CTX_get_params(EVP_CIPHER_CTX *ctx, OSSL_PARAM params[]); \& const OSSL_PARAM *EVP_CIPHER_gettable_params(const EVP_CIPHER *cipher); \& const OSSL_PARAM *EVP_CIPHER_settable_ctx_params(const EVP_CIPHER *cipher); \& const OSSL_PARAM *EVP_CIPHER_gettable_ctx_params(const EVP_CIPHER *cipher); \& const OSSL_PARAM *EVP_CIPHER_CTX_settable_params(EVP_CIPHER_CTX *ctx); \& const OSSL_PARAM *EVP_CIPHER_CTX_gettable_params(EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_block_size(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_key_length(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_iv_length(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_tag_length(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_type(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_mode(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_get_num(const EVP_CIPHER_CTX *ctx); \& int EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); \& int EVP_CIPHER_CTX_is_encrypting(const EVP_CIPHER_CTX *ctx); \& \& int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); \& int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); \& \& void EVP_CIPHER_do_all_provided(OSSL_LIB_CTX *libctx, \& void (*fn)(EVP_CIPHER *cipher, void *arg), \& void *arg); \& \& #define EVP_CIPHER_nid EVP_CIPHER_get_nid \& #define EVP_CIPHER_name EVP_CIPHER_get0_name \& #define EVP_CIPHER_block_size EVP_CIPHER_get_block_size \& #define EVP_CIPHER_key_length EVP_CIPHER_get_key_length \& #define EVP_CIPHER_iv_length EVP_CIPHER_get_iv_length \& #define EVP_CIPHER_flags EVP_CIPHER_get_flags \& #define EVP_CIPHER_mode EVP_CIPHER_get_mode \& #define EVP_CIPHER_type EVP_CIPHER_get_type \& #define EVP_CIPHER_CTX_encrypting EVP_CIPHER_CTX_is_encrypting \& #define EVP_CIPHER_CTX_nid EVP_CIPHER_CTX_get_nid \& #define EVP_CIPHER_CTX_block_size EVP_CIPHER_CTX_get_block_size \& #define EVP_CIPHER_CTX_key_length EVP_CIPHER_CTX_get_key_length \& #define EVP_CIPHER_CTX_iv_length EVP_CIPHER_CTX_get_iv_length \& #define EVP_CIPHER_CTX_tag_length EVP_CIPHER_CTX_get_tag_length \& #define EVP_CIPHER_CTX_num EVP_CIPHER_CTX_get_num \& #define EVP_CIPHER_CTX_type EVP_CIPHER_CTX_get_type \& #define EVP_CIPHER_CTX_mode EVP_CIPHER_CTX_get_mode .Ve .PP الدالة التالية أصبحت مهجورة منذ OpenSSL 3.0، ويمكن إخفاؤها تمامًا عبر تعريف \fBOPENSSL_API_COMPAT\fP بقيمة إصدار مناسبة، انظر \fBopenssl_user_macros\fP\|(7): .PP .Vb 1 \& const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); .Ve .PP الدالة التالية أصبحت مهجورة منذ OpenSSL 1.1.0، ويمكن إخفاؤها تمامًا عبر تعريف \fBOPENSSL_API_COMPAT\fP بقيمة إصدار مناسبة، انظر \fBopenssl_user_macros\fP\|(7): .PP .Vb 1 \& int EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx); .Ve .SH الوصف .IX Header الوصف إجراءات التشفير EVP هي واجهة عالية المستوى لبعض المُعمِّيات المتناظرة. .PP النوع \fBEVP_CIPHER\fP هو بنية لتنفيذ طريقة التشفير. .IP \fBEVP_CIPHER_fetch()\fP 4 .IX Item EVP_CIPHER_fetch() يجلب تنفيذ التشفير لـ \fIalgorithm\fP المُعطى من أي مزود يوفره، ضمن المعايير المُعطاة بواسطة \fIproperties\fP. راجع "ALGORITHM FETCHING" في \fBcrypto\fP\|(7) لمزيد من المعلومات. .Sp يجب تحرير القيمة المُرجَعة في النهاية باستخدام \fBEVP_CIPHER_free()\fP. .Sp بُنى \fBEVP_CIPHER\fP المجلوبة مُعدودة المرجع. .IP \fBEVP_CIPHER_up_ref()\fP 4 .IX Item EVP_CIPHER_up_ref() يزيد عدد المرجع لبنية \fBEVP_CIPHER\fP. .IP \fBEVP_CIPHER_free()\fP 4 .IX Item EVP_CIPHER_free() يخفض عدد المرجع لبنية \fBEVP_CIPHER\fP المجلوبة. إذا انخفض عدد المرجع إلى 0، تُحرر البنية. إذا كانت الوسيطة NULL، لا يُفعل شيء. .IP \fBEVP_CIPHER_CTX_new()\fP 4 .IX Item EVP_CIPHER_CTX_new() يخصص ويُعيد سياق تشفير. .IP \fBEVP_CIPHER_CTX_free()\fP 4 .IX Item EVP_CIPHER_CTX_free() يمسح كل المعلومات من سياق التشفير ويحرر أي ذاكرة مُخصصة مرتبطة به، بما في ذلك \fIctx\fP نفسه. يجب استدعاء هذه الدالة بعد اكتمال جميع العمليات باستخدام التشفير حتى لا تبقى المعلومات الحساسة في الذاكرة. إذا كانت الوسيطة NULL، لا يُفعل شيء. .IP \fBEVP_CIPHER_CTX_dup()\fP 4 .IX Item EVP_CIPHER_CTX_dup() يمكن استخدامها لنسخ حالة التشفير من \fIin\fP. هذا مفيد لتجنب استدعاءات \fBEVP_CIPHER_fetch()\fP المتعددة أو إذا كانت كميات كبيرة من البيانات ستُغذى وتختلف فقط في البايتات القليلة الأخيرة. .IP \fBEVP_CIPHER_CTX_copy()\fP 4 .IX Item EVP_CIPHER_CTX_copy() يمكن استخدامها لنسخ حالة التشفير من \fIin\fP إلى \fIout\fP. .IP \fBEVP_CIPHER_CTX_ctrl()\fP 4 .IX Item EVP_CIPHER_CTX_ctrl() \&\fIهذه طريقة قديمة.\fP \fBEVP_CIPHER_CTX_set_params()\fP و \&\fBEVP_CIPHER_CTX_get_params()\fP هما الآلية التي يجب استخدامها لتعيين وجلب المعاملات التي يستخدمها المزودون. .Sp ينفذ إجراءات تحكم خاصة بالتشفير على السياق \fIctx\fP. يُشار إلى أمر التحكم في \fIcmd\fP وأي وسائط إضافية في \fIp1\fP و \fIp2\fP. يجب استدعاء \&\fBEVP_CIPHER_CTX_ctrl()\fP بعد \fBEVP_CipherInit_ex2()\fP. قد تنطبق قيود أخرى حسب نوع التحكم وتنفيذ التشفير. .Sp إذا صادف استخدام هذه الدالة مع \fBEVP_CIPHER\fP مجلوب، فستترجم عناصر التحكم المعروفة لـ OpenSSL إلى معاملات \fBOSSL_PARAM\fP\|(3) بمفاتيح مُعرفة بواسطة OpenSSL وتستدعي \fBEVP_CIPHER_CTX_get_params()\fP أو \&\fBEVP_CIPHER_CTX_set_params()\fP حسب ما يناسب كل أمر تحكم. .Sp انظر "CONTROLS" أدناه لمزيد من المعلومات، بما في ذلك الترجمات التي تُجرى. .IP \fBEVP_CIPHER_get_params()\fP 4 .IX Item EVP_CIPHER_get_params() يسترجع قائمة \fIparams\fP المطلوبة للخوارزمية من CIPHER \fIcipher\fP. راجع "PARAMETERS" أدناه لمزيد من المعلومات. .IP \fBEVP_CIPHER_CTX_get_params()\fP 4 .IX Item EVP_CIPHER_CTX_get_params() يسترجع قائمة \fIparams\fP المطلوبة من سياق CIPHER \fIctx\fP. راجع "PARAMETERS" أدناه لمزيد من المعلومات. .IP \fBEVP_CIPHER_CTX_set_params()\fP 4 .IX Item EVP_CIPHER_CTX_set_params() يضبط قائمة \fIparams\fP في سياق CIPHER \fIctx\fP. راجع "PARAMETERS" أدناه لمزيد من المعلومات. .IP \fBEVP_CIPHER_gettable_params()\fP 4 .IX Item EVP_CIPHER_gettable_params() احصل على مصفوفة \fBOSSL_PARAM\fP\|(3) ثابتة تصف المعاملات القابلة للاسترجاع التي يمكن استخدامها مع \fBEVP_CIPHER_get_params()\fP. .IP "\fBEVP_CIPHER_gettable_ctx_params()\fP و \fBEVP_CIPHER_CTX_gettable_params()\fP" 4 .IX Item "EVP_CIPHER_gettable_ctx_params() و EVP_CIPHER_CTX_gettable_params()" احصل على مصفوفة \fBOSSL_PARAM\fP\|(3) ثابتة تصف المعاملات القابلة للاسترجاع التي يمكن استخدامها مع \fBEVP_CIPHER_CTX_get_params()\fP. تُعيد \&\fBEVP_CIPHER_gettable_ctx_params()\fP المعاملات التي يمكن استرجاعها من الخوارزمية، بينما تُعيد \fBEVP_CIPHER_CTX_gettable_params()\fP المعاملات التي يمكن استرجاعها في الحالة الحالية للسياق. .IP "\fBEVP_CIPHER_settable_ctx_params()\fP و \fBEVP_CIPHER_CTX_settable_params()\fP" 4 .IX Item "EVP_CIPHER_settable_ctx_params() و EVP_CIPHER_CTX_settable_params()" احصل على مصفوفة \fBOSSL_PARAM\fP\|(3) ثابتة تصف المعاملات القابلة للضبط التي يمكن استخدامها مع \fBEVP_CIPHER_CTX_set_params()\fP. تُعيد \&\fBEVP_CIPHER_settable_ctx_params()\fP المعاملات التي يمكن ضبطها من الخوارزمية، بينما تُعيد \fBEVP_CIPHER_CTX_settable_params()\fP المعاملات التي يمكن ضبطها في الحالة الحالية للسياق. .IP \fBEVP_EncryptInit_ex2()\fP 4 .IX Item EVP_EncryptInit_ex2() يُعدّ سياق التشفير \fIctx\fP للتشفير باستخدام المُعمِّي \fItype\fP. \fIctx\fP \fBيجب ألا\fP يكون NULL. \&يُوفَّر \fItype\fP عادةً باستدعاء \fBEVP_CIPHER_fetch()\fP. يمكن أيضًا تعيين \fItype\fP باستخدام دوال قديمة مثل \fBEVP_aes_256_cbc()\fP، لكن هذا لا يُوصى به للتطبيقات الجديدة. \fIkey\fP هو المفتاح المتناظر المستخدم و \fIiv\fP هو IV المستخدم (إذا لزم الأمر)، ويعتمد العدد الفعلي للبايتات المستخدمة للمفتاح و IV على المُعمِّي. سيتم تعيين المعاملات \fIparams\fP على السياق بعد التهيئة. من الممكن تعيين جميع المعاملات إلى NULL باستثناء \fItype\fP في استدعاء أولي وتوفير المعاملات المتبقية في استدعاءات لاحقة، جميعها لها \fItype\fP مضبوط على NULL. يُفعل ذلك عندما لا تكون معاملات المُعمِّي المبدئية مناسبة. بالنسبة لـ \fBEVP_CIPH_GCM_MODE\fP، سيُولَّد IV داخليًا إذا لم يُحدد. .IP \fBEVP_EncryptInit_ex()\fP 4 .IX Item EVP_EncryptInit_ex() هذه الدالة القديمة مشابهة لـ \fBEVP_EncryptInit_ex2()\fP عندما يكون \fIimpl\fP NULL. سيُستخدم تنفيذ \fItype\fP من محرك \fIimpl\fP إذا كان موجودًا. .IP \fBEVP_EncryptUpdate()\fP 4 .IX Item EVP_EncryptUpdate() يُعمِّي \fIinl\fP بايت من المخزن المؤقت \fIin\fP ويكتب النسخة المُعمَّاة إلى \&\fIout\fP. قد تشير المؤشرات \fIout\fP و \fIin\fP إلى نفس الموقع، وفي هذه الحالة سيتم التشفير في المكان. ومع ذلك، يُضمن عمل التشفير في المكان فقط إذا عالج سياق التشفير (\fIctx\fP) البيانات بمضاعفات حجم الكتلة. إذا احتوى السياق على كتلة بيانات غير كاملة من عمليات سابقة، سيفشل التشفير في المكان. \fIctx\fP \fBيجب ألا\fP يكون NULL. .Sp إذا أشار \fIout\fP و \fIin\fP إلى مواقع مختلفة، يجب أن يكون المخزنان المؤقتان منفصلين، وإلا فقد تفشل العملية أو تكون النتيجة غير محددة. .Sp يمكن استدعاء هذه الدالة عدة مرات لتشفير كتل متتالية من البيانات. تعتمد كمية البيانات المكتوبة على محاذاة الكتلة للبيانات المُعمَّاة. بالنسبة لمعظم المُعمِّيات والأنماط، يمكن أن تكون كمية البيانات المكتوبة أي شيء من صفر بايت إلى (inl + cipher_block_size \- 1) بايت. بالنسبة لأنماط المُعمِّي الملتف، يمكن أن تكون كمية البيانات المكتوبة أي شيء من صفر بايت إلى (inl + cipher_block_size) بايت. بالنسبة للمُعمِّيات التدفقية، يمكن أن تكون كمية البيانات المكتوبة أي شيء من صفر بايت إلى inl بايت. وبالتالي، يجب أن يحتوي المخزن المؤقت المشار إليه بواسطة \fIout\fP على مساحة كافية للعملية المنفذة. يُوضع العدد الفعلي للبايتات المكتوبة في \fIoutl\fP. .Sp إذا كان الحشو مفعّلاً (المبدئي)، فإن \fBEVP_EncryptFinal_ex()\fP يُعمِّي البيانات "النهائية"، أي أي بيانات متبقية في كتلة جزئية. يستخدم حشو الكتلة القياسي (المعروف بحشو PKCS) كما هو موصوف في قسم الملاحظات أدناه. تُكتب البيانات النهائية المُعمَّاة إلى \fIout\fP الذي يجب أن يحتوي على مساحة كافية لكتلة مُعمِّي واحدة. يُوضع عدد البايتات المكتوبة في \fIoutl\fP. بعد استدعاء هذه الدالة، تنتهي عملية التشفير ولا ينبغي إجراء استدعاءات أخرى لـ \fBEVP_EncryptUpdate()\fP. .Sp إذا كان الحشو معطلاً، فإن \fBEVP_EncryptFinal_ex()\fP لن يُعمِّي أي بيانات إضافية وسيُرجع خطأً إذا بقيت أي بيانات في كتلة جزئية: أي إذا لم يكن الطول الإجمالي للبيانات مضاعفًا لحجم الكتلة. .IP "\fBEVP_DecryptInit_ex2()\fP، \fBEVP_DecryptInit_ex()\fP، \fBEVP_DecryptUpdate()\fP و \fBEVP_DecryptFinal_ex()\fP" 4 .IX Item "EVP_DecryptInit_ex2()، EVP_DecryptInit_ex()، EVP_DecryptUpdate() و EVP_DecryptFinal_ex()" هذه الدوال هي عمليات فك التشفير المقابلة. \&ستُرجع \fBEVP_DecryptFinal()\fP رمز خطأ إذا كان الحشو مفعّلاً والكتلة النهائية غير منسقة بشكل صحيح. المعاملات والقيود مطابقة لعمليات التشفير. \fIctx\fP \fBيجب ألا\fP يكون NULL. .IP "\fBEVP_CipherInit_ex2()\fP، \fBEVP_CipherInit_ex()\fP، \fBEVP_CipherUpdate()\fP و \fBEVP_CipherFinal_ex()\fP" 4 .IX Item "EVP_CipherInit_ex2()، EVP_CipherInit_ex()، EVP_CipherUpdate() و EVP_CipherFinal_ex()" يمكن استخدام هذه الدوال لفك التشفير أو التشفير. تعتمد العملية المنفذة على قيمة المعامل \fIenc\fP. يجب تعيينها إلى 1 للتشفير، و0 لفك التشفير، و\-1 لترك القيمة دون تغيير (القيمة الفعلية لـ \*(Aqenc\*(Aq تُوفَّر في استدعاء سابق). .IP \fBEVP_CipherInit_SKEY()\fP 4 .IX Item EVP_CipherInit_SKEY() هذه الدالة مشابهة لـ \fBEVP_CipherInit_ex2()\fP لكنها تقبل كائن مفتاح متناظر من النوع \fIEVP_SKEY\fP كمفتاح. .IP \fBEVP_CIPHER_CTX_reset()\fP 4 .IX Item EVP_CIPHER_CTX_reset() يمسح جميع المعلومات من سياق المُعمِّي ويُحرر أي ذاكرة مخصصة مرتبطة به، باستثناء \fIctx\fP نفسه. يجب استدعاء هذه الدالة في أي وقت يُعاد فيه استخدام \fIctx\fP بواسطة سلسلة استدعاءات أخرى من \&\fBEVP_CipherInit()\fP / \fBEVP_CipherUpdate()\fP / \fBEVP_CipherFinal()\fP. .IP "\fBEVP_EncryptInit()\fP، \fBEVP_DecryptInit()\fP و \fBEVP_CipherInit()\fP" 4 .IX Item "EVP_EncryptInit()، EVP_DecryptInit() و EVP_CipherInit()" تتصرف بطريقة مشابهة لـ \fBEVP_EncryptInit_ex()\fP، \fBEVP_DecryptInit_ex()\fP و \&\fBEVP_CipherInit_ex()\fP باستثناء أنه إذا لم يكن \fItype\fP مُعمِّيًا مُستحضَرًا، فإنها تستخدم التنفيذ المبدئي لـ \fItype\fP. .IP "\fBEVP_EncryptFinal()\fP، \fBEVP_DecryptFinal()\fP و \fBEVP_CipherFinal()\fP" 4 .IX Item "EVP_EncryptFinal()، EVP_DecryptFinal() و EVP_CipherFinal()" مطابق لـ \fBEVP_EncryptFinal_ex()\fP و \fBEVP_DecryptFinal_ex()\fP و \&\fBEVP_CipherFinal_ex()\fP. في الإصدارات السابقة، كانت تنظف \fIctx\fP أيضًا، لكن هذا لم يعد يُفعل ويجب استدعاء \fBEVP_CIPHER_CTX_cleanup()\fP لتحرير أي موارد للسياق. .IP \fBEVP_Cipher()\fP 4 .IX Item EVP_Cipher() يُعمي أو يفك تعمية مقدار أقصاه \fIinl\fP بايت من \fIin\fP ويترك النتيجة في \fIout\fP. .Sp للمُعمِّيات القديمة \- إذا لم يكن للمُعمِّي العَلَم \&\fBEVP_CIPH_FLAG_CUSTOM_CIPHER\fP مضبوطًا، فيجب أن يكون \fIinl\fP مضاعفًا لـ \&\fBEVP_CIPHER_get_block_size()\fP. إذا لم يكن كذلك، فالنتيجة غير معرفة. إذا كان للمُعمِّي ذلك العَلَم مضبوطًا، فيمكن أن يكون \fIinl\fP بأي حجم. .Sp بسبب قيود عقد واجهة برمجة التطبيقات لهذه الدالة، لا ينبغي استخدامها في التطبيقات، يُرجى النظر في استخدام \fBEVP_CipherUpdate()\fP و \&\fBEVP_CipherFinal_ex()\fP بدلاً من ذلك. .IP \fBEVP_CIPHER_can_pipeline()\fP 4 .IX Item EVP_CIPHER_can_pipeline() تتحقق هذه الدالة مما إذا كان \fBEVP_CIPHER\fP الذي جُلب باستخدام \fBEVP_CIPHER_fetch()\fP يدعم خط أنابيب المُعمِّي. إذا كان المُعمِّي يدعم خط الأنابيب، فإنها تُرجع 1، وإلا 0. سترجع هذه الدالة 0 للمُعمِّيات غير المجلوبة مثل \fBEVP_aes_128_gcm()\fP. لا توجد حاليًا أي مُعمِّيات مدمجة تدعم خط الأنابيب. .Sp يدعم دعم خط أنابيب المُعمِّي للتطبيق إرسال قطع متعددة من البيانات في مجموعة واحدة من استدعاءات \fBEVP_CipherUpdate()\fP/EVP_CipherFinal، مما يسمح للتنفيذ المقدم بالاستفادة من الحوسبة المتوازية. هذا مفيد للمسرعات العتادية حيث يوزع خط الأنابيب زمن الانتظار على قطع متعددة. .Sp للمُعمِّيات غير المجلوبة، يمكن استدعاء \fBEVP_CipherPipelineEncryptInit()\fP أو \&\fBEVP_CipherPipelineDecryptInit()\fP مباشرة، والتي ستقوم بجلب وإرجاع خطأ إذا لم يُعثر على تنفيذ يدعم خط الأنابيب. .IP "\fBEVP_CipherPipelineEncryptInit()\fP و \fBEVP_CipherPipelineDecryptInit()\fP و \fBEVP_CipherPipelineUpdate()\fP و \fBEVP_CipherPipelineFinal()\fP" 4 .IX Item "EVP_CipherPipelineEncryptInit() و EVP_CipherPipelineDecryptInit() و EVP_CipherPipelineUpdate() و EVP_CipherPipelineFinal()" يمكن استخدام هذه الدوال لإجراء عمليات تعمية أو فك تعمية متعددة بالتوازي. يمكن استدعاء \fBEVP_CIPHER_can_pipeline()\fP للتحقق مما إذا كان المُعمِّي يدعم خط الأنابيب. هذه الدوال مماثلة لـ \&\fBEVP_EncryptInit_ex2()\fP و \fBEVP_DecryptInit_ex2()\fP و \fBEVP_CipherUpdate()\fP و \&\fBEVP_CipherFinal()\fP لكنها تأخذ مصفوفة من المؤشرات لـ iv ومخازن الإدخال والإخراج. .Sp المفتاح \fIkey\fP، بطول \fIkeylen\fP، هو المفتاح المتناظر المستخدم. يُحدد المعامل \fInumpipes\fP عدد العمليات المتوازية التي ستُجرى. لا يمكن أن يتجاوز \&\fInumpipes\fP \fBEVP_MAX_PIPES\fP. المعامل \fIiv\fP هو مصفوفة من مؤشرات المخازن، تحتوي على IVs. يجب أن يكون حجم المصفوفة مساويًا لـ \fInumpipes\fP. يجب أن يكون حجم كل مخزن IV مساويًا لـ \fIivlen\fP. عندما لا يُقدم IV، يجب أن يكون \&\fIiv\fP NULL، بدلاً من مصفوفة من مؤشرات NULL. تأخذ المعاملات \fIin\fP مصفوفة من مؤشرات المخازن، كل منها يشير إلى مخزن يحتوي على بيانات الإدخال. يمكن أن تكون المخازن بأحجام مختلفة. المعامل \fIinl\fP هو مصفوفة من size_t، كل منها يُحدد حجم مخزن الإدخال المقابل. المعاملات \fIout\fP و \fIoutm\fP هي مصفوفات من مؤشرات المخازن، كل منها يشير إلى مخزن حيث ستُكتب بيانات الإخراج. المعامل \fIoutsize\fP هو مصفوفة من size_t، كل منها يُحدد حجم مخزن الإخراج المقابل. المعامل \fIoutl\fP هو مصفوفة من size_t ستُحدث بحجم بيانات الإخراج المكتوبة في مخزن الإخراج المقابل. لمتطلبات حجم مخازن الإخراج، انظر وصف \fBEVP_CipherUpdate()\fP. .Sp يمكن استدعاء الدالة \fBEVP_CipherPipelineUpdate()\fP عدة مرات لتعمية كتل متتالية من البيانات. لبيانات AAD، يجب أن يكون المعامل \fIout\fP و \fIoutsize\fP NULL، بدلاً من مصفوفة من مؤشرات NULL. .IP "\fBEVP_get_cipherbyname()\fP و \fBEVP_get_cipherbynid()\fP و \fBEVP_get_cipherbyobj()\fP" 4 .IX Item "EVP_get_cipherbyname() و EVP_get_cipherbynid() و EVP_get_cipherbyobj()" تُرجع بنية \fBEVP_CIPHER\fP عند تمرير اسم مُعمِّي، أو \fBNID\fP لمُعمِّي، أو بنية \fBASN1_OBJECT\fP على التوالي. .Sp سترجع \&\fBEVP_get_cipherbyname()\fP NULL للخوارزميات مثل "AES\-128\-SIV" و "AES\-128\-CBC\-CTS" و "CAMELLIA\-128\-CBC\-CTS" التي كانت سابقًا لا يمكن الوصول إليها إلا عبر واجهات منخفضة المستوى. .Sp الدالة \fBEVP_get_cipherbyname()\fP موجودة للتوافق العكسي مع OpenSSL قبل الإصدار 3 وتختلف عن الدالة \fBEVP_CIPHER_fetch()\fP لأنها لا تحاول "جلب" تنفيذ للمُعمِّي. بالإضافة إلى ذلك، فهي تعرف فقط المُعمِّيات المدمجة في OpenSSL والتي لها NID مرتبط. وبالمثل، تُرجع \fBEVP_get_cipherbynid()\fP و \fBEVP_get_cipherbyobj()\fP كائنات بدون تنفيذ مرتبط. .Sp عند استخدام كائنات المُعمِّي التي أرجعتها هذه الدوال (مثل في استدعاء \fBEVP_EncryptInit_ex()\fP)، سيُجلب تنفيذ للمُعمِّي ضمنيًا من المزودين المحملين. قد يفشل هذا الجلب إذا لم يتوفر تنفيذ مناسب. استخدم \fBEVP_CIPHER_fetch()\fP بدلاً من ذلك لجلب الخوارزمية وتنفيذ مرتبط من مزود بشكل صريح. .Sp انظر "ALGORITHM FETCHING" في \fBcrypto\fP\|(7) لمزيد من المعلومات حول الجلب. .Sp لا تحتاج كائنات المُعمِّي التي أرجعتها هذه الدوال إلى تحرير باستخدام \&\fBEVP_CIPHER_free()\fP. .IP "\fBEVP_CIPHER_get_nid()\fP و \fBEVP_CIPHER_CTX_get_nid()\fP" 4 .IX Item "EVP_CIPHER_get_nid() و EVP_CIPHER_CTX_get_nid()" تُرجع NID المُعمِّي عند تمرير بنية \fBEVP_CIPHER\fP أو \fBEVP_CIPHER_CTX\fP. قيمة NID الفعلية هي قيمة داخلية قد لا يكون لها مُعرّف كائن مطابق. تُرجع NID_undef في حال كان nid غير معروف أو إذا لم يُهيّأ المُعمِّي بشكل صحيح عبر استدعاء \&\fBEVP_CipherInit\fP. .IP "\fBEVP_CIPHER_CTX_set_flags()\fP و \fBEVP_CIPHER_CTX_clear_flags()\fP و \fBEVP_CIPHER_CTX_test_flags()\fP" 4 .IX Item "EVP_CIPHER_CTX_set_flags() و EVP_CIPHER_CTX_clear_flags() و EVP_CIPHER_CTX_test_flags()" يضبط ويمسح ويختبر أعلام \fIctx\fP. انظر "FLAGS" أدناه لمزيد من المعلومات. .Sp بالنسبة للمُعمّيات المُقدّمة، يجب استدعاء \fBEVP_CIPHER_CTX_set_flags()\fP فقط بعد تعيين المُعمّي المُستَرجَع إلى \fIctx\fP. يُوصى باستخدام "PARAMETERS" بدلاً من ذلك. .IP \fBEVP_CIPHER_CTX_set_padding()\fP 4 .IX Item EVP_CIPHER_CTX_set_padding() يُفعّل أو يُعطّل الحشو. يجب استدعاء هذه الدالة بعد إعداد السياق للتشفير أو فك التشفير باستخدام \fBEVP_EncryptInit_ex2()\fP أو \&\fBEVP_DecryptInit_ex2()\fP أو \fBEVP_CipherInit_ex2()\fP أو \fBEVP_CipherInit_SKEY()\fP. مبدئيًا، تُحشى عمليات التشفير باستخدام حشو الكتل القياسي، ويُفحص الحشو ويُزال عند فك التشفير. إذا كان المعامل \fIpad\fP صفرًا، فلا يُجرى أي حشو، ويجب أن يكون إجمالي كمية البيانات المُعمّاة أو المُفكّكة مضاعفًا لحجم الكتلة، وإلا سيحدث خطأ. \fIx\fP \fBيجب ألا\fP يكون NULL. .IP "\fBEVP_CIPHER_get_key_length()\fP و \fBEVP_CIPHER_CTX_get_key_length()\fP" 4 .IX Item "EVP_CIPHER_get_key_length() و EVP_CIPHER_CTX_get_key_length()" تُرجع طول مفتاح المُعمّي عند تمرير بنية \fBEVP_CIPHER\fP أو \&\fBEVP_CIPHER_CTX\fP. الثابت \fBEVP_MAX_KEY_LENGTH\fP هو أقصى طول مفتاح لجميع المُعمّيات. ملاحظة: على الرغم من أن \fBEVP_CIPHER_get_key_length()\fP ثابت لمُعمّي معين، إلا أن قيمة \fBEVP_CIPHER_CTX_get_key_length()\fP قد تختلف للمُعمّيات ذات طول المفتاح المتغير. .IP \fBEVP_CIPHER_CTX_set_key_length()\fP 4 .IX Item EVP_CIPHER_CTX_set_key_length() يُعيِّن طول مفتاح سياق المُعمّي. إذا كان المُعمّي بطول مفتاح ثابت، فإن محاولة تعيين طول المفتاح إلى أي قيمة غير القيمة الثابتة تُعد خطأ. .IP "\fBEVP_CIPHER_get_iv_length()\fP و \fBEVP_CIPHER_CTX_get_iv_length()\fP" 4 .IX Item "EVP_CIPHER_get_iv_length() و EVP_CIPHER_CTX_get_iv_length()" تُرجع طول IV للمُعمّي عند تمرير \fBEVP_CIPHER\fP أو \&\fBEVP_CIPHER_CTX\fP. تُرجع صفرًا إذا كان المُعمّي لا يستخدم IV، أو إذا لم يُهيّأ المُعمّي بعد داخل \fBEVP_CIPHER_CTX\fP، أو إذا كان المُعمّي المُمرَّر NULL. الثابت \fBEVP_MAX_IV_LENGTH\fP هو أقصى طول IV لجميع المُعمّيات. .IP \fBEVP_CIPHER_CTX_get_tag_length()\fP 4 .IX Item EVP_CIPHER_CTX_get_tag_length() تُرجع طول العلامة لمُعمّي AEAD عند تمرير \fBEVP_CIPHER_CTX\fP. تُرجع صفرًا إذا كان المُعمّي لا يدعم علامة. تُرجع قيمة مبدئية إذا لم يُعيَّن طول العلامة. .IP "\fBEVP_CIPHER_get_block_size()\fP و \fBEVP_CIPHER_CTX_get_block_size()\fP" 4 .IX Item "EVP_CIPHER_get_block_size() و EVP_CIPHER_CTX_get_block_size()" تُرجع حجم الكتلة لمُعمّي عند تمرير بنية \fBEVP_CIPHER\fP أو \&\fBEVP_CIPHER_CTX\fP. الثابت \fBEVP_MAX_BLOCK_LENGTH\fP هو أيضًا أقصى طول كتلة لجميع المُعمّيات. تُرجع القيمة 0 إذا كان، مع \fBEVP_CIPHER_get_block_size()\fP، المُعمّي \&\fIe\fP هو NULL، أو، مع \fBEVP_CIPHER_CTX_get_block_size()\fP، السياق \&\fIctx\fP هو NULL أو لم يُهيّأ بشكل صحيح باستدعاء \&\fBEVP_CipherInit\fP. .IP "\fBEVP_CIPHER_get_type()\fP و \fBEVP_CIPHER_CTX_get_type()\fP" 4 .IX Item "EVP_CIPHER_get_type() و EVP_CIPHER_CTX_get_type()" تُرجع نوع المُعمّي أو السياق المُمرَّر. هذا "النوع" هو NID الفعلي لمُعرّف كائن المُعمّي، وبالتالي يتجاهل معاملات المُعمّي (RC2 بطول 40 بت وRC2 بطول 128 بت لهما نفس NID). إذا لم يكن للمُعمّي مُعرّف كائن أو لا يدعم ASN1، فستُرجع هذه الدالة \&\fBNID_undef\fP. .IP \fBEVP_CIPHER_is_a()\fP 4 .IX Item EVP_CIPHER_is_a() تُرجع 1 إذا كان \fIcipher\fP تطبيقًا لخوارزمية قابلة للتعرّف عليها باستخدام \fIname\fP، وإلا تُرجع 0. إذا كان \fIcipher\fP مُعمّيًا قديمًا (أي أنه قيمة مُرجَعة من دوال مثل \fBEVP_aes128()\fP بدلاً من نتيجة \&\fBEVP_CIPHER_fetch()\fP)، فسيُؤخذ في الاعتبار فقط أسماء المُعمّيات المُسجّلة مع سياق المكتبة المبدئي (انظر \fBOSSL_LIB_CTX\fP\|(3)). .IP "\fBEVP_CIPHER_get0_name()\fP و \fBEVP_CIPHER_CTX_get0_name()\fP" 4 .IX Item "EVP_CIPHER_get0_name() و EVP_CIPHER_CTX_get0_name()" تُرجع اسم المُعمّي أو السياق المُمرَّر. بالنسبة للمُعمّيات المُستَرجَعة ذات الأسماء المتعددة، يُرجع واحد منها فقط. انظر أيضًا \fBEVP_CIPHER_names_do_all()\fP. \&\fIcipher\fP \fBيجب ألا\fP يكون NULL. .IP \fBEVP_CIPHER_names_do_all()\fP 4 .IX Item EVP_CIPHER_names_do_all() يجتاز جميع الأسماء لـ \fIcipher\fP، ويستدعي \fIfn\fP مع كل اسم و \&\fIdata\fP. هذا مفيد فقط مع \fBEVP_CIPHER\fP المُستَرجَعة. .IP \fBEVP_CIPHER_get0_description()\fP 4 .IX Item EVP_CIPHER_get0_description() تُرجع وصفًا للمُعمّي، مخصصًا للعرض والاستهلاك البشري. الوصف متروك لتطبيق المُعمّي. .IP \fBEVP_CIPHER_get0_provider()\fP 4 .IX Item EVP_CIPHER_get0_provider() تُرجع مؤشر \fBOSSL_PROVIDER\fP إلى المُزوّد الذي يُطبّق \&\fBEVP_CIPHER\fP المُعطى. .IP \fBEVP_CIPHER_CTX_get0_cipher()\fP 4 .IX Item EVP_CIPHER_CTX_get0_cipher() تُرجع بنية \fBEVP_CIPHER\fP عند تمرير بنية \fBEVP_CIPHER_CTX\fP. \&\fBEVP_CIPHER_CTX_get1_cipher()\fP مماثلة باستثناء أن الملكية تُنقل إلى المُستدعي. تُرجع كلتا الدالتين NULL عند الخطأ. .IP "\fBEVP_CIPHER_get_mode()\fP و \fBEVP_CIPHER_CTX_get_mode()\fP" 4 .IX Item "EVP_CIPHER_get_mode() و EVP_CIPHER_CTX_get_mode()" أرجع نمط المُعمِّي الكتلي: EVP_CIPH_ECB_MODE، EVP_CIPH_CBC_MODE، EVP_CIPH_CFB_MODE، EVP_CIPH_OFB_MODE، EVP_CIPH_CTR_MODE، EVP_CIPH_GCM_MODE، EVP_CIPH_CCM_MODE، EVP_CIPH_XTS_MODE، EVP_CIPH_WRAP_MODE، EVP_CIPH_OCB_MODE أو EVP_CIPH_SIV_MODE. إذا كان المُعمِّي مُعمِّي تدفق، فسيُرجَع EVP_CIPH_STREAM_CIPHER. .IP \fBEVP_CIPHER_get_flags()\fP 4 .IX Item EVP_CIPHER_get_flags() أرجع أي أعلام مرتبطة بالمُعمِّي. انظر "FLAGS" لقائمة بالأعلام المُعرَّفة حاليًا. .IP "\fBEVP_CIPHER_CTX_get_num()\fP و \fBEVP_CIPHER_CTX_set_num()\fP" 4 .IX Item "EVP_CIPHER_CTX_get_num() و EVP_CIPHER_CTX_set_num()" يحصل أو يعيّن المُعامل "num" الخاص بالمُعمِّي لـ \fIctx\fP المرتبط. تستخدم المُعمِّيات المضمنة هذا عادةً لتتبع مقدار الكتلة الأساسية الحالية التي "استُخدمت" بالفعل. .IP \fBEVP_CIPHER_CTX_is_encrypting()\fP 4 .IX Item EVP_CIPHER_CTX_is_encrypting() يُبلغ عما إذا كان \fIctx\fP يُستخدم للتعمية أو فك التعمية. .IP \fBEVP_CIPHER_CTX_flags()\fP 4 .IX Item EVP_CIPHER_CTX_flags() كليّة مهملة تستدعي \f(CW\*(C`EVP_CIPHER_get_flags(EVP_CIPHER_CTX_get0_cipher(ctx))\*(C'\fP. لا تستخدمها. .IP \fBEVP_CIPHER_param_to_asn1()\fP 4 .IX Item EVP_CIPHER_param_to_asn1() يُعيّن "المُعامل" AlgorithmIdentifier بناءً على المُعمِّي المُمرَّر. سيتضمن هذا عادةً أي مُعاملات و IV. يجب تعيين IV المُعمِّي (إن وُجد) عند إجراء هذه الاستدعاء. يجب إجراء هذه الاستدعاء قبل أن يُستخدم المُعمِّي فعليًا (قبل أي استدعاءات \fBEVP_EncryptUpdate()\fP، \fBEVP_DecryptUpdate()\fP على سبيل المثال). قد تفشل هذه الدالة إذا لم يكن للمُعمِّي أي دعم ASN1، أو إذا مُرِّر إليها مُعمِّي غير مُهيَّأ. .IP \fBEVP_CIPHER_asn1_to_param()\fP 4 .IX Item EVP_CIPHER_asn1_to_param() يُعيّن مُعاملات المُعمِّي بناءً على "مُعامل" ASN1 AlgorithmIdentifier. يعتمد التأثير الدقيق على المُعمِّي. في حالة \fBRC2\fP، على سبيل المثال، سيُعيّن IV وطول المفتاح الفعّال. يجب استدعاء هذه الدالة بعد تعيين نوع المُعمِّي الأساسي ولكن قبل تعيين المفتاح. على سبيل المثال، سيُستدعى \fBEVP_CipherInit()\fP مع تعيين IV والمفتاح إلى NULL، ثم يُستدعى \fBEVP_CIPHER_asn1_to_param()\fP وأخيرًا \&\fBEVP_CipherInit()\fP مرة أخرى مع جميع المُعاملات باستثناء المفتاح المُعيَّن إلى NULL. من الممكن أن تفشل هذه الدالة إذا لم يكن للمُعمِّي أي دعم ASN1 أو إذا تعذر تعيين المُعاملات (على سبيل المثال، طول المفتاح الفعّال لـ RC2 غير مدعوم). .IP \fBEVP_CIPHER_CTX_rand_key()\fP 4 .IX Item EVP_CIPHER_CTX_rand_key() يُولّد مفتاحًا عشوائيًا بالطول المناسب بناءً على سياق المُعمِّي. يمكن لـ \fBEVP_CIPHER\fP توفير روتين توليد مفتاح عشوائي خاص به لدعم مفاتيح ذات شكل محدد. يجب أن يشير \fIkey\fP إلى مخزن مؤقت لا يقل حجمه عن القيمة المُرجَعة بواسطة \fBEVP_CIPHER_CTX_get_key_length()\fP. .IP \fBEVP_CIPHER_do_all_provided()\fP 4 .IX Item EVP_CIPHER_do_all_provided() يجتاز جميع المُعمِّيات المُنفَّذة بواسطة جميع المزوّدات المُنشَّطة في سياق المكتبة المُعطى \fIlibctx\fP، وبالنسبة لكل تنفيذ، يستدعي الدالة المُعطاة \fIfn\fP مع طريقة التنفيذ و \fIarg\fP المُعطى كوسيطة. .SH المعاملات .IX Header المعاملات انظر \fBOSSL_PARAM\fP\|(3) لمعلومات حول تمرير المعاملات. .SS "مُعاملات EVP_CIPHER القابلة للحصول" .IX Subsection "مُعاملات EVP_CIPHER القابلة للحصول" عند استدعاء \fBEVP_CIPHER_fetch()\fP، فإنه يستدعي داخليًا \fBEVP_CIPHER_get_params()\fP ويخبئ النتائج. .PP يمكن استخدام \&\fBEVP_CIPHER_get_params()\fP مع مفاتيح \fBOSSL_PARAM\fP\|(3) التالية: .IP "\(dqmode\(dq (\fBOSSL_CIPHER_PARAM_MODE\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqmode\(dq (OSSL_CIPHER_PARAM_MODE) <عدد صحيح غير مُوقَّع>" يحصل على النمط لخوارزمية المُعمِّي المرتبطة \fIcipher\fP. انظر "\fBEVP_CIPHER_get_mode()\fP و \fBEVP_CIPHER_CTX_get_mode()\fP" لقائمة الأنماط الصالحة. استخدم \fBEVP_CIPHER_get_mode()\fP لاسترداد القيمة المُخبَّأة. .IP "\(dqkeylen\(dq (\fBOSSL_CIPHER_PARAM_KEYLEN\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqkeylen\(dq (OSSL_CIPHER_PARAM_KEYLEN) <عدد صحيح غير مُوقَّع>" يحصل على طول المفتاح لخوارزمية المُعمِّي المرتبطة \fIcipher\fP. استخدم \fBEVP_CIPHER_get_key_length()\fP لاسترداد القيمة المُخبَّأة. .IP "\(dqivlen\(dq (\fBOSSL_CIPHER_PARAM_IVLEN\fP) <عدد صحيح غير مُوقّع>" 4 .IX Item "\(dqivlen\(dq (OSSL_CIPHER_PARAM_IVLEN) <عدد صحيح غير مُوقّع>" يحصل على طول IV لخوارزمية التعمية المرتبطة \fIcipher\fP. استخدم \fBEVP_CIPHER_get_iv_length()\fP لاسترجاع القيمة المخبأة. .IP "\(dqblocksize\(dq (\fBOSSL_CIPHER_PARAM_BLOCK_SIZE\fP) <عدد صحيح غير مُوقّع>" 4 .IX Item "\(dqblocksize\(dq (OSSL_CIPHER_PARAM_BLOCK_SIZE) <عدد صحيح غير مُوقّع>" يحصل على حجم الكتلة لخوارزمية التعمية المرتبطة \fIcipher\fP. يجب أن يكون حجم الكتلة 1 لمعميات التدفق. لاحظ أن حجم الكتلة لمعمٍ قد يختلف عن حجم الكتلة للأولية الأساسية للتعمية/فك التعمية. على سبيل المثال، AES في وضع CTR له حجم كتلة 1 (لأنه يعمل مثل معمي تدفق)، على الرغم من أن AES له حجم كتلة 16. استخدم \fBEVP_CIPHER_get_block_size()\fP لاسترجاع القيمة المخبأة. .IP "\(dqaead\(dq (\fBOSSL_CIPHER_PARAM_AEAD\fP) <عدد صحيح>" 4 .IX Item "\(dqaead\(dq (OSSL_CIPHER_PARAM_AEAD) <عدد صحيح>" يحصل على 1 إذا كانت هذه خوارزمية تعمية AEAD، وإلا يحصل على 0. استخدم (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_AEAD_CIPHER) لاسترجاع القيمة المخبأة. .IP "\(dqcustom\-iv\(dq (\fBOSSL_CIPHER_PARAM_CUSTOM_IV\fP) <عدد صحيح>" 4 .IX Item "\(dqcustom\-iv\(dq (OSSL_CIPHER_PARAM_CUSTOM_IV) <عدد صحيح>" يحصل على 1 إذا كانت خوارزمية التعمية \fIcipher\fP تملك IV مخصص، وإلا يحصل على 0. يُترك تخزين وتهيئة IV بالكامل للتنفيذ، إذا استُخدم IV مخصص. استخدم (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_CUSTOM_IV) لاسترجاع القيمة المخبأة. .IP "\(dqcts\(dq (\fBOSSL_CIPHER_PARAM_CTS\fP) <عدد صحيح>" 4 .IX Item "\(dqcts\(dq (OSSL_CIPHER_PARAM_CTS) <عدد صحيح>" يحصل على 1 إذا كانت خوارزمية التعمية \fIcipher\fP تستخدم سرقة النص المُعمّى، وإلا يحصل على 0. يُستخدم هذا حالياً للإشارة إلى أن المُعمّي هو لمرة واحدة يسمح فقط باستدعاء واحد لـ \fBEVP_CipherUpdate()\fP. استخدم (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_CTS) لاسترجاع القيمة المخبأة. .IP "\(dqtls\-multi\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK\fP) <عدد صحيح>" 4 .IX Item "\(dqtls\-multi\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK) <عدد صحيح>" يحصل على 1 إذا كانت خوارزمية التعمية \fIcipher\fP تدعم تداخل الكتل التعموية، وإلا يحصل على 0. التداخل هو تحسين ينطبق فقط على معميات TLS معينة. استخدم (EVP_CIPHER_get_flags(cipher) & EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) لاسترجاع القيمة المخبأة. .IP "\(dqhas\-randkey\(dq (\fBOSSL_CIPHER_PARAM_HAS_RANDKEY\fP) <عدد صحيح>" 4 .IX Item "\(dqhas\-randkey\(dq (OSSL_CIPHER_PARAM_HAS_RANDKEY) <عدد صحيح>" يحصل على 1 إذا كانت خوارزمية التشفير \fIcipher\fP تدعم معامل EVP_CIPHER_CTX القابل للحصول عليه \fBOSSL_CIPHER_PARAM_RANDOM_KEY\fP. فقط DES و3DES يضبطان هذا على 1، وجميع المُعمِّيات الأخرى في OpenSSL تُرجع 0. .IP "\(dqفك\-التعمية\-فقط\(dq (\fBOSSL_CIPHER_PARAM_DECRYPT_ONLY) <عدد صحيح\fP" 4 .IX Item "\(dqفك\-التعمية\-فقط\(dq (OSSL_CIPHER_PARAM_DECRYPT_ONLY) <عدد صحيح" يحصل على 1 إذا كان تنفيذ خوارزمية التشفير \fIcipher\fP يدعم فقط عملية فك التشفير مثل مُعمِّيات 3DES في موفر fips. وإلا يحصل على 0 أو قد لا يكون المعامل موجودًا على الإطلاق. .SS "معاملات EVP_CIPHER_CTX القابلة للحصول عليها والتعيين" .IX Subsection "معاملات EVP_CIPHER_CTX القابلة للحصول عليها والتعيين" يمكن استخدام مفاتيح \fBOSSL_PARAM\fP\|(3) التالية مع كل من \fBEVP_CIPHER_CTX_get_params()\fP و\fBEVP_CIPHER_CTX_set_params\fP(). .IP "\(dqالحشو\(dq (\fBOSSL_CIPHER_PARAM_PADDING\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqالحشو\(dq (OSSL_CIPHER_PARAM_PADDING) <عدد صحيح غير موقع>" يحصل على أو يعيّن وضع الحشو لسياق التشفير \fIctx\fP. يُفعّل الحشو إذا كانت القيمة 1، ويُعطّل إذا كانت القيمة 0. انظر أيضًا \fBEVP_CIPHER_CTX_set_padding\fP(). .IP "\(dqالعدد\(dq (\fBOSSL_CIPHER_PARAM_NUM\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqالعدد\(dq (OSSL_CIPHER_PARAM_NUM) <عدد صحيح غير موقع>" يحصل على أو يعيّن معامل "العدد" الخاص بالتشفير لسياق التشفير \fIctx\fP. تستخدم المُعمِّيات المدمجة هذا عادةً لتتبع مقدار الكتلة الأساسية الحالية التي "استُخدمت" بالفعل. انظر أيضًا \fBEVP_CIPHER_CTX_get_num()\fP و\fBEVP_CIPHER_CTX_set_num\fP(). .IP "\(dqkeylen\(dq (\fBOSSL_CIPHER_PARAM_KEYLEN\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqkeylen\(dq (OSSL_CIPHER_PARAM_KEYLEN) <عدد صحيح غير مُوقَّع>" يحصل على أو يعيّن طول المفتاح لسياق التشفير \fIctx\fP. يجب ألا يتجاوز طول معامل "keylen" طول \fBsize_t\fP. انظر أيضًا \fBEVP_CIPHER_CTX_get_key_length()\fP و\fBEVP_CIPHER_CTX_set_key_length\fP(). .IP "\(dqالوسم\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TAG\fP) <سلسلة ثمانية>" 4 .IX Item "\(dqالوسم\(dq (OSSL_CIPHER_PARAM_AEAD_TAG) <سلسلة ثمانية>" يحصل على أو يعيّن وسم AEAD لسياق التشفير المرتبط \fIctx\fP. انظر "واجهة AEAD" في \fBEVP_EncryptInit\fP\|(3). .IP "\(dqوسم\-الخط\-الأنابيب\(dq (\fBOSSL_CIPHER_PARAM_PIPELINE_AEAD_TAG\fP) <مؤشر ثماني>" 4 .IX Item "\(dqوسم\-الخط\-الأنابيب\(dq (OSSL_CIPHER_PARAM_PIPELINE_AEAD_TAG) <مؤشر ثماني>" يحصل على أو يعيّن وسم AEAD عند استخدام خط أنابيب التشفير. يجب أن يشير المؤشر إلى مصفوفة من المخازن المؤقتة، حيث يُقرأ أو يُكتب وسم aead. يجب أن يكون حجم المصفوفة مساويًا لـ \fInumpipes\fP المستخدم في \&\fBEVP_CipherPipelineEncryptInit()\fP أو \fBEVP_CipherPipelineDecryptInit\fP(). .IP "\(dqبتات\-المفتاح\(dq (\fBOSSL_CIPHER_PARAM_RC2_KEYBITS\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqkeybits\(dq (OSSL_CIPHER_PARAM_RC2_KEYBITS) <عدد صحيح غير مُوقَّع>" يحصل أو يضبط keybits الفعالة المستخدمة لمعمّي RC2. يجب ألا يتجاوز طول معامل "keybits" طول \fBsize_t\fP. .IP "\(dqrounds\(dq (\fBOSSL_CIPHER_PARAM_ROUNDS\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqrounds\(dq (OSSL_CIPHER_PARAM_ROUNDS) <عدد صحيح غير مُوقَّع>" يحصل أو يضبط عدد الجولات المستخدمة لمعمّي. يُستخدم هذا بواسطة معمّي RC5. .IP "\(dqalgorithm\-id\(dq (\fBOSSL_CIPHER_PARAM_ALGORITHM_ID\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqalgorithm\-id\(dq (OSSL_CIPHER_PARAM_ALGORITHM_ID) " يُستخدم للحصول على AlgorithmIdentifier المُرمَّز بـ DER من تطبيق المعمّي. دوال مثل \fBEVP_PKEY_CTX_get_algor\fP\|(3) تستخدم هذا المعامل. .IP "\(dqalgorithm\-id\-params\(dq (\fBOSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqalgorithm\-id\-params\(dq (OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS) <سلسلة ثمانيات>" يُستخدم لتمرير معامل AlgorithmIdentifier المُرمَّز بـ DER إلى أو من تطبيق المعمّي. دوال مثل \fBEVP_CIPHER_CTX_set_algor_params\fP\|(3) و \&\fBEVP_CIPHER_CTX_get_algor_params\fP\|(3) تستخدم هذا المعامل. .IP "\(dqalg_id_params\(dq (\fBOSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqalg_id_params\(dq (OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS_OLD) <سلسلة ثمانيات>" اسم مستعار مُهمَل لـ "algorithm\-id\-params"، يُستخدم فقط بواسطة \&\fBEVP_CIPHER_param_to_asn1\fP\|(3) و \fBEVP_CIPHER_asn1_to_param\fP\|(3). .IP "\(dqcts_mode\(dq (\fBOSSL_CIPHER_PARAM_CTS_MODE\fP) <سلسلة UTF8>" 4 .IX Item "\(dqcts_mode\(dq (OSSL_CIPHER_PARAM_CTS_MODE) <سلسلة UTF8>" يحصل أو يضبط وضع سرقة نص المعمّي. لجميع الأوضاع، حجم المخرجات هو نفس حجم المدخلات. يجب أن يكون طول المدخلات أكبر من أو يساوي حجم الكتلة. (حجم الكتلة لـ AES و CAMELLIA هو 16 بايت). .Sp القيم الصالحة للوضع هي: .RS 4 .IP \(dqCS1\(dq 4 .IX Item \(dqCS1\(dq البديل NIST لسرقة نص المعمّي. لأطوال المدخلات التي هي مضاعفات حجم الكتلة، يكون مكافئًا لاستخدام معمّي "AES\-XXX\-CBC" أو "CAMELLIA\-XXX\-CBC"، وإلا فإن كتلة نص المعمّي قبل الأخيرة هي كتلة جزئية. .IP \(dqCS2\(dq 4 .IX Item \(dqCS2\(dq بالنسبة لأطوال الإدخال التي تكون مضاعفات حجم الكتلة، فإنها تعادل استخدام المُعمِّي "AES\-XXX\-CBC" أو "CAMELLIA\-XXX\-CBC"، وإلا فهي نفس وضع "CS3". .IP \(dqCS3\(dq 4 .IX Item \(dqCS3\(dq المتغير Kerberos5 لسرقة نص المُعمِّي الذي يُبدل دائمًا آخر كتلة نص معمّي مع الكتلة السابقة (والتي قد تكون كتلة جزئية أو كاملة حسب طول الإدخال). إذا كان طول الإدخال كتلة كاملة واحدة تمامًا، فإن هذا يعادل استخدام المُعمِّي "AES\-XXX\-CBC" أو "CAMELLIA\-XXX\-CBC". .RE .RS 4 .Sp المبدئي هو "CS1". هذا مدعوم فقط لـ "AES\-128\-CBC\-CTS"، "AES\-192\-CBC\-CTS"، "AES\-256\-CBC\-CTS"، "CAMELLIA\-128\-CBC\-CTS"، "CAMELLIA\-192\-CBC\-CTS" و "CAMELLIA\-256\-CBC\-CTS". .RE .IP "\(dqtls1multi_interleave\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqtls1multi_interleave\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE) <عدد صحيح غير موقع>" يُعيِّن أو يحصل على عدد السجلات المُرسلة دفعة واحدة لعملية مُعمِّي متعدد الكتل tls1 (إما 4 أو 8 سجلات). .SS "معاملات EVP_CIPHER_CTX القابلة للحصول" .IX Subsection "معاملات EVP_CIPHER_CTX القابلة للحصول" يمكن استخدام مفاتيح \fBOSSL_PARAM\fP\|(3) التالية مع \fBEVP_CIPHER_CTX_get_params()\fP: .IP "\(dqivlen\(dq (\fBOSSL_CIPHER_PARAM_IVLEN\fP و <\fBOSSL_CIPHER_PARAM_AEAD_IVLEN\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqivlen\(dq (OSSL_CIPHER_PARAM_IVLEN و " يحصل على طول IV لسياق المُعمِّي \fIctx\fP. يجب ألا يتجاوز طول معامل "ivlen" طول \fBsize_t\fP. انظر أيضًا \fBEVP_CIPHER_CTX_get_iv_length()\fP. .IP "\(dqiv\(dq (\fBOSSL_CIPHER_PARAM_IV\fP) <سلسلة ثمانية أو مؤشر ثماني>" 4 .IX Item "\(dqiv\(dq (OSSL_CIPHER_PARAM_IV) <سلسلة ثمانية أو مؤشر ثماني>" يحصل على IV المُستخدم لتهيئة سياق المُعمِّي المرتبط \fIctx\fP. انظر أيضًا \fBEVP_CIPHER_CTX_get_original_iv()\fP. .IP "\(dqupdated\-iv\(dq (\fBOSSL_CIPHER_PARAM_UPDATED_IV\fP) <سلسلة ثمانية أو مؤشر ثماني>" 4 .IX Item "\(dqupdated\-iv\(dq (OSSL_CIPHER_PARAM_UPDATED_IV) <سلسلة ثمانية أو مؤشر ثماني>" يحصل على حالة pseudo\-IV المُحدَّثة لسياق المُعمِّي المرتبط، على سبيل المثال، كتلة النص المُعمَّي السابقة لوضع CBC أو قيمة IV المُعمَّاة تكراريًا لوضع OFB. لاحظ أن الوصول عبر المؤشر الثماني مُهمَل ويُوفَّر فقط للتوافق العكسي مع واجهات برمجة تطبيقات libcrypto التاريخية. انظر أيضًا \fBEVP_CIPHER_CTX_get_updated_iv()\fP. .IP "\(dqrandkey\(dq (\fBOSSL_CIPHER_PARAM_RANDOM_KEY\fP) <سلسلة ثمانية>" 4 .IX Item "\(dqrandkey\(dq (OSSL_CIPHER_PARAM_RANDOM_KEY) <سلسلة محارف ثمانية>" يحصل على مفتاح مُولَّد آليًا خاص بالتطبيق لسياق المُعمِّي المرتبط \fIctx\fP. هذا مدعوم حاليًا فقط بواسطة DES و 3DES (اللتان تضبطان المفتاح على تكافؤ فردي). .IP "\(dqtaglen\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TAGLEN\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtaglen\(dq (OSSL_CIPHER_PARAM_AEAD_TAGLEN) <عدد صحيح غير مُوقَّع>" يحصل على طول الوسم المستخدم لمعمّي AEAD لسياق المُعمِّي المرتبط \fIctx\fP. يحصل على قيمة مبدئية إذا لم يُضبط. لا يجب أن يتجاوز طول معامل "taglen" طول \fBsize_t\fP. انظر أيضًا \fBEVP_CIPHER_CTX_get_tag_length()\fP. .IP "\(dqtlsaadpad\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtlsaadpad\(dq (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD) <عدد صحيح غير مُوقَّع>" يحصل على طول الوسم الذي يُضاف إلى سجل TLS لوسم AEAD لسياق المُعمِّي المرتبط \fIctx\fP. لا يجب أن يتجاوز طول معامل "tlsaadpad" طول \fBsize_t\fP. .IP "\(dqtlsivgen\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN\fP) <سلسلة محارف ثمانية>" 4 .IX Item "\(dqtlsivgen\(dq (OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN) <سلسلة محارف ثمانية>" يحصل على حقل الاستدعاء المُولَّد للتعمية. يمكن استدعاؤه فقط بعد ضبط "tlsivfixed". يُستخدم هذا فقط لوضع GCM. .IP "\(dqtls1multi_enclen\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtls1multi_enclen\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN) <عدد صحيح غير مُوقَّع>" يحصل على الطول الإجمالي للسجل المُعاد من عملية "tls1multi_enc". .IP "\(dqtls1multi_maxbufsz\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtls1multi_maxbufsz\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE) <عدد صحيح غير مُوقَّع>" يحصل على أقصى طول سجل لعملية معمّي متعدد الكتل TLS1. لا يجب أن يتجاوز طول معامل "tls1multi_maxbufsz" طول \fBsize_t\fP. .IP "\(dqtls1multi_aadpacklen\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtls1multi_aadpacklen\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN) <عدد صحيح غير مُوقَّع>" يحصل على نتيجة تشغيل عملية "tls1multi_aad". .IP "\(dqtls\-mac\(dq (\fBOSSL_CIPHER_PARAM_TLS_MAC\fP) <مؤشر ثماني>" 4 .IX Item "\(dqtls\-mac\(dq (OSSL_CIPHER_PARAM_TLS_MAC) <مؤشر ثماني>" يُستخدم لتمرير بيانات MAC الخاصة بـ TLS. .IP "\(dqfips\-indicator\(dq (\fBOSSL_CIPHER_PARAM_FIPS_APPROVED_INDICATOR\fP) <عدد صحيح>" 4 .IX Item "\(dqfips\-indicator\(dq (OSSL_CIPHER_PARAM_FIPS_APPROVED_INDICATOR) <عدد صحيح>" يُستخدم هذا الخيار من قبل موفر FIPS الخاص بـ OpenSSL. .Sp دالة استرجاع تُرجع 1 إذا كانت العملية معتمدة من FIPS، أو 0 بخلاف ذلك. يُمكن استخدامها بعد استدعاء عملية تعمية نهائية مثل \&\fBEVP_EncryptFinal_ex()\fP. قد تُرجع 0 إذا تم تعيين خيار "encrypt\-check" إلى 0. .IP "\(dqiv\-generated\(dq (\fBOSSL_CIPHER_PARAM_AEAD_IV_GENERATED\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqiv\-generated\(dq (OSSL_CIPHER_PARAM_AEAD_IV_GENERATED) <عدد صحيح غير موقع>" مؤشر يُرجع 1 إذا تم إنشاء IV داخليًا أثناء التعمية، أو O بخلاف ذلك. يُمكن استخدامه من قبل معميات GCM بعد استدعاء عملية تعمية نهائية مثل \fBEVP_EncryptFinal_ex()\fP. يجب على GCM إنشاء IV داخليًا إذا لم يُحدد IV أثناء استدعاء تهيئة التعمية مثل \fBEVP_CipherInit_ex()\fP. راجع FIPS 140\-3 IG C.H للحصول على معلومات متعلقة بمتطلبات IV. .SS "معاملات EVP_CIPHER_CTX القابلة للضبط" .IX Subsection "معاملات EVP_CIPHER_CTX القابلة للضبط" يمكن استخدام المفاتيح \fBOSSL_PARAM\fP\|(3) التالية مع \fBEVP_CIPHER_CTX_set_params()\fP: .IP "\(dqmackey\(dq (\fBOSSL_CIPHER_PARAM_AEAD_MAC_KEY\fP) <سلسلة ثمانية>" 4 .IX Item "\(dqmackey\(dq (OSSL_CIPHER_PARAM_AEAD_MAC_KEY) <سلسلة ثمانية>" يضبط مفتاح MAC المستخدم من قبل معميات AEAD المركبة مثل AES\-CBC\-HMAC\-SHA256. .IP "\(dqspeed\(dq (\fBOSSL_CIPHER_PARAM_SPEED\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqspeed\(dq (OSSL_CIPHER_PARAM_SPEED) <عدد صحيح غير موقع>" يضبط خيار السرعة لسياق التعمية المرتبط. هذا مدعوم فقط من قبل معميات AES SIV التي تمنع العمليات المتعددة مبدئيًا. ضبط "speed" إلى 1 يسمح بإجراء عملية تعمية أو فك تعمية أخرى. يُستخدم هذا لاختبار الأداء. .IP "\(dquse\-bits\(dq (\fBOSSL_CIPHER_PARAM_USE_BITS\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dquse\-bits\(dq (OSSL_CIPHER_PARAM_USE_BITS) <عدد صحيح غير موقع>" يحدد ما إذا كان طول الإدخال \fIinl\fP المُمرر إلى \fBEVP_EncryptUpdate()\fP و\&\fBEVP_DecryptUpdate()\fP و\fBEVP_CipherUpdate()\fP هو عدد البتات أم عدد البايتات. تعيين "use\-bits" إلى 1 يستخدم البتات. المبدئي هو بالبايتات. يُستخدم هذا فقط لمعميات \fBCFB1\fP. .Sp يمكن تعيين هذا باستخدام EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPH_FLAG_LENGTH_BITS). .IP "\(dqtls\-version\(dq (\fBOSSL_CIPHER_PARAM_TLS_VERSION\fP) <عدد صحيح>" 4 .IX Item "\(dqtls\-version\(dq (OSSL_CIPHER_PARAM_TLS_VERSION) <عدد صحيح>" يُعيِّن إصدار TLS. .IP "\(dqtls\-mac\-size\(dq (\fBOSSL_CIPHER_PARAM_TLS_MAC_SIZE\fP) <عدد صحيح غير مُوقَّع>" 4 .IX Item "\(dqtls\-mac\-size\(dq (OSSL_CIPHER_PARAM_TLS_MAC_SIZE) <عدد صحيح غير مُوقَّع>" يُعيِّن حجم MAC لـ TLS. .IP "\(dqtlsaad\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_AAD\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqtlsaad\(dq (OSSL_CIPHER_PARAM_AEAD_TLS1_AAD) <سلسلة ثمانيات>" يُعيِّن معلومات AAD لـ TLSv1.2 لسياق التعمية المرتبط \fIctx\fP. معلومات AAD لـ TLSv1.2 طولها دائمًا 13 بايت وهي كما هو مُعرَّف لحقل "additional_data" الموصوف في القسم 6.2.3.3 من RFC5246. .IP "\(dqtlsivfixed\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqtlsivfixed\(dq (OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED) <سلسلة ثمانيات>" يُعيِّن الجزء الثابت من IV لتعمية AEAD المُستخدمة في تعمية/فك تعمية سجل TLS لسياق التعمية المرتبط. تعمية/فك تعمية سجل TLS تحدث دائمًا "في المكان" بحيث تكون مخازن الإدخال والإخراج دائمًا في نفس موقع الذاكرة. IVs لـ AEAD في TLSv1.2 تتكون من جزء "ثابت" ضمني وجزء صريح يختلف مع كل سجل. تعيين IV ثابت لـ TLS يُغيِّر التعمية لتعمية/فك تعمية سجلات TLS. تُعمَّى/تُفك تعمية سجلات TLS باستخدام استدعاء واحد لـ OSSL_FUNC_cipher_cipher لكل سجل. لفك تعمية سجل، ستكون البايتات الأولى من مخزن الإدخال هي الجزء الصريح من IV والبايتات الأخيرة من مخزن الإدخال ستكون علامة AEAD. طول الجزء الصريح من IV وطول العلامة سيعتمدان على التعمية المُستخدمة وسيُعرَّفان في RFC لمجموعة التعمية ذات الصلة. للسماح بفك التعمية "في المكان"، يجب كتابة مخرجات النص الصريح إلى نفس الموقع في مخزن الإخراج الذي قُرئ منه حمولة النص المُعمَّى، أي مباشرة بعد IV الصريح. .Sp عند تعمية سجل، يجب أن تكون البايتات الأولى من مخزن الإدخال فارغة لإتاحة مساحة لـ IV الصريح، وكذلك البايتات الأخيرة حيث ستُكتب العلامة. سيتضمن طول مخزن الإدخال طول IV الصريح والحمولة وبايتات العلامة. يجب على تطبيق التعمية توليد IV الصريح وكتابته في بداية مخزن الإخراج، وإجراء تعمية "في المكان" للحمولة وكتابتها إلى مخزن الإخراج، وأخيرًا إضافة العلامة إلى نهاية مخزن الإخراج. .Sp سواءً عند التعمية أو فك التعمية، يجب أن تكون القيمة المكتوبة إلى \fI*outl\fP في استدعاء OSSL_FUNC_cipher_cipher هي طول الحمولة باستثناء طول IV الصريح وطول العلامة. .IP "\(dqtlsivinv\(dq (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqtlsivinv\(dq (OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV) <سلسلة ثمانيات>" يُعيِّن حقل الاستدعاء المُستخدم لفك التعمية. يمكن استدعاؤه فقط بعد تعيين "tlsivfixed". يُستخدم هذا فقط لوضع GCM. .IP "\(dqtls1multi_enc\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC\fP) <سلسلة ثمانيات>" 4 .IX Item "\(dqtls1multi_enc\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC) <سلسلة ثمانية>" يُشغّل عملية تعمية TLS1 متعددة الكتل لمعمٍ واعٍ بـTLS1 يدعم إرسال 4 أو 8 سجلات دفعة واحدة. يُنفّذ المُعمّي مرحلتي MAC والتعمية ويُشكّل رؤوس السجلات بنفسه. يُزوّد "tls1multi_enc" مخزن الإخراج لعملية التعمية، ويجب أيضًا ضبط "tls1multi_encin" و"tls1multi_interleave" لتزويد القيم لعملية التعمية. .IP "\(dqtls1multi_encin\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN\fP) <سلسلة ثمانية>" 4 .IX Item "\(dqtls1multi_encin\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN) <سلسلة ثمانية>" يُزوّد البيانات المراد تعميتها لعملية معمّي متعدد الكتل TLS1. .IP "\(dqtls1multi_maxsndfrag\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT\fP) <عدد صحيح غير مُوقّع>" 4 .IX Item "\(dqtls1multi_maxsndfrag\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT) <عدد صحيح غير مُوقّع>" يضبط الحجم الأقصى لشظية الإرسال لعملية معمّي متعدد الكتل TLS1. يجب ضبطه قبل استخدام "tls1multi_maxbufsz". يجب ألا يتجاوز طول معامل "tls1multi_maxsndfrag" طول \fBsize_t\fP. .IP "\(dqtls1multi_aad\(dq (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD\fP) <سلسلة ثمانية>" 4 .IX Item "\(dqtls1multi_aad\(dq (OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD) <سلسلة ثمانية>" يضبط البيانات الإضافية المُوثّقة المستخدمة في عملية معمّي متعدد الكتل TLS1. تتكون البيانات المُزوّدة من 13 بايت من بيانات السجل تحتوي على: البايتات 0\-7: الرقم التسلسلي للسجل الأول البايت 8: نوع السجل البايت 9\-10: إصدار البروتوكول البايت 11\-12: طول الإدخال (دائمًا 0) .Sp يجب أيضًا ضبط "tls1multi_interleave" لهذه العملية. .IP "\(dqxts_standard\(dq (\fBOSSL_CIPHER_PARAM_XTS_STANDARD\fP) <سلسلة UTF8>" 4 .IX Item "\(dqxts_standard\(dq (OSSL_CIPHER_PARAM_XTS_STANDARD) <سلسلة UTF8>" يضبط معيار XTS لاستخدامه مع خوارزمية SM4\-XTS. لوضع XTS تطبيقان، أحدهما مُوحّد في IEEE Std. 1619\-2007 ويُستخدم على نطاق واسع (مثل XTS AES)، والآخر مُقترح مؤخرًا (GB/T 17964\-2021 المُنفّذ في مايو 2022) ويُستخدم حاليًا فقط في SM4. .Sp الفرق الرئيسي بينهما هو الضرب بالعنصر البدائي α لحساب قيم التعديل. لاحظ IEEE Std 1619\-2007 أن الضرب "هو إزاحة لليسار لكل بايت بمقدار بت واحد مع حمل ينتشر من بايت إلى التالي"، مما يعني أنه في كل بايت، البت الأيسر هو البت الأكثر أهمية. لكن في GB/T 17964\-2021، البت الأيمن هو البت الأكثر أهمية، وبالتالي يصبح الضرب إزاحة لليمين لكل بايت بمقدار بت واحد مع حمل ينتشر من بايت إلى التالي. .Sp القيم الصالحة للوضع هي: .RS 4 .IP \(dqGB\(dq 4 .IX Item \(dqGB\(dq البديل GB/T 17964\-2021 لخوارزمية SM4\-XTS. .IP \(dqIEEE\(dq 4 .IX Item \(dqIEEE\(dq البديل IEEE Std. 1619\-2007 لخوارزمية SM4\-XTS. .RE .RS 4 .Sp القيمة المبدئية هي "GB". .RE .IP "\(dqencrypt\-check\(dq (\fBOSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK\fP) <عدد صحيح>" 4 .IX Item "\(dqencrypt\-check\(dq (OSSL_CIPHER_PARAM_FIPS_ENCRYPT_CHECK) <عدد صحيح>" يُستخدم هذا الخيار من قبل موفر FIPS الخاص بـ OpenSSL. .Sp إذا كان مطلوبًا، يجب تعيين هذا المعامل مبكرًا عبر دالة تهيئة تعمية مثل \fBEVP_EncryptInit_ex2()\fP. القيمة المبدئية 1 تُسبب خطأً عند تشغيل عملية تعمية. تعيين هذا إلى 0 سيتجاهل الخطأ ويُعيِّن "مؤشر fips" المعتمد إلى 0. هذا الخيار يُخلّ بالامتثال لـ FIPS إذا تسبب في إرجاع "مؤشر fips" المعتمد القيمة 0. .SH "عناصر التحكم" .IX Header "عناصر التحكم" التوافقات من معرفات \fBEVP_CIPHER_CTX_ctrl()\fP إلى المعاملات مُدرجة في القسم التالي. راجع قسم "المعاملات" لمزيد من التفاصيل. .PP \&يمكن استخدام \fBEVP_CIPHER_CTX_ctrl()\fP لإرسال عناصر التحكم القياسية التالية: .IP "EVP_CTRL_AEAD_SET_IVLEN و EVP_CTRL_GET_IVLEN" 4 .IX Item "EVP_CTRL_AEAD_SET_IVLEN و EVP_CTRL_GET_IVLEN" عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP و \&\fBEVP_CIPHER_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "ivlen" (\fBOSSL_CIPHER_PARAM_IVLEN\fP). .IP EVP_CTRL_AEAD_SET_IV_FIXED 4 .IX Item EVP_CTRL_AEAD_SET_IV_FIXED عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "tlsivfixed" (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED\fP). .IP EVP_CTRL_AEAD_SET_MAC_KEY 4 .IX Item EVP_CTRL_AEAD_SET_MAC_KEY عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "mackey" (\fBOSSL_CIPHER_PARAM_AEAD_MAC_KEY\fP). .IP "EVP_CTRL_AEAD_SET_TAG و EVP_CTRL_AEAD_GET_TAG" 4 .IX Item "EVP_CTRL_AEAD_SET_TAG و EVP_CTRL_AEAD_GET_TAG" عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP و \&\fBEVP_CIPHER_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "tag" (\fBOSSL_CIPHER_PARAM_AEAD_TAG\fP). .IP EVP_CTRL_CCM_SET_L 4 .IX Item EVP_CTRL_CCM_SET_L عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "ivlen" (\fBOSSL_CIPHER_PARAM_IVLEN\fP) بقيمة (15 \- L) .IP EVP_CTRL_COPY 4 .IX Item EVP_CTRL_COPY لا يوجد تعيين OSSL_PARAM لهذا. استخدم \fBEVP_CIPHER_CTX_copy()\fP بدلاً من ذلك. .IP EVP_CTRL_GCM_SET_IV_INV 4 .IX Item EVP_CTRL_GCM_SET_IV_INV عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "tlsivinv" (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV\fP). .IP EVP_CTRL_RAND_KEY 4 .IX Item EVP_CTRL_RAND_KEY عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "randkey" (\fBOSSL_CIPHER_PARAM_RANDOM_KEY\fP). .IP EVP_CTRL_SET_KEY_LENGTH 4 .IX Item EVP_CTRL_SET_KEY_LENGTH عند استخدامه مع \fBEVP_CIPHER\fP مُسترد، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "keylen" (\fBOSSL_CIPHER_PARAM_KEYLEN\fP). .IP "EVP_CTRL_SET_RC2_KEY_BITS و EVP_CTRL_GET_RC2_KEY_BITS" 4 .IX Item "EVP_CTRL_SET_RC2_KEY_BITS و EVP_CTRL_GET_RC2_KEY_BITS" عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP و \&\fBEVP_CIPHER_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "keybits" (\fBOSSL_CIPHER_PARAM_RC2_KEYBITS\fP). .IP "EVP_CTRL_SET_RC5_ROUNDS و EVP_CTRL_GET_RC5_ROUNDS" 4 .IX Item "EVP_CTRL_SET_RC5_ROUNDS و EVP_CTRL_GET_RC5_ROUNDS" عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP و \&\fBEVP_CIPHER_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "rounds" (\fBOSSL_CIPHER_PARAM_ROUNDS\fP). .IP EVP_CTRL_SET_SPEED 4 .IX Item EVP_CTRL_SET_SPEED عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "speed" (\fBOSSL_CIPHER_PARAM_SPEED\fP). .IP EVP_CTRL_GCM_IV_GEN 4 .IX Item EVP_CTRL_GCM_IV_GEN عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "tlsivgen" (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN\fP). .IP EVP_CTRL_AEAD_TLS1_AAD 4 .IX Item EVP_CTRL_AEAD_TLS1_AAD عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "tlsaad" (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_AAD\fP) متبوعًا بـ \fBEVP_CIPHER_CTX_get_params()\fP بمفتاح "tlsaadpad" (\fBOSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD\fP). .IP EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 4 .IX Item EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \&\fBEVP_CIPHER_CTX_set_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT متبوعًا بـ \fBEVP_CIPHER_CTX_get_params()\fP بمفتاح "tls1multi_maxbufsz" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE\fP). .IP EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 4 .IX Item EVP_CTRL_TLS1_1_MULTIBLOCK_AAD عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عناصر \fBOSSL_PARAM\fP\|(3) بمفاتيح "tls1multi_aad" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD\fP) و "tls1multi_interleave" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE\fP) متبوعًا بـ \fBEVP_CIPHER_CTX_get_params()\fP بمفاتيح "tls1multi_aadpacklen" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN\fP) و "tls1multi_interleave" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE\fP). .IP EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 4 .IX Item EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT عند استخدامها مع \fBEVP_CIPHER\fP مأخوذ، تُستدعى \fBEVP_CIPHER_CTX_set_params()\fP مع عناصر \fBOSSL_PARAM\fP\|(3) بمفاتيح "tls1multi_enc" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC\fP) و "tls1multi_encin" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN\fP) و "tls1multi_interleave" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE\fP) متبوعًا بـ \fBEVP_CIPHER_CTX_get_params()\fP بمفتاح "tls1multi_enclen" (\fBOSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN\fP). .SH الأعلام .IX Header الأعلام يمكن استخدام \&\fBEVP_CIPHER_CTX_set_flags()\fP و \fBEVP_CIPHER_CTX_clear_flags()\fP و \fBEVP_CIPHER_CTX_test_flags()\fP لمعالجة واختبار أعلام \fBEVP_CIPHER_CTX\fP هذه: .IP EVP_CIPH_NO_PADDING 4 .IX Item EVP_CIPH_NO_PADDING مُستخدم بواسطة \fBEVP_CIPHER_CTX_set_padding()\fP. .Sp انظر أيضًا "معاملات EVP_CIPHER_CTX القابلة للجلب والإعداد" "padding" .IP EVP_CIPH_FLAG_LENGTH_BITS 4 .IX Item EVP_CIPH_FLAG_LENGTH_BITS انظر "معاملات EVP_CIPHER_CTX القابلة للإعداد" "use\-bits". .IP EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 4 .IX Item EVP_CIPHER_CTX_FLAG_WRAP_ALLOW مُستخدم للأغراض القديمة فقط. كان هذا العلم بحاجة إلى التعيين للإشارة إلى أن المُعمِّي تعامل مع اللف. .PP يستخدم \&\fBEVP_CIPHER_flags()\fP الأعلام التالية التي لها تعيينات إلى "معاملات EVP_CIPHER القابلة للجلب": .IP EVP_CIPH_FLAG_AEAD_CIPHER 4 .IX Item EVP_CIPH_FLAG_AEAD_CIPHER انظر "معاملات EVP_CIPHER القابلة للجلب" "aead". .IP EVP_CIPH_CUSTOM_IV 4 .IX Item EVP_CIPH_CUSTOM_IV انظر "معاملات EVP_CIPHER القابلة للجلب" "custom\-iv". .IP EVP_CIPH_FLAG_CTS 4 .IX Item EVP_CIPH_FLAG_CTS انظر "معاملات EVP_CIPHER القابلة للاستحصال" "cts". .IP EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK; 4 .IX Item EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK; انظر "معاملات EVP_CIPHER القابلة للاستحصال" "tls\-multi". .IP EVP_CIPH_RAND_KEY 4 .IX Item EVP_CIPH_RAND_KEY انظر "معاملات EVP_CIPHER القابلة للاستحصال" "has\-randkey". .PP \&\fBEVP_CIPHER_flags()\fP تستخدم الأعلام التالية لأغراض الإرث فقط: .IP EVP_CIPH_VARIABLE_LENGTH 4 .IX Item EVP_CIPH_VARIABLE_LENGTH .PD 0 .IP EVP_CIPH_FLAG_CUSTOM_CIPHER 4 .IX Item EVP_CIPH_FLAG_CUSTOM_CIPHER .IP EVP_CIPH_ALWAYS_CALL_INIT 4 .IX Item EVP_CIPH_ALWAYS_CALL_INIT .IP EVP_CIPH_CTRL_INIT 4 .IX Item EVP_CIPH_CTRL_INIT .IP EVP_CIPH_CUSTOM_KEY_LENGTH 4 .IX Item EVP_CIPH_CUSTOM_KEY_LENGTH .IP EVP_CIPH_CUSTOM_COPY 4 .IX Item EVP_CIPH_CUSTOM_COPY .IP EVP_CIPH_FLAG_DEFAULT_ASN1 4 .IX Item EVP_CIPH_FLAG_DEFAULT_ASN1 .PD انظر \fBEVP_CIPHER_meth_set_flags\fP\|(3) لمزيد من المعلومات المتعلقة بالأعلام أعلاه. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" \&\fBEVP_CIPHER_fetch()\fP تُرجع مؤشرًا إلى \fBEVP_CIPHER\fP عند النجاح وNULL عند الفشل. .PP \&\fBEVP_CIPHER_up_ref()\fP تُرجع 1 عند النجاح أو 0 بخلاف ذلك. .PP \&\fBEVP_CIPHER_CTX_new()\fP تُرجع مؤشرًا إلى \&\fBEVP_CIPHER_CTX\fP مُنشأ حديثًا عند النجاح وNULL عند الفشل. .PP \&\fBEVP_CIPHER_CTX_dup()\fP تُرجع EVP_CIPHER_CTX جديدًا إذا نجحت أو NULL عند الفشل. .PP \&\fBEVP_CIPHER_CTX_copy()\fP تُرجع 1 إذا نجحت أو 0 عند الفشل. .PP \&\fBEVP_EncryptInit_ex2()\fP و\fBEVP_EncryptUpdate()\fP و\fBEVP_EncryptFinal_ex()\fP تُرجع 1 عند النجاح و0 عند الفشل. .PP \&\fBEVP_DecryptInit_ex2()\fP و\fBEVP_DecryptUpdate()\fP تُرجع 1 عند النجاح و0 عند الفشل. \&\fBEVP_DecryptFinal_ex()\fP تُرجع 0 إذا فشل فك التعمية أو 1 عند النجاح. .PP \&\fBEVP_CipherInit_ex2()\fP و\fBEVP_CipherInit_SKEY()\fP و\fBEVP_CipherUpdate()\fP تُرجع 1 عند النجاح و0 عند الفشل. \&\fBEVP_CipherFinal_ex()\fP تُرجع 0 لفشل التعمية/فك التعمية أو 1 عند النجاح. .PP \&\fBEVP_Cipher()\fP تُرجع 1 عند النجاح و<= 0 عند الفشل، إذا لم يُضبط العلم \&\fBEVP_CIPH_FLAG_CUSTOM_CIPHER\fP للمُعمِّي، أو إذا لم يُهيأ المُعمِّي عبر استدعاء لـ \fBEVP_CipherInit_ex2\fP. \&\fBEVP_Cipher()\fP تُرجع عدد البايتات المكتوبة إلى \fIout\fP للتعمية/فك التعمية، أو عدد البايتات المُوثَّقة في استدعاء يُحدد AAD لمُعمِّي AEAD، إذا ضُبط العلم \fBEVP_CIPH_FLAG_CUSTOM_CIPHER\fP للمُعمِّي. .PP \&\fBEVP_CIPHER_can_pipeline()\fP تُرجع 1 إذا أمكن استخدام المُعمِّي في خط أنابيب، 0 بخلاف ذلك. .PP \&\fBEVP_CipherPipelineEncryptInit()\fP و\fBEVP_CipherPipelineDecryptInit()\fP تُرجع 1 عند النجاح و0 عند الفشل. .PP \&\fBEVP_CipherPipelineUpdate()\fP و\fBEVP_CipherPipelineFinal()\fP تُرجع 1 عند النجاح و0 عند الفشل. .PP \&\fBEVP_CIPHER_CTX_reset()\fP تُرجع 1 عند النجاح و0 عند الفشل. .PP \&\fBEVP_get_cipherbyname()\fP و\fBEVP_get_cipherbynid()\fP و\fBEVP_get_cipherbyobj()\fP تُرجع بنية \fBEVP_CIPHER\fP أو NULL عند الخطأ. .PP \&\fBEVP_CIPHER_get_nid()\fP و\fBEVP_CIPHER_CTX_get_nid()\fP تُرجع NID. .PP \&\fBEVP_CIPHER_get_block_size()\fP و \fBEVP_CIPHER_CTX_get_block_size()\fP يُرجعان حجم الكتلة، أو 0 عند الخطأ. .PP \&\fBEVP_CIPHER_get_key_length()\fP و \fBEVP_CIPHER_CTX_get_key_length()\fP يُرجعان طول المفتاح. .PP \&\fBEVP_CIPHER_CTX_set_padding()\fP يُرجع دائمًا 1. .PP \&\fBEVP_CIPHER_get_iv_length()\fP و \fBEVP_CIPHER_CTX_get_iv_length()\fP يُرجعان طول IV، صفر إذا لم يستخدم المُعمِّي IV وقيمة سالبة عند الخطأ. .PP \&\fBEVP_CIPHER_CTX_get_tag_length()\fP يُرجع طول الوسم أو صفر إذا لم يستخدم المُعمِّي وسمًا. .PP \&\fBEVP_CIPHER_get_type()\fP و \fBEVP_CIPHER_CTX_get_type()\fP يُرجعان NID لمُعرِّف كائن المُعمِّي أو NID_undef إذا لم يكن له مُعرِّف كائن مُعرَّف. .PP \&\fBEVP_CIPHER_CTX_cipher()\fP يُرجع بنية \fBEVP_CIPHER\fP. .PP \&\fBEVP_CIPHER_CTX_get_num()\fP يُرجع قيمة num غير سالبة أو \&\fBEVP_CTRL_RET_UNSUPPORTED\fP إذا لم يدعم التنفيذ الاستدعاء أو عند أي خطأ آخر. .PP \&\fBEVP_CIPHER_CTX_set_num()\fP يُرجع 1 عند النجاح و0 إذا لم يدعم التنفيذ الاستدعاء أو عند أي خطأ آخر. .PP \&\fBEVP_CIPHER_CTX_is_encrypting()\fP يُرجع 1 إذا كان \fIctx\fP مُهيَّأً للتشفير و0 خلاف ذلك. .PP \&\fBEVP_CIPHER_param_to_asn1()\fP و \fBEVP_CIPHER_asn1_to_param()\fP يُرجعان أكبر من صفر للنجاح وصفرًا أو عددًا سالبًا عند الفشل. .PP \&\fBEVP_CIPHER_CTX_rand_key()\fP يُرجع 1 للنجاح وصفرًا أو عددًا سالبًا للفشل. .PP \&\fBEVP_CIPHER_names_do_all()\fP يُرجع 1 إذا استُدعي رد النداء لجميع الأسماء. قيمة إرجاع 0 تعني أن رد النداء لم يُستدعَ لأي اسم. .PP \&\fBEVP_CIPHER_get_params()\fP و \fBEVP_CIPHER_CTX_get_params()\fP و \&\fBEVP_CIPHER_CTX_set_params()\fP يُرجعان 1 للنجاح و0 للفشل. .SH "سرد المُعمِّيات" .IX Header "سرد المُعمِّيات" جميع الخوارزميات لها طول مفتاح ثابت ما لم يُذكر خلاف ذلك. .PP ارجع إلى "انظر أيضًا" للحصول على القائمة الكاملة للمُعمِّيات المتاحة عبر واجهة EVP. .IP \fBEVP_enc_null()\fP 4 .IX Item EVP_enc_null() مُعمِّي فارغ: لا يفعل شيئًا. .SH "واجهة AEAD" .IX Header "واجهة AEAD" واجهة EVP لأوضاع التعمية المُوثَّق مع البيانات المرتبطة (AEAD) تم تغييرها بشكل طفيف، ويتم دعم العديد من عمليات \fIctrl\fP الإضافية اعتمادًا على الوضع المُحدد. .PP لتحديد بيانات مُوثَّقة إضافية (AAD)، يجب إجراء استدعاء لـ \fBEVP_CipherUpdate()\fP أو \&\fBEVP_EncryptUpdate()\fP أو \fBEVP_DecryptUpdate()\fP مع تعيين معامل الإخراج \fIout\fP إلى NULL. في هذه الحالة، عند النجاح، يتم تعيين المعامل \&\fIoutl\fP إلى عدد وحدات البايت الخاصة بـ AAD التي تمت معالجتها في ذلك الاستدعاء (أي قيمة \fIinl\fP)، ولا يتضمن أي وحدات بايت من النص العادي أو النص المُعمَّى تمت معالجتها بواسطة استدعاءات أخرى. .PP إذا لم يتم استخدام AAD، يمكن حذف هذا الاستدعاء. راجع الملاحظات الخاصة بالوضع أدناه لأي استثناءات. .PP عند فك التعمية، تشير القيمة المُرجَعة من \fBEVP_DecryptFinal()\fP أو \fBEVP_CipherFinal()\fP إلى ما إذا كانت العملية ناجحة. إذا لم تشير إلى النجاح، فقد فشلت عملية الاستيثاق، و\fBيجب عدم\fP استخدام أي بيانات إخراج لأنها تالفة. .PP يرجى ملاحظة أن عدد وحدات البايت المُوثَّقة المُرجَعة بواسطة \&\fBEVP_CipherUpdate()\fP يعتمد على المُعمِّي المستخدم. المُعمِّيات التدفقية، مثل ChaCha20 أو المُعمِّيات في وضع GCM، يمكنها التعامل مع بايت واحد في كل مرة، مما يؤدي إلى حجم "كتلة" فعال يبلغ 1. على العكس، يجب على المُعمِّيات في وضع OCB معالجة البيانات كتلة واحدة في كل مرة، ويتم إرجاع حجم الكتلة. .PP بغض النظر عن الحجم المُرجَع، من الآمن تمرير بيانات غير مُبطَّنة إلى استدعاء \&\fBEVP_CipherUpdate()\fP في عملية واحدة. .SS "وضعا GCM وOCB" .IX Subsection "وضعا GCM وOCB" يتم دعم عناصر \fIctrl\fP التالية في وضعي GCM وOCB. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" يضبط طول IV. يمكن إجراء هذا الاستدعاء فقط قبل تحديد IV. إذا لم يتم استدعاؤه، يتم استخدام طول IV مبدئي. .Sp بالنسبة لـ GCM AES وOCB AES، المبدئي هو 12 (أي 96 بت). بالنسبة لوضع OCB، الحد الأقصى هو 15. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" يكتب \f(CW\*(C`taglen\*(C'\fP بايت من قيمة الوسم إلى المخزن المُشار إليه بواسطة \f(CW\*(C`tag\*(C'\fP. يمكن إجراء هذا الاستدعاء فقط عند تعمية البيانات و\fBبعد\fP معالجة جميع البيانات (مثلًا بعد استدعاء \fBEVP_EncryptFinal()\fP). .Sp بالنسبة لـ OCB، يجب أن يكون \f(CW\*(C`taglen\*(C'\fP إما 16 أو القيمة المُحددة سابقًا عبر \&\fBEVP_CTRL_AEAD_SET_TAG\fP. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" عند فك التعمية، يضبط هذا الاستدعاء الوسم المتوقع إلى \f(CW\*(C`taglen\*(C'\fP بايت من \f(CW\*(C`tag\*(C'\fP. يجب أن يكون \&\f(CW\*(C`taglen\*(C'\fP بين 1 و16 شاملًا. يجب ضبط الوسم قبل أي استدعاء لـ \fBEVP_DecryptFinal()\fP أو \&\fBEVP_DecryptFinal_ex()\fP. .Sp بالنسبة لـ GCM، هذا الاستدعاء صالح فقط عند فك تعمية البيانات. .Sp بالنسبة لـ OCB، هذا الاستدعاء صالح عند فك تعمية البيانات لضبط الوسم المتوقع، وعند التعمية لضبط طول الوسم المطلوب. .Sp في وضع OCB، استدعاء هذا مع تعيين \f(CW\*(C`tag\*(C'\fP إلى \f(CW\*(C`NULL\*(C'\fP يضبط طول الوسم. يمكن ضبط طول الوسم فقط قبل تحديد IV. إذا لم يتم استدعاء هذا قبل ضبط IV، فسيتم استخدام طول وسم مبدئي. .Sp بالنسبة لـ OCB AES، طول الوسم المبدئي هو 16 (أي 128 بت). وهو أيضًا أقصى طول وسم لـ OCB. .SS "وضع CCM" .IX Subsection "وضع CCM" واجهة EVP لوضع CCM مشابهة لواجهة وضع GCM ولكن مع بعض المتطلبات الإضافية وقيم \fIctrl\fP مختلفة. .PP بالنسبة لوضع CCM، يجب تمرير الطول الإجمالي للنص الصريح أو النص المُعمَّى إلى \&\fBEVP_CipherUpdate()\fP أو \fBEVP_EncryptUpdate()\fP أو \fBEVP_DecryptUpdate()\fP مع ضبط معاملي الإخراج والإدخال (\fIin\fP و \fIout\fP) على NULL وتمرير الطول في معامل \fIinl\fP. .PP تُدعم عناصر التحكم \fIctrl\fP التالية في وضع CCM. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" يُجرى هذا الاستدعاء لتعيين قيمة الوسم \fBCCM\fP المتوقعة عند فك التعمية أو طول الوسم (مع ضبط معامل \f(CW\*(C`tag\*(C'\fP على NULL) عند التعمية. يُشار غالبًا إلى طول الوسم بالرمز \fBM\fP. إذا لم يُعيّن، تُستخدم قيمة مبدئية (12 لـ AES). عند فك التعمية، يجب تعيين الوسم قبل تمرير البيانات المراد فك تعميتها، ولكن كما في وضعي GCM و OCB، يمكن تعيينه بعد تمرير البيانات المُوثقة الإضافية (انظر "واجهة AEAD"). .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL)" يُعيّن قيمة \fBL\fP لوضع CCM. إذا لم تُعيّن، تُستخدم قيمة مبدئية (8 لـ AES). .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" يُعيّن طول العدد العشوائي (IV) لوضع CCM. يمكن إجراء هذا الاستدعاء فقط قبل تحديد قيمة العدد العشوائي. يُعطى طول العدد العشوائي بالعلاقة \fB15 \- L\fP، لذا فهو 7 مبدئيًا لـ AES. .SS "وضع SIV" .IX Subsection "وضع SIV" يندرج كل من المُعمّيين AES\-SIV و AES\-GCM\-SIV تحت هذا الوضع. .PP بالنسبة لمُعمّيات وضع SIV، يُعدّل سلوك واجهة EVP بشكل طفيف وتُدعم عدة عمليات تحكم إضافية. .PP لتحديد أي بيانات مُوثقة إضافية (AAD) و/أو عدد عشوائي، يجب إجراء استدعاء لـ \&\fBEVP_CipherUpdate()\fP أو \fBEVP_EncryptUpdate()\fP أو \fBEVP_DecryptUpdate()\fP مع ضبط معامل الإخراج \fIout\fP على NULL. .PP ينص RFC5297 على أن العدد العشوائي هو آخر جزء من AAD قبل حدوث التعمية/فك التعمية الفعلي. لا تفرق واجهة API بين العدد العشوائي و AAD الآخر. .PP عند فك التعمية، تشير قيمة الإرجاع لـ \fBEVP_DecryptFinal()\fP أو \fBEVP_CipherFinal()\fP إلى نجاح العملية. إذا لم تُشر إلى النجاح، فقد فشلت عملية الاستيثاق ويجب عدم استخدام أي بيانات إخراج لأنها تالفة. .PP لا تخزن واجهة API متجه التهيئة الاصطناعي (SIV) في النص المُعمَّى. بدلاً من ذلك، يُخزن كوسم داخل EVP_CIPHER_CTX. يجب استرداد SIV من السياق بعد التعمية، وتعيينه في السياق قبل فك التعمية. .PP يختلف هذا عن RFC5297 في أن مخرجات التعمية من عملية التعمية، ومدخلات التعمية إلى عملية فك التعمية، لا تحتوي على SIV. يعني هذا أيضًا أن أطوال النص الصريح والنص المُعمَّى متطابقة. .PP تُدعم عناصر التحكم التالية في وضع SIV، وتُستخدم للحصول على متجه التهيئة الاصطناعي وتعيينه: .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag);" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag);" يكتب \fItaglen\fP بايت من قيمة الوسم (متجه التهيئة الاصطناعي) إلى المخزن المؤقت المُشار إليه بواسطة \fItag\fP. يمكن إجراء هذا الاستدعاء فقط عند تعمية البيانات وبعد معالجة جميع البيانات (مثلًا بعد استدعاء \fBEVP_EncryptFinal()\fP). بالنسبة لوضع SIV، يجب أن يكون taglen مساويًا لـ 16. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag);" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag);" يُعيّن الوسم المتوقع (متجه التهيئة الاصطناعي) إلى \fItaglen\fP بايت من \fItag\fP. هذا الاستدعاء قانوني فقط عند فك تعمية البيانات ويجب إجراؤه قبل معالجة أي بيانات (مثلًا قبل أي استدعاءات \fBEVP_DecryptUpdate()\fP). بالنسبة لوضع SIV، يجب أن يكون taglen مساويًا لـ 16. .PP يقوم وضع SIV بتمريرين على بيانات الإدخال، وبالتالي، يجب إجراء استدعاء واحد فقط لـ \&\fBEVP_CipherUpdate()\fP أو \fBEVP_EncryptUpdate()\fP أو \fBEVP_DecryptUpdate()\fP مع ضبط \fIout\fP على قيمة غير NULL. لا يلزم استدعاء \fBEVP_DecryptFinal()\fP أو \&\fBEVP_CipherFinal()\fP، ولكنه سيشير إلى نجاح عملية التحديث. .SS ChaCha20\-Poly1305 .IX Subsection ChaCha20\-Poly1305 الضوابط \fIctrl\fP التالية مدعومة لخوارزمية ChaCha20\-Poly1305 AEAD. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)" يضبط طول nonce. هذه الاستدعاء أصبح زائدًا الآن لأن القيمة الصالحة الوحيدة هي الطول المبدئي 12 (أي 96 بت). قبل OpenSSL 3.0، كان يمكن استخدام nonce أقل من 12 بايت لوسادة iv آليًا بأصفار بادئة لجعل طوله 12 بايت. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag)" يكتب \f(CW\*(C`taglen\*(C'\fP بايت من قيمة الوسم إلى المخزن المُشار إليه بواسطة \f(CW\*(C`tag\*(C'\fP. يمكن إجراء هذا الاستدعاء فقط عند تعمية البيانات و\fBبعد\fP معالجة جميع البيانات (مثلًا بعد استدعاء \fBEVP_EncryptFinal()\fP). .Sp يجب أن يكون \&\f(CW\*(C`taglen\*(C'\fP المحدد هنا 16 (\fBPOLY1305_BLOCK_SIZE\fP، أي 128 بت) أو أقل. .IP "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" 4 .IX Item "EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, taglen, tag)" يضبط الوسم المتوقع إلى \f(CW\*(C`taglen\*(C'\fP بايت من \f(CW\*(C`tag\*(C'\fP. يمكن ضبط طول الوسم فقط قبل تحديد IV. يجب أن يكون \&\f(CW\*(C`taglen\*(C'\fP بين 1 و16 (\fBPOLY1305_BLOCK_SIZE\fP) شاملًا. هذا الاستدعاء صالح فقط عند فك تعمية البيانات. .SH ملاحظات .IX Header ملاحظات حيثما أمكن، يجب استخدام واجهة \fBEVP\fP للمُعمِّيات المتناظرة بدلاً من الواجهات منخفضة المستوى. وذلك لأن الكود يصبح شفافًا تجاه المُعمِّي المستخدم وأكثر مرونة بكثير. بالإضافة إلى ذلك، تضمن واجهة \&\fBEVP\fP استخدام تسريع تعمية خاص بالمنصة مثل AES\-NI (الواجهات منخفضة المستوى لا توفر هذا الضمان). .PP يعمل حشو PKCS بإضافة \fBn\fP بايت حشو بقيمة \fBn\fP لجعل الطول الإجمالي للبيانات المُعمَّاة مضاعفًا لحجم الكتلة. يُضاف الحشو دائمًا، لذا إذا كانت البيانات مضاعفًا لحجم الكتلة بالفعل، فإن \fBn\fP سيساوي حجم الكتلة. على سبيل المثال، إذا كان حجم الكتلة 8 ويجب تعمية 11 بايت، فسيُضاف 5 بايت حشو بقيمة 5. .PP عند فك التعمية، يُفحص الكتلة النهائية لمعرفة ما إذا كانت بالشكل الصحيح. .PP على الرغم من أن عملية فك التعمية يمكن أن تُنتج خطأ إذا كان الحشو مفعّلاً، إلا أنها ليست اختبارًا قويًا لصحة بيانات الإدخال أو المفتاح. كتلة عشوائية لديها فرصة أفضل من 1 من 256 لتكون بالتنسيق الصحيح، والمشاكل في بيانات الإدخال في وقت سابق لن تُنتج خطأ فك تعمية نهائي. .PP إذا كان الحشو معطلاً، فإن عملية فك التعمية ستنجح دائمًا إذا كان المبلغ الإجمالي للبيانات المُفككة مضاعفًا لحجم الكتلة. .PP الدوال \fBEVP_EncryptInit()\fP و\fBEVP_EncryptInit_ex()\fP و\&\fBEVP_EncryptFinal()\fP و\fBEVP_DecryptInit()\fP و\fBEVP_DecryptInit_ex()\fP و\&\fBEVP_CipherInit()\fP و\fBEVP_CipherInit_ex()\fP و\fBEVP_CipherFinal()\fP قديمة ولكنها محفوظة للتوافق مع الكود الموجود. يجب أن يستخدم الكود الجديد \fBEVP_EncryptInit_ex2()\fP و\fBEVP_EncryptFinal_ex()\fP و\fBEVP_DecryptInit_ex2()\fP و\&\fBEVP_DecryptFinal_ex()\fP و\fBEVP_CipherInit_ex2()\fP و\fBEVP_CipherFinal_ex()\fP لأنها يمكنها إعادة استخدام سياق موجود دون تخصيصه وتحريره في كل استدعاء. .PP هناك بعض الاختلافات بين الدالتين \fBEVP_CipherInit()\fP و\&\fBEVP_CipherInit_ex()\fP، مهمة في بعض الظروف. تملأ \fBEVP_CipherInit()\fP كائن السياق المُمرر بالأصفار. كنتيجة، لا تسمح \fBEVP_CipherInit()\fP بالتهيئة خطوة بخطوة للسياق عندما يُمرر \fIkey\fP و\fIiv\fP في استدعاءات منفصلة. يعني هذا أيضًا أن الأعلام المُضبطة للسياق تُزال، وهو مهم بشكل خاص للعلم \&\fBEVP_CIPHER_CTX_FLAG_WRAP_ALLOW\fP الذي يُعالج بشكل خاص في \&\fBEVP_CipherInit_ex()\fP. .PP تجاهل إرجاعات الفشل لدوال تهيئة \fBEVP_CIPHER_CTX\fP يمكن أن يؤدي إلى سلوك غير محدد لاحقًا عند استدعاء الدوال التي تحدث أو تُنهي السياق. الاستدعاءات الصالحة الوحيدة على \fBEVP_CIPHER_CTX\fP عندما تفشل التهيئة هي استدعاءات تحاول تهيئة أخرى للسياق أو تحرير السياق. .PP \&\fBEVP_get_cipherbynid()\fP و\fBEVP_get_cipherbyobj()\fP مُنفذتان كوحدات ماكرو. .SH العلل .IX Header العلل يشير \&\fBEVP_MAX_KEY_LENGTH\fP و\fBEVP_MAX_IV_LENGTH\fP فقط إلى المُعمِّيات الداخلية بأطوال مفاتيح مبدئية. إذا تجاوزت المُعمِّيات المخصصة هذه القيم، تكون النتائج غير متوقعة. وذلك لأنه أصبحت ممارسة قياسية تعريف مفتاح عام كمصفوفة unsigned char ثابتة تحتوي على \&\fBEVP_MAX_KEY_LENGTH\fP بايت. .PP كود ASN1 غير مكتمل (وأحيانًا غير دقيق)؛ تم اختباره فقط لبعض المُعمِّيات الشائعة S/MIME (RC2, DES, triple DES) في وضع CBC. .SH أمثلة .IX Header أمثلة تعمية سلسلة محارف باستخدام IDEA: .PP .Vb 10 \& int do_crypt(char *outfile) \& { \& unsigned char outbuf[1024]; \& int outlen, tmplen; \& /* \& * Bogus key and IV: we\*(Aqd normally set these from \& * another source. \& */ \& unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; \& unsigned char iv[] = {1,2,3,4,5,6,7,8}; \& char intext[] = "Some Crypto Text"; \& EVP_CIPHER_CTX *ctx; \& FILE *out; \& \& ctx = EVP_CIPHER_CTX_new(); \& if (!EVP_EncryptInit_ex2(ctx, EVP_idea_cbc(), key, iv, NULL)) { \& /* Error */ \& EVP_CIPHER_CTX_free(ctx); \& return 0; \& } \& \& if (!EVP_EncryptUpdate(ctx, outbuf, &outlen, intext, strlen(intext))) { \& /* Error */ \& EVP_CIPHER_CTX_free(ctx); \& return 0; \& } \& /* \& * Buffer passed to EVP_EncryptFinal() must be after data just \& * encrypted to avoid overwriting it. \& */ \& if (!EVP_EncryptFinal_ex(ctx, outbuf + outlen, &tmplen)) { \& /* Error */ \& EVP_CIPHER_CTX_free(ctx); \& return 0; \& } \& outlen += tmplen; \& EVP_CIPHER_CTX_free(ctx); \& /* \& * Need binary mode for fopen because encrypted data is \& * binary data. Also cannot use strlen() on it because \& * it won\*(Aqt be NUL terminated and may contain embedded \& * NULs. \& */ \& out = fopen(outfile, "wb"); \& if (out == NULL) { \& /* Error */ \& return 0; \& } \& fwrite(outbuf, 1, outlen, out); \& fclose(out); \& return 1; \& } .Ve .PP يمكن فك تعمية النص المُعمَّى من المثال أعلاه باستخدام أداة \fBopenssl\fP مع سطر الأوامر (معروض على سطرين للتوضيح): .PP .Vb 2 \& openssl idea \-d \e \& \-K 000102030405060708090A0B0C0D0E0F \-iv 0102030405060708 = 16. \& */ \& int ret = 0, encrypt = 1, outlen, len; \& EVP_CIPHER_CTX *ctx = NULL; \& EVP_CIPHER *cipher = NULL; \& OSSL_PARAM params[2]; \& \& ctx = EVP_CIPHER_CTX_new(); \& cipher = EVP_CIPHER_fetch(NULL, "AES\-256\-CBC\-CTS", NULL); \& if (ctx == NULL || cipher == NULL) \& goto err; \& \& /* \& * The default is "CS1" so this is not really needed, \& * but would be needed to set either "CS2" or "CS3". \& */ \& params[0] = OSSL_PARAM_construct_utf8_string(OSSL_CIPHER_PARAM_CTS_MODE, \& "CS1", 0); \& params[1] = OSSL_PARAM_construct_end(); \& \& if (!EVP_CipherInit_ex2(ctx, cipher, key, iv, encrypt, params)) \& goto err; \& \& /* NOTE: CTS mode does not support multiple calls to EVP_CipherUpdate() */ \& if (!EVP_CipherUpdate(ctx, out, &outlen, msg, msg_len)) \& goto err; \& if (!EVP_CipherFinal_ex(ctx, out + outlen, &len)) \& goto err; \& ret = 1; \& err: \& EVP_CIPHER_free(cipher); \& EVP_CIPHER_CTX_free(ctx); \& return ret; \& } .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBevp\fP\|(7), \&\fBproperty\fP\|(7), "جلب الخوارزمية" في \fBcrypto\fP\|(7), \&\fBprovider\-cipher\fP\|(7), \&\fBlife_cycle\-cipher\fP\|(7) .PP المُعمِّيات المدعومة مُدرجة في: .PP \&\fBEVP_aes_128_gcm\fP\|(3), \&\fBEVP_aria_128_gcm\fP\|(3), \&\fBEVP_bf_cbc\fP\|(3), \&\fBEVP_camellia_128_ecb\fP\|(3), \&\fBEVP_cast5_cbc\fP\|(3), \&\fBEVP_chacha20\fP\|(3), \&\fBEVP_des_cbc\fP\|(3), \&\fBEVP_desx_cbc\fP\|(3), \&\fBEVP_idea_cbc\fP\|(3), \&\fBEVP_rc2_cbc\fP\|(3), \&\fBEVP_rc4\fP\|(3), \&\fBEVP_rc5_32_12_16_cbc\fP\|(3), \&\fBEVP_seed_cbc\fP\|(3), \&\fBEVP_sm4_cbc\fP\|(3), .SH التاريخ .IX Header التاريخ دعم وضع OCB أُضيف في OpenSSL 1.1.0. .PP \&\fBEVP_CIPHER_CTX\fP جُعل معتمًا في OpenSSL 1.1.0. كنتيجة، ظهرت \&\fBEVP_CIPHER_CTX_reset()\fP واختفت \fBEVP_CIPHER_CTX_cleanup()\fP. بقيت \fBEVP_CIPHER_CTX_init()\fP كاسم مستعار لـ \&\fBEVP_CIPHER_CTX_reset()\fP. .PP الدالة \fBEVP_CIPHER_CTX_cipher()\fP أُهملت في OpenSSL 3.0؛ استخدم \&\fBEVP_CIPHER_CTX_get0_cipher()\fP بدلاً منها. .PP الدوال \fBEVP_EncryptInit_ex2()\fP, \fBEVP_DecryptInit_ex2()\fP, \fBEVP_CipherInit_ex2()\fP, \&\fBEVP_CIPHER_fetch()\fP, \fBEVP_CIPHER_free()\fP, \fBEVP_CIPHER_up_ref()\fP, \&\fBEVP_CIPHER_CTX_get0_cipher()\fP, \fBEVP_CIPHER_CTX_get1_cipher()\fP, \&\fBEVP_CIPHER_get_params()\fP, \fBEVP_CIPHER_CTX_set_params()\fP, \&\fBEVP_CIPHER_CTX_get_params()\fP, \fBEVP_CIPHER_gettable_params()\fP, \&\fBEVP_CIPHER_settable_ctx_params()\fP, \fBEVP_CIPHER_gettable_ctx_params()\fP, \&\fBEVP_CIPHER_CTX_settable_params()\fP و \fBEVP_CIPHER_CTX_gettable_params()\fP أُضيفت في 3.0. .PP أُعيدت تسمية الدوال \fBEVP_CIPHER_nid()\fP و\fBEVP_CIPHER_name()\fP و\fBEVP_CIPHER_block_size()\fP و\&\fBEVP_CIPHER_key_length()\fP و\fBEVP_CIPHER_iv_length()\fP و\fBEVP_CIPHER_flags()\fP و\&\fBEVP_CIPHER_mode()\fP و\fBEVP_CIPHER_type()\fP و\fBEVP_CIPHER_CTX_nid()\fP و\&\fBEVP_CIPHER_CTX_block_size()\fP و\fBEVP_CIPHER_CTX_key_length()\fP و\&\fBEVP_CIPHER_CTX_iv_length()\fP و\fBEVP_CIPHER_CTX_tag_length()\fP و\&\fBEVP_CIPHER_CTX_num()\fP و\fBEVP_CIPHER_CTX_type()\fP و\fBEVP_CIPHER_CTX_mode()\fP لتضمين \f(CW\*(C`get\*(C'\fP أو \f(CW\*(C`get0\*(C'\fP في أسمائها في OpenSSL 3.0، على التوالي. حُفظت الأسماء القديمة كوحدات ماكرو بديلة غير مهملة. .PP أُعيدت تسمية الدالة \fBEVP_CIPHER_CTX_encrypting()\fP إلى \&\fBEVP_CIPHER_CTX_is_encrypting()\fP في OpenSSL 3.0. حُفظ الاسم القديم كوحدة ماكرو بديلة غير مهملة. .PP أُهملت وحدة الماكرو \fBEVP_CIPHER_CTX_flags()\fP في OpenSSL 1.1.0. .PP \&\fBEVP_CIPHER_CTX_dup()\fP أُضيفت في OpenSSL 3.2. .PP \&\fBEVP_CipherInit_SKEY()\fP أُضيفت في OpenSSL 3.5. .PP قبل OpenSSL 3.5، كان تمرير \fIctx\fP فارغ إلى \&\fBEVP_CIPHER_CTX_get_block_size()\fP يؤدي إلى إلغاء مرجع مؤشر فارغ، بدلاً من قيمة إرجاع 0 تشير إلى خطأ. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2000\-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 .