.\" -*- 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_DIGESTINIT 3ssl" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH EVP_DIGESTINIT 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_MD_fetch, EVP_MD_up_ref, EVP_MD_free, EVP_MD_get_params, EVP_MD_gettable_params, EVP_MD_CTX_new, EVP_MD_CTX_reset, EVP_MD_CTX_free, EVP_MD_CTX_dup, EVP_MD_CTX_copy, EVP_MD_CTX_copy_ex, EVP_MD_CTX_ctrl, EVP_MD_CTX_set_params, EVP_MD_CTX_get_params, EVP_MD_settable_ctx_params, EVP_MD_gettable_ctx_params, EVP_MD_CTX_settable_params, EVP_MD_CTX_gettable_params, EVP_MD_CTX_set_flags, EVP_MD_CTX_clear_flags, EVP_MD_CTX_test_flags, EVP_Q_digest, EVP_Digest, EVP_DigestInit_ex2, EVP_DigestInit_ex, EVP_DigestInit, EVP_DigestUpdate, EVP_DigestFinal_ex, EVP_DigestFinalXOF, EVP_DigestFinal, EVP_DigestSqueeze, EVP_MD_is_a, EVP_MD_get0_name, EVP_MD_get0_description, EVP_MD_names_do_all, EVP_MD_get0_provider, EVP_MD_get_type, EVP_MD_get_pkey_type, EVP_MD_get_size, EVP_MD_get_block_size, EVP_MD_get_flags, EVP_MD_CTX_get0_name, EVP_MD_CTX_md, EVP_MD_CTX_get0_md, EVP_MD_CTX_get1_md, EVP_MD_CTX_get_type, EVP_MD_CTX_get_size_ex, EVP_MD_CTX_get_block_size, EVP_MD_CTX_get0_md_data, EVP_MD_CTX_update_fn, EVP_MD_CTX_set_update_fn, EVP_md_null, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj, EVP_MD_CTX_get_pkey_ctx, EVP_MD_CTX_set_pkey_ctx, EVP_MD_do_all_provided, EVP_MD_type, EVP_MD_nid, EVP_MD_name, EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_flags, EVP_MD_xof, EVP_MD_CTX_size, EVP_MD_CTX_get_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_md_data \&\- إجراءات التلخيص EVP .SH موجز .IX Header موجز .Vb 1 \& #include \& \& EVP_MD *EVP_MD_fetch(OSSL_LIB_CTX *ctx, const char *algorithm, \& const char *properties); \& int EVP_MD_up_ref(EVP_MD *md); \& void EVP_MD_free(EVP_MD *md); \& int EVP_MD_get_params(const EVP_MD *digest, OSSL_PARAM params[]); \& const OSSL_PARAM *EVP_MD_gettable_params(const EVP_MD *digest); \& EVP_MD_CTX *EVP_MD_CTX_new(void); \& int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); \& void EVP_MD_CTX_free(EVP_MD_CTX *ctx); \& void EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void* p2); \& int EVP_MD_CTX_get_params(EVP_MD_CTX *ctx, OSSL_PARAM params[]); \& int EVP_MD_CTX_set_params(EVP_MD_CTX *ctx, const OSSL_PARAM params[]); \& const OSSL_PARAM *EVP_MD_settable_ctx_params(const EVP_MD *md); \& const OSSL_PARAM *EVP_MD_gettable_ctx_params(const EVP_MD *md); \& const OSSL_PARAM *EVP_MD_CTX_settable_params(EVP_MD_CTX *ctx); \& const OSSL_PARAM *EVP_MD_CTX_gettable_params(EVP_MD_CTX *ctx); \& void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); \& void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); \& int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); \& \& int EVP_Q_digest(OSSL_LIB_CTX *libctx, const char *name, const char *propq, \& const void *data, size_t datalen, \& unsigned char *md, size_t *mdlen); \& int EVP_Digest(const void *data, size_t count, unsigned char *md, \& unsigned int *size, const EVP_MD *type, ENGINE *impl); \& int EVP_DigestInit_ex2(EVP_MD_CTX *ctx, const EVP_MD *type, \& const OSSL_PARAM params[]); \& int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl); \& int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt); \& int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); \& int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *out, size_t outlen); \& int EVP_DigestSqueeze(EVP_MD_CTX *ctx, unsigned char *out, size_t outlen); \& \& EVP_MD_CTX *EVP_MD_CTX_dup(const EVP_MD_CTX *in); \& int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); \& \& int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); \& int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s); \& \& int EVP_MD_CTX_copy(EVP_MD_CTX *out, EVP_MD_CTX *in); \& \& const char *EVP_MD_get0_name(const EVP_MD *md); \& const char *EVP_MD_get0_description(const EVP_MD *md); \& int EVP_MD_is_a(const EVP_MD *md, const char *name); \& int EVP_MD_names_do_all(const EVP_MD *md, \& void (*fn)(const char *name, void *data), \& void *data); \& const OSSL_PROVIDER *EVP_MD_get0_provider(const EVP_MD *md); \& int EVP_MD_get_type(const EVP_MD *md); \& int EVP_MD_get_pkey_type(const EVP_MD *md); \& int EVP_MD_get_size(const EVP_MD *md); \& int EVP_MD_get_block_size(const EVP_MD *md); \& unsigned long EVP_MD_get_flags(const EVP_MD *md); \& int EVP_MD_xof(const EVP_MD *md); \& \& const EVP_MD *EVP_MD_CTX_get0_md(const EVP_MD_CTX *ctx); \& EVP_MD *EVP_MD_CTX_get1_md(EVP_MD_CTX *ctx); \& const char *EVP_MD_CTX_get0_name(const EVP_MD_CTX *ctx); \& int EVP_MD_CTX_get_size_ex(const EVP_MD_CTX *ctx); \& int EVP_MD_CTX_get_block_size(const EVP_MD_CTX *ctx); \& int EVP_MD_CTX_get_type(const EVP_MD_CTX *ctx); \& void *EVP_MD_CTX_get0_md_data(const EVP_MD_CTX *ctx); \& \& const EVP_MD *EVP_md_null(void); \& \& const EVP_MD *EVP_get_digestbyname(const char *name); \& const EVP_MD *EVP_get_digestbynid(int type); \& const EVP_MD *EVP_get_digestbyobj(const ASN1_OBJECT *o); \& \& EVP_PKEY_CTX *EVP_MD_CTX_get_pkey_ctx(const EVP_MD_CTX *ctx); \& void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); \& \& void EVP_MD_do_all_provided(OSSL_LIB_CTX *libctx, \& void (*fn)(EVP_MD *mac, void *arg), \& void *arg); \& \& #define EVP_MD_type EVP_MD_get_type \& #define EVP_MD_nid EVP_MD_get_type \& #define EVP_MD_name EVP_MD_get0_name \& #define EVP_MD_pkey_type EVP_MD_get_pkey_type \& #define EVP_MD_size EVP_MD_get_size \& #define EVP_MD_block_size EVP_MD_get_block_size \& #define EVP_MD_flags EVP_MD_get_flags \& #define EVP_MD_CTX_get_size EVP_MD_CTX_get_size_ex \& #define EVP_MD_CTX_size EVP_MD_CTX_get_size_ex \& #define EVP_MD_CTX_block_size EVP_MD_CTX_get_block_size \& #define EVP_MD_CTX_type EVP_MD_CTX_get_type \& #define EVP_MD_CTX_pkey_ctx EVP_MD_CTX_get_pkey_ctx \& #define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data .Ve .PP الدوال التالية أصبحت مهجورة منذ OpenSSL 3.0، ويمكن إخفاؤها تماماً عن طريق تعريف \fBOPENSSL_API_COMPAT\fP بقيمة إصدار مناسبة، انظر \fBopenssl_user_macros\fP\|(7): .PP .Vb 1 \& const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); \& \& int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, \& const void *data, size_t count); \& \& void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, \& int (*update)(EVP_MD_CTX *ctx, \& const void *data, size_t count)); .Ve .SH الوصف .IX Header الوصف إجراءات التلخيص EVP هي واجهة عالية المستوى لتلخيصات الرسائل ودوال الإخراج القابلة للتمديد (XOF). .PP النوع \fBEVP_MD\fP هو بنية لتنفيذ طريقة التلخيص. .PP كل خوارزمية تلخيص رسالة (مثل SHA256) تُنتج طول إخراج ثابت الحجم يُعاد عند استدعاء \fBEVP_DigestFinal_ex()\fP. دوال الإخراج القابلة للتمديد (XOF) مثل SHAKE256 لها طول إخراج متغير الحجم \fIoutlen\fP يمكن استخدامه إما مع \fBEVP_DigestFinalXOF()\fP أو \&\fBEVP_DigestSqueeze()\fP. يمكن أيضًا استخدام \fBEVP_DigestFinal_ex()\fP مع XOF، لكن يجب تعيين "xoflen" مسبقًا (انظر "المعاملات"). لاحظ أن \fBEVP_MD_get_size()\fP و \fBEVP_MD_CTX_get_size_ex()\fP يتصرفان بشكل مختلف مع XOF. .IP \fBEVP_MD_fetch()\fP 4 .IX Item EVP_MD_fetch() يجلب تنفيذ التلخيص للخوارزمية \fIalgorithm\fP المعطاة من أي مزود يقدمها، ضمن المعايير المحددة بواسطة \fIproperties\fP. انظر "جلب الخوارزميات" في \fBcrypto\fP\|(7) لمزيد من المعلومات. .Sp يجب تحرير القيمة المُعادة في النهاية باستخدام \fBEVP_MD_free()\fP. .Sp بنى \fBEVP_MD\fP المجلوبة تُحسب بالمراجع. .IP \fBEVP_MD_up_ref()\fP 4 .IX Item EVP_MD_up_ref() يزيد عدد المراجع لبنية \fBEVP_MD\fP. .IP \fBEVP_MD_free()\fP 4 .IX Item EVP_MD_free() يخفض عدد المراجع لبنية \fBEVP_MD\fP المجلوبة. إذا انخفض عدد المراجع إلى 0، تُحرر البنية. إذا كانت الوسيطة NULL، لا يُفعل شيء. .IP \fBEVP_MD_CTX_new()\fP 4 .IX Item EVP_MD_CTX_new() تُخصِّص وتُعيد سياق تلخيص. .IP \fBEVP_MD_CTX_reset()\fP 4 .IX Item EVP_MD_CTX_reset() تُعيد ضبط سياق التلخيص \fIctx\fP. يُمكن استخدام هذا لإعادة استخدام سياق موجود مسبقًا. .IP \fBEVP_MD_CTX_free()\fP 4 .IX Item EVP_MD_CTX_free() تُنظِّف سياق التلخيص \fIctx\fP وتُحرِّر المساحة المُخصَّصة له. إذا كانت الوسيطة NULL، لا يُفعل شيء. .IP \fBEVP_MD_CTX_ctrl()\fP 4 .IX Item EVP_MD_CTX_ctrl() \&\fIهذه طريقة قديمة. \fP\f(BIEVP_MD_CTX_set_params()\fI و \fP\f(BIEVP_MD_CTX_get_params()\fI هما الآلية التي ينبغي استخدامها لتعيين وجلب المعاملات التي يستخدمها المزوّدون.\fP .Sp تُنفِّذ إجراءات تحكم خاصة بالتلخيص على السياق \fIctx\fP. يُشار إلى أمر التحكم في \fIcmd\fP وأي وسائط إضافية في \fIp1\fP و \fIp2\fP. يجب استدعاء \&\fBEVP_MD_CTX_ctrl()\fP بعد \fBEVP_DigestInit_ex2()\fP. قد تنطبق قيود أخرى اعتمادًا على نوع التحكم وتنفيذ التلخيص. .Sp إذا استُخدمت هذه الدالة مع \fBEVP_MD\fP مُسترجَع، فستترجم عناصر التحكم المعروفة لـ OpenSSL إلى معاملات \fBOSSL_PARAM\fP\|(3) بمفاتيح مُعرَّفة من OpenSSL وتستدعي \fBEVP_MD_CTX_get_params()\fP أو \&\fBEVP_MD_CTX_set_params()\fP حسب ما يناسب كل أمر تحكم. .Sp انظر "CONTROLS" أدناه لمزيد من المعلومات، بما في ذلك الترجمات التي تُجرى. .IP \fBEVP_MD_get_params()\fP 4 .IX Item EVP_MD_get_params() تسترد القائمة المطلوبة من \fIparams\fP من MD \fImd\fP. انظر "المعاملات" أدناه لمزيد من المعلومات. .IP \fBEVP_MD_CTX_get_params()\fP 4 .IX Item EVP_MD_CTX_get_params() تسترد القائمة المطلوبة من \fIparams\fP من سياق MD \fIctx\fP. انظر "المعاملات" أدناه لمزيد من المعلومات. .IP \fBEVP_MD_CTX_set_params()\fP 4 .IX Item EVP_MD_CTX_set_params() يضبط قائمة \fIparams\fP في سياق MD \fIctx\fP. انظر "المعاملات" أدناه لمزيد من المعلومات. .IP \fBEVP_MD_gettable_params()\fP 4 .IX Item EVP_MD_gettable_params() تحصل على مصفوفة ثابتة من \fBOSSL_PARAM\fP\|(3) تصف المعاملات القابلة للاسترجاع التي يمكن استخدامها مع \fBEVP_MD_get_params()\fP. .IP "\fBEVP_MD_gettable_ctx_params()\fP, \fBEVP_MD_CTX_gettable_params()\fP" 4 .IX Item "EVP_MD_gettable_ctx_params(), EVP_MD_CTX_gettable_params()" تحصل على مصفوفة ثابتة من \fBOSSL_PARAM\fP\|(3) تصف المعاملات القابلة للاسترجاع التي يمكن استخدامها مع \fBEVP_MD_CTX_get_params()\fP. تُرجع \fBEVP_MD_gettable_ctx_params()\fP المعاملات التي يمكن استرجاعها من الخوارزمية، بينما تُرجع \&\fBEVP_MD_CTX_gettable_params()\fP المعاملات التي يمكن استرجاعها في الحالة الحالية للسياق. .IP "\fBEVP_MD_settable_ctx_params()\fP, \fBEVP_MD_CTX_settable_params()\fP" 4 .IX Item "EVP_MD_settable_ctx_params(), EVP_MD_CTX_settable_params()" تحصل على مصفوفة ثابتة من \fBOSSL_PARAM\fP\|(3) تصف المعاملات القابلة للضبط التي يمكن استخدامها مع \fBEVP_MD_CTX_set_params()\fP. تُرجع \fBEVP_MD_settable_ctx_params()\fP المعاملات التي يمكن ضبطها من الخوارزمية، بينما تُرجع \&\fBEVP_MD_CTX_settable_params()\fP المعاملات التي يمكن ضبطها في الحالة الحالية للسياق. .IP "\fBEVP_MD_CTX_set_flags()\fP, \fBEVP_MD_CTX_clear_flags()\fP, \fBEVP_MD_CTX_test_flags()\fP" 4 .IX Item "EVP_MD_CTX_set_flags(), EVP_MD_CTX_clear_flags(), EVP_MD_CTX_test_flags()" يضبط ويمسح ويختبر أعلام \fIctx\fP. انظر "FLAGS" أدناه لمزيد من المعلومات. .IP "\fBEVP_Q_digest()\fP هي دالة تلخيص سريعة لمرة واحدة." 4 .IX Item "EVP_Q_digest() هي دالة تلخيص سريعة لمرة واحدة." تُجزئ \fIdatalen\fP بايت من البيانات في \fIdata\fP باستخدام خوارزمية التلخيص \&\fIname\fP، التي تُجلب باستخدام المعاملين الاختياريين \fIlibctx\fP و \fIpropq\fP. توضع قيمة التلخيص في \fImd\fP ويُكتب طولها في \fImdlen\fP إذا لم يكن المؤشر NULL. سيُكتب على الأكثر \fBEVP_MAX_MD_SIZE\fP بايت. .IP \fBEVP_Digest()\fP 4 .IX Item EVP_Digest() غلاف حول دوال Init_ex و Update و Final_ex للتلخيص. تُجزئ \fIcount\fP بايت من البيانات في \fIdata\fP باستخدام تلخيص \fItype\fP من ENGINE \&\fIimpl\fP. توضع قيمة التلخيص في \fImd\fP ويُكتب طولها في \fIsize\fP إذا لم يكن المؤشر NULL. سيُكتب على الأكثر \fBEVP_MAX_MD_SIZE\fP بايت. إذا كان \fIimpl\fP NULL، يُستخدم التطبيق المبدئي لتلخيص \fItype\fP. .IP \fBEVP_DigestInit_ex2()\fP 4 .IX Item EVP_DigestInit_ex2() يُهيئ سياق التلخيص \fIctx\fP لاستخدام تلخيص \fItype\fP. \&يُزود \fItype\fP عادةً بواسطة دالة مثل \fBEVP_sha1()\fP، أو قيمة تُجلب صراحةً بواسطة \fBEVP_MD_fetch()\fP. \fIctx\fP \fBيجب ألا\fP يكون NULL. .Sp تُضبط المعاملات \fBparams\fP على السياق بعد التهيئة. .Sp يمكن أن يكون المعامل \fItype\fP NULL إذا كان \fIctx\fP قد هُيئ بالفعل باستدعاء آخر لـ \fBEVP_DigestInit_ex()\fP ولم يُعاد ضبطه بواسطة \&\fBEVP_MD_CTX_reset()\fP. .IP \fBEVP_DigestInit_ex()\fP 4 .IX Item EVP_DigestInit_ex() يُهيئ سياق التلخيص \fIctx\fP لاستخدام تلخيص \fItype\fP. \&يُزود \fItype\fP عادةً بواسطة دالة مثل \fBEVP_sha1()\fP، أو قيمة تُجلب صراحةً بواسطة \fBEVP_MD_fetch()\fP. .Sp إذا كان \fIimpl\fP غير NULL، يُستخدم تطبيقه للتلخيص \fItype\fP إن وُجد، وإلا يُستخدم التطبيق المبدئي. .Sp يمكن أن يكون المعامل \fItype\fP NULL إذا كان \fIctx\fP قد هُيئ بالفعل باستدعاء آخر لـ \fBEVP_DigestInit_ex()\fP ولم يُعاد ضبطه بواسطة \&\fBEVP_MD_CTX_reset()\fP. .IP \fBEVP_DigestUpdate()\fP 4 .IX Item EVP_DigestUpdate() يُلخص \fIcnt\fP بايت من البيانات عند \fId\fP في سياق التلخيص \fIctx\fP. يمكن استدعاء هذه الدالة عدة مرات على نفس \fIctx\fP لتلخيص بيانات إضافية. .IP \fBEVP_DigestFinal_ex()\fP 4 .IX Item EVP_DigestFinal_ex() يسترد قيمة التلخيص من \fIctx\fP ويضعها في \fImd\fP. إذا كان المعامل \fIs\fP غير NULL، يُكتب عدد بايتات البيانات المكتوبة (أي طول التلخيص) إلى العدد الصحيح عند \fIs\fP، ويُكتب على الأكثر \&\fBEVP_MAX_MD_SIZE\fP بايت ما لم يسمح تطبيق التلخيص بتغيير حجم التلخيص ويُضبط إلى قيمة أكبر بواسطة التطبيق. بعد استدعاء \fBEVP_DigestFinal_ex()\fP لا يمكن إجراء استدعاءات إضافية لـ \&\fBEVP_DigestUpdate()\fP، ولكن يمكن استدعاء \fBEVP_DigestInit_ex2()\fP لتهيئة عملية تلخيص جديدة. \fIctx\fP \fBيجب ألا\fP يكون NULL. .IP \fBEVP_DigestFinalXOF()\fP 4 .IX Item EVP_DigestFinalXOF() واجهات لدوال المخرجات القابلة للتمديد، XOFs، مثل SHAKE128 وSHAKE256. تسترد قيمة التلخيص من \fIctx\fP وتضعها في \fIout\fP بحجم \fIoutlen\fP. بعد استدعاء هذه الدالة لا يمكن إجراء استدعاءات إضافية لـ \fBEVP_DigestUpdate()\fP، ولكن يمكن استدعاء \fBEVP_DigestInit_ex2()\fP لتهيئة عملية جديدة. \&يمكن استدعاء \fBEVP_DigestFinalXOF()\fP مرة واحدة فقط .IP \fBEVP_DigestSqueeze()\fP 4 .IX Item EVP_DigestSqueeze() مشابه لـ \fBEVP_DigestFinalXOF()\fP ولكنه يسمح بإجراء استدعاءات متعددة لعصر بيانات مخرجات متغيرة الطول. \&لا ينبغي استدعاء \fBEVP_DigestFinalXOF()\fP بعد هذا. .IP \fBEVP_MD_CTX_dup()\fP 4 .IX Item EVP_MD_CTX_dup() يمكن استخدامها لنسخ حالة ملخص الرسالة من \fIin\fP. هذا مفيد لتجنب استدعاءات \fBEVP_MD_fetch()\fP المتعددة أو إذا كانت كميات كبيرة من البيانات ستُجزّأ والتي تختلف فقط في البايتات الأخيرة. .IP \fBEVP_MD_CTX_copy_ex()\fP 4 .IX Item EVP_MD_CTX_copy_ex() يمكن استخدامها لنسخ حالة ملخص الرسالة من \fIin\fP إلى \fIout\fP. هذا مفيد إذا كانت كميات كبيرة من البيانات ستُجزّأ والتي تختلف فقط في البايتات الأخيرة. .IP \fBEVP_DigestInit()\fP 4 .IX Item EVP_DigestInit() تتصرف بنفس طريقة \fBEVP_DigestInit_ex2()\fP باستثناء أنها لا تضبط أي معاملات وتستدعي \fBEVP_MD_CTX_reset()\fP لذا لا يمكن استخدامها مع \fItype\fP بقيمة NULL. .IP \fBEVP_DigestFinal()\fP 4 .IX Item EVP_DigestFinal() مشابهة لـ \fBEVP_DigestFinal_ex()\fP باستثناء أنه بعد حساب الملخص، يُنظف سياق الملخص \fIctx\fP آليًا باستخدام \fBEVP_MD_CTX_reset()\fP. .IP \fBEVP_MD_CTX_copy()\fP 4 .IX Item EVP_MD_CTX_copy() مشابهة لـ \fBEVP_MD_CTX_copy_ex()\fP باستثناء أن الوجهة \fIout\fP لا تحتاج إلى أن تكون مهيأة. .IP \fBEVP_MD_is_a()\fP 4 .IX Item EVP_MD_is_a() تُرجع 1 إذا كان \fImd\fP تطبيقًا لخوارزمية قابلة للتعريف بـ \fIname\fP، وإلا تُرجع 0. .Sp إذا كان \fImd\fP ملخصًا قديمًا (إنها القيمة المُرجعة من أمثال \&\fBEVP_sha256()\fP بدلاً من نتيجة \fBEVP_MD_fetch()\fP)، فسيُؤخذ في الاعتبار فقط أسماء المُعمّيات المسجلة مع سياق المكتبة المبدئي (انظر \&\fBOSSL_LIB_CTX\fP\|(3)). .IP \fBEVP_MD_xof()\fP 4 .IX Item EVP_MD_xof() تُرجع 1 إذا كان \fImd\fP دالة إخراج قابلة للتمديد (XOF) وإلا تُرجع 0. SHAKE128 و SHAKE256 هما دالتا XOF. تُرجع 0 لخوارزميات BLAKE2B. .IP "\fBEVP_MD_get0_name()\fP، \fBEVP_MD_CTX_get0_name()\fP" 4 .IX Item "EVP_MD_get0_name()، EVP_MD_CTX_get0_name()" تُرجع اسم ملخّص الرسالة المُعطى. بالنسبة لملخّصات الرسائل المُستجلَبة ذات الأسماء المتعددة، يُرجع واحد منها فقط؛ يُوصى باستخدام \fBEVP_MD_names_do_all()\fP بدلاً من ذلك. .IP \fBEVP_MD_names_do_all()\fP 4 .IX Item EVP_MD_names_do_all() يجتاز جميع أسماء \fImd\fP، ويستدعي \fIfn\fP مع كل اسم و\&\fIdata\fP. هذا مفيد فقط مع\fBEVP_MD\fP المُستجلَبة. .IP \fBEVP_MD_get0_description()\fP 4 .IX Item EVP_MD_get0_description() تُرجع وصفًا لملخّص الرسالة، مخصص للعرض والاستهلاك البشري. الوصف متروك لتطبيق الملخّص. .IP \fBEVP_MD_get0_provider()\fP 4 .IX Item EVP_MD_get0_provider() تُرجع مؤشرًا من نوع \fBOSSL_PROVIDER\fP إلى المُزوّد الذي يُنفّذ \&\fBEVP_MD\fP المُعطى. .IP \fBEVP_MD_get_size()\fP 4 .IX Item EVP_MD_get_size() تُرجع حجم ملخّص الرسالة عند تمرير \fBEVP_MD\fP، أي حجم التجزئة. قد تحدث قيمة سالبة أو 0 لحجم غير صالح. بالنسبة لـ XOF بدون حجم مبدئي، تُرجع هذه 0. .IP "\fBEVP_MD_CTX_get_size_ex()\fP، \fBEVP_MD_CTX_get_size()\fP" 4 .IX Item "EVP_MD_CTX_get_size_ex()، EVP_MD_CTX_get_size()" بالنسبة لملخّص عادي، هذا هو نفسه \fBEVP_MD_get_size()\fP. بالنسبة لـ XOF، تُرجع هذه "xoflen" إذا كان قد وُضع، وإلا تُرجع 0. .IP "\fBEVP_MD_get_block_size()\fP، \fBEVP_MD_CTX_get_block_size()\fP" 4 .IX Item "EVP_MD_get_block_size()، EVP_MD_CTX_get_block_size()" تُرجع حجم الكتلة لملخّص الرسالة عند تمرير بنية \fBEVP_MD\fP أو \&\fBEVP_MD_CTX\fP. .IP "\fBEVP_MD_get_type()\fP، \fBEVP_MD_CTX_get_type()\fP" 4 .IX Item "EVP_MD_get_type()، EVP_MD_CTX_get_type()" تُرجع NID لمُعرّف الكائن (OBJECT IDENTIFIER) الذي يمثّل ملخّص الرسالة المُعطى عند تمرير بنية \fBEVP_MD\fP. مثلاً، \f(CW\*(C`EVP_MD_get_type(EVP_sha1())\*(C'\fP يُرجع \fBNID_sha1\fP. تُستخدم هذه الدالة عادةً عند تعيين مُعرّفات ASN1 OIDs. .IP \fBEVP_MD_CTX_get0_md_data()\fP 4 .IX Item EVP_MD_CTX_get0_md_data() تُرجع البيانات الخاصة بطريقة الملخّص لـ \fBEVP_MD_CTX\fP المُمرّر. تُخصّص المساحة بواسطة OpenSSL ولها الحجم المُعيّن أصلاً بـ \&\fBEVP_MD_meth_set_app_datasize()\fP. .IP "\fBEVP_MD_CTX_get0_md()\fP، \fBEVP_MD_CTX_get1_md()\fP" 4 .IX Item "EVP_MD_CTX_get0_md()، EVP_MD_CTX_get1_md()" تُرجع \&\fBEVP_MD_CTX_get0_md()\fP بنية \fBEVP_MD\fP المُقابلة لـ \fBEVP_MD_CTX\fP المُمرّر. سيكون هذا نفس كائن \fBEVP_MD\fP المُمرّر أصلاً إلى \fBEVP_DigestInit_ex2()\fP (أو دالة مشابهة أخرى) عند تهيئة EVP_MD_CTX لأول مرة. لاحظ أنه عند استخدام الجلب الصريح (انظر \fBEVP_MD_fetch\fP\|(3))، لن يُزاد عدد مراجع القيمة المُرجعة من هذه الدالة، وبالتالي لا ينبغي استخدامها بعد تحرير EVP_MD_CTX. \&\fBEVP_MD_CTX_get1_md()\fP مماثلة باستثناء أن الملكية تُنقل إلى المُستدعي وتكون من \fBEVP_MD_CTX\fP المُمرّر. .IP \fBEVP_MD_CTX_set_update_fn()\fP 4 .IX Item EVP_MD_CTX_set_update_fn() تضبط دالة التحديث لـ \fIctx\fP إلى \fIupdate\fP. هذه هي الدالة التي تُستدعى بواسطة \fBEVP_DigestUpdate()\fP. إذا لم تُضبط، تُستخدم دالة التحديث من نوع \fBEVP_MD\fP المُحدّد عند التهيئة. .IP \fBEVP_MD_CTX_update_fn()\fP 4 .IX Item EVP_MD_CTX_update_fn() تُرجع دالة التحديث لـ \fIctx\fP. .IP \fBEVP_MD_get_flags()\fP 4 .IX Item EVP_MD_get_flags() تُرجع أعلام \fImd\fP. لاحظ أنها تختلف عن أعلام \fBEVP_MD_CTX\fP. انظر \fBEVP_MD_meth_set_flags\fP\|(3) لمزيد من المعلومات. .IP \fBEVP_MD_get_pkey_type()\fP 4 .IX Item EVP_MD_get_pkey_type() تُرجع NID لخوارزمية توقيع المفتاح العمومي المرتبطة بهذا المُعمّي. على سبيل المثال، \fBEVP_sha1()\fP مرتبط بـ RSA لذا سترجع \&\fBNID_sha1WithRSAEncryption\fP. نظرًا لأن المُعمّيات وخوارزميات التوقيع لم تعد مرتبطة، فقد احتُفظ بهذه الدالة لأسباب التوافق فقط. .IP \fBEVP_md_null()\fP 4 .IX Item EVP_md_null() مُعمّي رسالة "فارغ" لا يفعل شيئًا: أي أن التجزئة التي يُرجعها طولها صفر. .IP "\fBEVP_get_digestbyname()\fP, \fBEVP_get_digestbynid()\fP, \fBEVP_get_digestbyobj()\fP" 4 .IX Item "EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()" تُرجع بنية \fBEVP_MD\fP عند تمرير اسم مُعمّي، أو \fBNID\fP لمُعمّي، أو بنية \&\fBASN1_OBJECT\fP على التوالي. .Sp دالة \fBEVP_get_digestbyname()\fP موجودة للتوافق مع الإصدارات السابقة لـ OpenSSL قبل الإصدار 3 وتختلف عن دالة \fBEVP_MD_fetch()\fP لأنها لا تحاول "جلب" تنفيذ للمُعمّي. بالإضافة إلى ذلك، فهي تعرف فقط المُعمّيات المضمنة في OpenSSL والتي لها NID مرتبط. وبالمثل، تُرجع \fBEVP_get_digestbynid()\fP و \fBEVP_get_digestbyobj()\fP كائنات بدون تنفيذ مرتبط. .Sp عند استخدام كائنات المُعمّي التي تُرجعها هذه الدوال (مثل استدعاء \fBEVP_DigestInit_ex()\fP)، سيُجلب ضمنيًا تنفيذ للمُعمّي من المزوّدات المُحمّلة. قد يفشل هذا الجلب إذا لم يتوفر تنفيذ مناسب. استخدم \fBEVP_MD_fetch()\fP بدلاً من ذلك لجلب الخوارزمية والتنفيذ المرتبط صراحةً من مزوّد. .Sp انظر "ALGORITHM FETCHING" في \fBcrypto\fP\|(7) لمزيد من المعلومات حول الجلب. .Sp لا تحتاج كائنات المُعمّي التي تُرجعها هذه الدوال إلى تحريرها باستخدام \&\fBEVP_MD_free()\fP. .IP \fBEVP_MD_CTX_get_pkey_ctx()\fP 4 .IX Item EVP_MD_CTX_get_pkey_ctx() تُرجع \fBEVP_PKEY_CTX\fP المُسند إلى \fIctx\fP. لا ينبغي للمستدعي تحرير المؤشر المُرجَع. .IP \fBEVP_MD_CTX_set_pkey_ctx()\fP 4 .IX Item EVP_MD_CTX_set_pkey_ctx() تُسند \fBEVP_PKEY_CTX\fP إلى \fBEVP_MD_CTX\fP. يُستخدم هذا عادةً لتوفير \fBEVP_PKEY_CTX\fP مخصص لـ \fBEVP_DigestSignInit\fP\|(3) أو \&\fBEVP_DigestVerifyInit\fP\|(3). يجب على المستدعي تحرير \fIpctx\fP المُمرّر لهذه الدالة. يُسمح أيضًا بمؤشر \fIpctx\fP بقيمة NULL لمسح \fBEVP_PKEY_CTX\fP المُسند إلى \fIctx\fP. في هذه الحالة، يعتمد تحرير \fBEVP_PKEY_CTX\fP الذي مُسح أم لا على كيفية إنشاء \fBEVP_PKEY_CTX\fP. .IP \fBEVP_MD_do_all_provided()\fP 4 .IX Item EVP_MD_do_all_provided() يجتاز جميع ملخصات الرسائل المنفذة بواسطة جميع المزوّدات المفعلة في سياق المكتبة \fIlibctx\fP، وبالنسبة لكل تنفيذ، يستدعي الدالة \fIfn\fP مع أسلوب التنفيذ و\&\fIarg\fP المُعطى كوسيط. .SH المعاملات .IX Header المعاملات انظر \fBOSSL_PARAM\fP\|(3) لمعلومات حول تمرير المعاملات. .PP \&\fBEVP_MD_CTX_set_params()\fP و \fBEVP_MD_CTX_get_params()\fP يمكن استخدامهما مع المفاتيح OSSL_PARAM التالية: .IP "\(dqxoflen\(dq (\fBOSSL_DIGEST_PARAM_XOFLEN\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqxoflen\(dq (OSSL_DIGEST_PARAM_XOFLEN) <عدد صحيح غير موقع>" يضبط أو يحصل على طول الملخص لدوال الإخراج القابلة للتمديد. يجب ألا تتجاوز القيمة ما يمكن إعطاؤه باستخدام \fBsize_t\fP. قد يُستخدم بواسطة SHAKE\-128 و SHAKE\-256 لضبط طول الإخراج المستخدم بواسطة \fBEVP_DigestFinal_ex()\fP و \fBEVP_DigestFinal()\fP. .IP "\(dqsize\(dq (\fBOSSL_DIGEST_PARAM_SIZE\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqsize\(dq (OSSL_DIGEST_PARAM_SIZE) <عدد صحيح غير موقع>" يضبط أو يحصل على طول ملخص ثابت. يجب ألا تتجاوز القيمة ما يمكن إعطاؤه باستخدام \fBsize_t\fP. قد يُستخدم بواسطة BLAKE2B\-512 لضبط طول الإخراج المستخدم بواسطة \&\fBEVP_DigestFinal_ex()\fP و \fBEVP_DigestFinal()\fP. .PP \&\fBEVP_MD_CTX_set_params()\fP يمكن استخدامه مع المفاتيح OSSL_PARAM التالية: .IP "\(dqpad\-type\(dq (\fBOSSL_DIGEST_PARAM_PAD_TYPE\fP) <عدد صحيح غير موقع>" 4 .IX Item "\(dqpad\-type\(dq (OSSL_DIGEST_PARAM_PAD_TYPE) <عدد صحيح غير موقع>" يضبط نوع الحشو. يُستخدم بواسطة خوارزمية MDC2. .PP \&\fBEVP_MD_CTX_get_params()\fP يمكن استخدامه مع المفاتيح OSSL_PARAM التالية: .IP "\(dqmicalg\(dq (\fBOSSL_DIGEST_PARAM_MICALG\fP) <سلسلة محارف UTF8>." 4 .IX Item "\(dqmicalg\(dq (OSSL_DIGEST_PARAM_MICALG) <سلسلة محارف UTF8>." يحصل على سلسلة محارف خوارزمية فحص تكامل الرسالة للملخص. يُستخدم هذا عند إنشاء رسائل S/MIME متعددة الأجزاء/موقعة، كما هو محدد في RFC 3851. قد يُستخدم بواسطة محركات أو مزودات خارجية. .SH "عناصر التحكم" .IX Header "عناصر التحكم" \&\fBEVP_MD_CTX_ctrl()\fP يمكن استخدامه لإرسال عناصر التحكم القياسية التالية: .IP EVP_MD_CTRL_MICALG 4 .IX Item EVP_MD_CTRL_MICALG يحصل على سلسلة محارف خوارزمية فحص تكامل الرسالة للملخص. يُستخدم هذا عند إنشاء رسائل S/MIME متعددة الأجزاء/موقعة، كما هو محدد في RFC 3851. تُكتب قيمة السلسلة المحارف إلى \fIp2\fP. .Sp عند استخدامه مع \fBEVP_MD\fP مُستَحضَر، يُستدعى \fBEVP_MD_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "micalg" (\fBOSSL_DIGEST_PARAM_MICALG\fP). .IP EVP_MD_CTRL_XOF_LEN 4 .IX Item EVP_MD_CTRL_XOF_LEN يُعيّن عنصر التحكم هذا طول الملخص لدوال الإخراج القابلة للتمديد إلى \fIp1\fP. لا ينبغي أن يكون إرسال عنصر التحكم هذا مباشرة ضروريًا، ويُفضّل استخدام \&\fBEVP_DigestFinalXOF()\fP. يُستخدم حاليًا بواسطة خوارزميات SHAKE. .Sp عند استخدامه مع \fBEVP_MD\fP مُستَحضَر، يُستدعى \fBEVP_MD_CTX_get_params()\fP مع عنصر \fBOSSL_PARAM\fP\|(3) بمفتاح "xoflen" (\fBOSSL_DIGEST_PARAM_XOFLEN\fP). .SH الأعلام .IX Header الأعلام يمكن استخدام \&\fBEVP_MD_CTX_set_flags()\fP و \fBEVP_MD_CTX_clear_flags()\fP و \fBEVP_MD_CTX_test_flags()\fP لمعالجة واختبار أعلام \fBEVP_MD_CTX\fP هذه: .IP EVP_MD_CTX_FLAG_ONESHOT 4 .IX Item EVP_MD_CTX_FLAG_ONESHOT يُوجّه هذا العلم الملخص للتحسين لتحديث واحد فقط، إن أمكن. .IP EVP_MD_CTX_FLAG_CLEANED 4 .IX Item EVP_MD_CTX_FLAG_CLEANED هذا العلم للاستخدام الداخلي فقط و\fIيجب ألا\fP يُستخدم في كود المستخدم. .IP EVP_MD_CTX_FLAG_REUSE 4 .IX Item EVP_MD_CTX_FLAG_REUSE هذا العلم للاستخدام الداخلي فقط و\fIيجب ألا\fP يُستخدم في كود المستخدم. .IP EVP_MD_CTX_FLAG_NO_INIT 4 .IX Item EVP_MD_CTX_FLAG_NO_INIT يُوجّه هذا العلم \fBEVP_DigestInit()\fP وما شابهه بعدم تهيئة البيانات الخاصة بالتنفيذ. .IP EVP_MD_CTX_FLAG_FINALISE 4 .IX Item EVP_MD_CTX_FLAG_FINALISE بعض الدوال مثل EVP_DigestSign تُنهي فقط نسخًا من السياقات الداخلية بحيث يمكن تضمين بيانات إضافية بعد استدعاء الإنهاء. هذا غير فعال إذا لم تكن هذه الوظيفة مطلوبة، ويمكن تعطيلها بهذا العلم. .SH "القيم المُرجعة" .IX Header "القيم المُرجعة" .IP \fBEVP_MD_fetch()\fP 4 .IX Item EVP_MD_fetch() يُعيد مؤشرًا إلى \fBEVP_MD\fP عند النجاح أو NULL عند الفشل. .IP \fBEVP_MD_up_ref()\fP 4 .IX Item EVP_MD_up_ref() يُعيد 1 عند النجاح أو 0 عند الفشل. .IP "\fBEVP_Q_digest()\fP و \fBEVP_Digest()\fP و \fBEVP_DigestInit_ex2()\fP و \fBEVP_DigestInit_ex()\fP و \fBEVP_DigestInit()\fP و \fBEVP_DigestUpdate()\fP و \fBEVP_DigestFinal_ex()\fP و \fBEVP_DigestFinalXOF()\fP و \fBEVP_DigestFinal()\fP" 4 .IX Item "EVP_Q_digest() و EVP_Digest() و EVP_DigestInit_ex2() و EVP_DigestInit_ex() و EVP_DigestInit() و EVP_DigestUpdate() و EVP_DigestFinal_ex() و EVP_DigestFinalXOF() و EVP_DigestFinal()" تُعيد 1 عند النجاح و 0 عند الفشل. .IP \fBEVP_MD_CTX_ctrl()\fP 4 .IX Item EVP_MD_CTX_ctrl() يُعيد 1 إذا نجح أو 0 عند الفشل. .IP "\fBEVP_MD_CTX_set_params()\fP، \fBEVP_MD_CTX_get_params()\fP" 4 .IX Item "EVP_MD_CTX_set_params()، EVP_MD_CTX_get_params()" يُعيد 1 إذا نجح أو 0 عند الفشل. .IP "\fBEVP_MD_CTX_settable_params()\fP، \fBEVP_MD_CTX_gettable_params()\fP" 4 .IX Item "EVP_MD_CTX_settable_params()، EVP_MD_CTX_gettable_params()" تُعيد مصفوفة من ثوابت \fBOSSL_PARAM\fP\|(3)، أو NULL إذا لم يوجد أي منها للحصول عليه. .IP \fBEVP_MD_CTX_dup()\fP 4 .IX Item EVP_MD_CTX_dup() تُعيد كائن EVP_MD_CTX جديد إذا نجحت أو NULL عند الفشل. .IP \fBEVP_MD_CTX_copy_ex()\fP 4 .IX Item EVP_MD_CTX_copy_ex() يُعيد 1 إذا نجح أو 0 عند الفشل. .IP "\fBEVP_MD_get_type()\fP، \fBEVP_MD_get_pkey_type()\fP" 4 .IX Item "EVP_MD_get_type()، EVP_MD_get_pkey_type()" تُعيد NID لمُعرِّف الكائن المُناظر أو NID_undef إذا لم يوجد أي منها. .IP "\fBEVP_MD_get_size()\fP، \fBEVP_MD_get_block_size()\fP، \fBEVP_MD_CTX_get_size()\fP، \fBEVP_MD_CTX_get_block_size()\fP" 4 .IX Item "EVP_MD_get_size()، EVP_MD_get_block_size()، EVP_MD_CTX_get_size()، EVP_MD_CTX_get_block_size()" تُعيد حجم المُستخلص أو الكتلة بالبايت أو \-1 عند الفشل. .IP \fBEVP_md_null()\fP 4 .IX Item EVP_md_null() تُعيد مؤشرًا إلى بنية \fBEVP_MD\fP لمُستخلص الرسالة "الفارغ". .IP "\fBEVP_get_digestbyname()\fP, \fBEVP_get_digestbynid()\fP, \fBEVP_get_digestbyobj()\fP" 4 .IX Item "EVP_get_digestbyname(), EVP_get_digestbynid(), EVP_get_digestbyobj()" تُعيد إما بنية \fBEVP_MD\fP أو NULL إذا حدث خطأ. .IP \fBEVP_MD_CTX_set_pkey_ctx()\fP 4 .IX Item EVP_MD_CTX_set_pkey_ctx() لا قيمة إرجاع لهذه الدالة. .IP \fBEVP_MD_names_do_all()\fP 4 .IX Item EVP_MD_names_do_all() تُعيد 1 إذا استُدعي الاستدعاء لجميع الأسماء. قيمة الإرجاع 0 تعني أن الاستدعاء لم يُستدعَ لأي اسم. .SH ملاحظات .IX Header ملاحظات يجب استخدام واجهة \fBEVP\fP لمُستخلصات الرسائل دائمًا تقريبًا بدلاً من الواجهات منخفضة المستوى. وذلك لأن الكود يصبح شفافًا تجاه المُستخلص المُستخدم وأكثر مرونة بكثير. .PP يجب على التطبيقات الجديدة استخدام خوارزميات SHA\-2 (مثل \fBEVP_sha256\fP\|(3)) أو SHA\-3 (مثل \fBEVP_sha3_512\fP\|(3)). لا تزال خوارزميات المُستخلص الأخرى شائعة الاستخدام. .PP بالنسبة لمعظم التطبيقات، يُضبط المُعامل \fIimpl\fP في \fBEVP_DigestInit_ex()\fP على NULL لاستخدام التنفيذ المبدئي للمُستخلص. .PP تجاهل قيم الإرجاع الفاشلة لـ \fBEVP_DigestInit_ex()\fP أو \fBEVP_DigestInit_ex2()\fP أو \&\fBEVP_DigestInit()\fP قد يؤدي إلى سلوك غير مُحدد في الاستدعاءات اللاحقة لتحديث أو إنهاء \fBEVP_MD_CTX\fP مثل دوال \fBEVP_DigestUpdate()\fP أو \&\fBEVP_DigestFinal()\fP. الاستدعاءات الصالحة الوحيدة على \fBEVP_MD_CTX\fP عند فشل التهيئة هي استدعاءات تُحاول تهيئة أخرى للسياق أو تحرير السياق. .PP الدوال \fBEVP_DigestInit()\fP و \fBEVP_DigestFinal()\fP و \fBEVP_MD_CTX_copy()\fP قديمة لكنها محفوظة للحفاظ على التوافق مع الشيفرة الموجودة. يجب على التطبيقات الجديدة استخدام \fBEVP_DigestInit_ex()\fP و \fBEVP_DigestFinal_ex()\fP و \&\fBEVP_MD_CTX_copy_ex()\fP لأنها تستطيع إعادة استخدام سياق التقطيع بكفاءة بدلاً من تهيئته وتنظيفه في كل استدعاء وتسمح بتحديد تطبيقات غير مبدئية للتقطيع. .PP إذا لم تُنظف سياقات التقطيع بعد الاستخدام، ستحدث تسريبات للذاكرة. .PP \&\fBEVP_MD_CTX_get0_name()\fP و \fBEVP_MD_CTX_get_size()\fP و \fBEVP_MD_CTX_get_block_size()\fP و \&\fBEVP_MD_CTX_get_type()\fP و \fBEVP_get_digestbynid()\fP و \fBEVP_get_digestbyobj()\fP معرّفة كوحدات ماكرو. .PP \&\fBEVP_MD_CTX_ctrl()\fP تُرسل أوامر إلى تقطيعات الرسائل لتكوين أو تحكم إضافي. .SH أمثلة .IX Header أمثلة هذا المثال يقطع البيانات "Test Message\en" و "Hello World\en"، باستخدام اسم التقطيع المُمرّر عبر سطر الأوامر. .PP .Vb 3 \& #include \& #include \& #include \& \& int main(int argc, char *argv[]) \& { \& EVP_MD_CTX *mdctx; \& const EVP_MD *md; \& char mess1[] = "Test Message\en"; \& char mess2[] = "Hello World\en"; \& unsigned char md_value[EVP_MAX_MD_SIZE]; \& unsigned int md_len, i; \& \& if (argv[1] == NULL) { \& printf("Usage: mdtest digestname\en"); \& exit(1); \& } \& \& md = EVP_get_digestbyname(argv[1]); \& if (md == NULL) { \& printf("Unknown message digest %s\en", argv[1]); \& exit(1); \& } \& \& mdctx = EVP_MD_CTX_new(); \& if (mdctx == NULL) { \& printf("Message digest create failed.\en"); \& exit(1); \& } \& if (!EVP_DigestInit_ex2(mdctx, md, NULL)) { \& printf("Message digest initialization failed.\en"); \& EVP_MD_CTX_free(mdctx); \& exit(1); \& } \& if (!EVP_DigestUpdate(mdctx, mess1, strlen(mess1))) { \& printf("Message digest update failed.\en"); \& EVP_MD_CTX_free(mdctx); \& exit(1); \& } \& if (!EVP_DigestUpdate(mdctx, mess2, strlen(mess2))) { \& printf("Message digest update failed.\en"); \& EVP_MD_CTX_free(mdctx); \& exit(1); \& } \& if (!EVP_DigestFinal_ex(mdctx, md_value, &md_len)) { \& printf("Message digest finalization failed.\en"); \& EVP_MD_CTX_free(mdctx); \& exit(1); \& } \& EVP_MD_CTX_free(mdctx); \& \& printf("Digest is: "); \& for (i = 0; i < md_len; i++) \& printf("%02x", md_value[i]); \& printf("\en"); \& \& exit(0); \& } .Ve .SH "انظر أيضًا" .IX Header "انظر أيضًا" \&\fBEVP_MD_meth_new\fP\|(3), \&\fBopenssl\-dgst\fP\|(1), \&\fBevp\fP\|(7), \&\fBOSSL_PROVIDER\fP\|(3), \&\fBOSSL_PARAM\fP\|(3), \&\fBproperty\fP\|(7), "جلب الخوارزميات" في \fBcrypto\fP\|(7), \&\fBprovider\-digest\fP\|(7), \&\fBlife_cycle\-digest\fP\|(7) .PP القائمة الكاملة لخوارزميات التقطيع مُقدّمة أدناه. .PP \&\fBEVP_blake2b512\fP\|(3), \&\fBEVP_md2\fP\|(3), \&\fBEVP_md4\fP\|(3), \&\fBEVP_md5\fP\|(3), \&\fBEVP_mdc2\fP\|(3), \&\fBEVP_ripemd160\fP\|(3), \&\fBEVP_sha1\fP\|(3), \&\fBEVP_sha224\fP\|(3), \&\fBEVP_sha3_224\fP\|(3), \&\fBEVP_sm3\fP\|(3), \&\fBEVP_whirlpool\fP\|(3) .SH التاريخ .IX Header التاريخ الدالتان \fBEVP_MD_CTX_create()\fP و \fBEVP_MD_CTX_destroy()\fP أُعيدت تسميتهما إلى \&\fBEVP_MD_CTX_new()\fP و \fBEVP_MD_CTX_free()\fP في OpenSSL 1.1.0، على التوالي. .PP الرابط بين التقطيعات وخوارزميات التوقيع ثُبّت في OpenSSL 1.0 وما بعده، لذا الآن يمكن استخدام \fBEVP_sha1()\fP مع RSA و DSA. .PP الدالة \fBEVP_dss1()\fP أُزيلت في OpenSSL 1.1.0. .PP الدالة \fBEVP_MD_CTX_set_pkey_ctx()\fP أُضيفت في OpenSSL 1.1.1. .PP الدوال \fBEVP_Q_digest()\fP و \fBEVP_DigestInit_ex2()\fP و \&\fBEVP_MD_fetch()\fP و \fBEVP_MD_free()\fP و \fBEVP_MD_up_ref()\fP و \&\fBEVP_MD_get_params()\fP و \fBEVP_MD_CTX_set_params()\fP و \fBEVP_MD_CTX_get_params()\fP و \&\fBEVP_MD_gettable_params()\fP و \fBEVP_MD_gettable_ctx_params()\fP و \&\fBEVP_MD_settable_ctx_params()\fP و \fBEVP_MD_CTX_settable_params()\fP و \&\fBEVP_MD_CTX_gettable_params()\fP أُضيفت في OpenSSL 3.0. .PP الدوال \fBEVP_MD_type()\fP و \fBEVP_MD_nid()\fP و \fBEVP_MD_name()\fP و \fBEVP_MD_pkey_type()\fP و \&\fBEVP_MD_size()\fP و \fBEVP_MD_block_size()\fP و \fBEVP_MD_flags()\fP و \fBEVP_MD_CTX_size()\fP و \&\fBEVP_MD_CTX_block_size()\fP و \fBEVP_MD_CTX_type()\fP و \fBEVP_MD_CTX_md_data()\fP أُعيدت تسميتها لتضمين \f(CW\*(C`get\*(C'\fP أو \f(CW\*(C`get0\*(C'\fP في أسمائها في OpenSSL 3.0، على التوالي. الأسماء القديمة محفوظة كوحدات ماكرو بديلة غير مهملة. .PP الدالة \fBEVP_MD_CTX_md()\fP أُهملت في OpenSSL 3.0؛ استخدم \&\fBEVP_MD_CTX_get0_md()\fP بدلاً منها. \&\fBEVP_MD_CTX_update_fn()\fP و \fBEVP_MD_CTX_set_update_fn()\fP أُهملتا في OpenSSL 3.0. .PP الدالة \fBEVP_MD_CTX_dup()\fP أُضيفت في OpenSSL 3.1. .PP الدالة \fBEVP_DigestSqueeze()\fP أُضيفت في OpenSSL 3.3. .PP الدالتان \fBEVP_MD_CTX_get_size_ex()\fP و \fBEVP_xof()\fP أُضيفتا في OpenSSL 3.4. وحدات الماكرو \fBEVP_MD_CTX_get_size()\fP و EVP_MD_CTX_size غُيّرت في OpenSSL 3.4 لتكون أسماء مستعارة لـ \fBEVP_MD_CTX_get_size_ex()\fP، سابقاً كانت أسماء مستعارة لـ EVP_MD_get_size التي كانت تُرجع قيمة ثابتة. هذا مطلوب لتقطيعات XOF لأنها ليس لها حجم ثابت. .SH "حقوق النسخ" .IX Header "حقوق النسخ" حقوق النشر 2000\-2024 لمؤلفي مشروع 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 .