BN_ADD(3SSL)

الاسم
BN_add, BN_sub, BN_mul, BN_sqr, BN_div, BN_mod, BN_nnmod, BN_mod_add, BN_mod_sub, BN_mod_mul, BN_mod_sqr, BN_mod_sqrt, BN_exp, BN_mod_exp, BN_gcd - عمليات حسابية على BIGNUMs

موجز
 #include <openssl/bn.h>

 int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);

 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);

 int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);

 int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);

 int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, const BIGNUM *d,
            BN_CTX *ctx);

 int BN_mod(BIGNUM *rem, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);

 int BN_nnmod(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);

 int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
                BN_CTX *ctx);

 int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
                BN_CTX *ctx);

 int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,
                BN_CTX *ctx);

 int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);

 BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);

 int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);

 int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
                const BIGNUM *m, BN_CTX *ctx);

 int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);

الوصف
BN_add() تجمع a و b وتضع النتيجة في r ("r=a+b"). r قد يكون نفس BIGNUM مثل a أو b.

BN_sub() تطرح b من a وتضع النتيجة في r ("r=a-b"). r قد يكون نفس BIGNUM مثل a أو b.

BN_mul() تضرب a و b وتضع النتيجة في r ("r=a*b"). r قد يكون نفس BIGNUM مثل a أو b. للضرب في قوى العدد 2، استخدم BN_lshift(3).

BN_sqr() تأخذ مربع a وتضع النتيجة في r ("r=a^2"). r و a قد يكونان نفس BIGNUM. هذه الدالة أسرع من BN_mul(r,a,a).

BN_div() تقسم a على d وتضع النتيجة في dv والباقي في rem ("dv=a/d, rem=a%d"). أي من dv و rem قد يكون NULL، وفي هذه الحالة لا تُعاد القيمة المعنية. تُقرّب النتيجة نحو الصفر؛ لذا إذا كان a سالبًا، سيكون الباقي صفرًا أو سالبًا. للقسمة على قوى العدد 2، استخدم BN_rshift(3).

BN_mod() تقابل BN_div() مع ضبط dv على NULL.

BN_nnmod() تُقلل a بمعامل m وتضع الباقي غير السالب في r.

BN_mod_add() تجمع a إلى b بمعامل m وتضع النتيجة غير السالبة في r.

BN_mod_sub() تطرح b من a بمعامل m وتضع النتيجة غير السالبة في r.

BN_mod_mul() تضرب a في b وتجد الباقي غير السالب بالنسبة للمعامل m ("r=(a*b) mod m"). r قد يكون نفس BIGNUM مثل a أو b. للخوارزميات الأكثر كفاءة للحسابات المتكررة باستخدام نفس المعامل، انظر BN_mod_mul_montgomery(3) و BN_mod_mul_reciprocal(3).

BN_mod_sqr() تأخذ مربع a بمعامل m وتضع النتيجة في r.

BN_mod_sqrt() تُعيد الجذر التربيعي المعياري لـ a بحيث "in^2 = a (mod p)". يجب أن يكون المعامل p عددًا أوليًا، وإلا فسيُعاد خطأ أو "نتيجة" غير صحيحة. تُخزّن النتيجة في in الذي يمكن أن يكون NULL. في هذه الحالة، سيُخصص للنتيجة ذاكرة جديدة.

BN_exp() ترفع a إلى القوة p وتضع النتيجة في r ("r=a^p"). هذه الدالة أسرع من التطبيقات المتكررة لـ BN_mul().

BN_mod_exp() تحسب a إلى القوة p بمعامل m ("r=a^p % m"). تستخدم هذه الدالة وقتًا ومساحة أقل من BN_exp(). لا تستدع هذه الدالة عندما يكون m زوجيًا وأي من المعاملات لديه العلم BN_FLG_CONSTTIME مضبوطًا.

BN_gcd() تحسب القاسم المشترك الأكبر لـ a و b وتضع النتيجة في r. r قد يكون نفس BIGNUM مثل a أو b.

لجميع الدوال، ctx هو BN_CTX مخصص مسبقًا يُستخدم للمتغيرات المؤقتة؛ انظر BN_CTX_new(3).

ما لم يُذكر خلاف ذلك، يجب أن يكون BIGNUM الناتج مختلفًا عن الوسائط.

ملاحظات
للعمليات النمطية مثل BN_nnmod() أو BN_mod_exp() يُعد خطأً استخدام نفس كائن BIGNUM للمعامل كما هو للمخرج.

القيم المُرجعة
تُرجع BN_mod_sqrt() النتيجة (ربما غير صحيحة إذا لم يكن p أوليًا)، أو NULL.

لجميع الدوال المتبقية، يُعاد 1 للنجاح، 0 عند الخطأ. يجب دائمًا فحص القيمة المُعادة (مثلًا، "if (!BN_add(r,a,b)) goto err;"). يمكن الحصول على رموز الخطأ بواسطة ERR_get_error(3).

انظر أيضًا
ERR_get_error(3), BN_CTX_new(3), BN_add_word(3), BN_set_bit(3)

حقوق النسخ
حقوق النشر 2000-2024 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.