BN_MOD_MUL_RECIPROCAL(3ssl) OpenSSL BN_MOD_MUL_RECIPROCAL(3ssl)

BN_mod_mul_reciprocal, BN_div_recp, BN_RECP_CTX_new, BN_RECP_CTX_free, BN_RECP_CTX_set - înmulțirea modulară utilizând reciproca

#include <openssl/bn.h>
BN_RECP_CTX *BN_RECP_CTX_new(void);
void BN_RECP_CTX_free(BN_RECP_CTX *recp);
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *m, BN_CTX *ctx);
int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a, BN_RECP_CTX *recp,
                BN_CTX *ctx);
int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
                          BN_RECP_CTX *recp, BN_CTX *ctx);

BN_mod_mul_reciprocal() poate fi utilizată pentru a efectua o operație eficientă BN_mod_mul(3) atunci când operația va fi efectuată în mod repetat cu același modul. Calculează r=(a*b)%m folosind recp=1/m, care este setat așa cum este descris mai jos. ctx este un BN_CTX alocat anterior, utilizat pentru variabile temporare.

BN_RECP_CTX_new() alocă și inițializează o structură BN_RECP.

BN_RECP_CTX_free() eliberează componentele structurii BN_RECP și, dacă aceasta a fost creată de BN_RECP_CTX_new(), și structura în sine. Dacă recp este NULL, nu se face nimic.

BN_RECP_CTX_set() stochează m în recp și îl pregătește pentru a calcula 1/m și a-l decala la stânga cu BN_num_bits(m)+1 pentru a-l transforma într-un număr întreg. Rezultatul și numărul de biți cu care a fost deplasat la stânga vor fi stocate ulterior în recp.

BN_div_recp() împarte a la m folosind recp. Acesta plasează coeficientul în dv și restul în rem.

Structura BN_RECP_CTX nu poate fi partajată între fire.

BN_RECP_CTX_new() returnează valoarea BN_RECP_CTX nou alocată și NULL în caz de eroare.

BN_RECP_CTX_free() nu are valoare de returnare.

Pentru celelalte funcții, 1 este returnat în caz de succes, 0 în caz de eroare. Codurile de eroare pot fi obținute prin ERR_get_error(3).

ERR_get_error(3), BN_add(3), BN_CTX_new(3)

BN_RECP_CTX_init() a fost eliminată în OpenSSL 1.1.0

Drepturi de autor 2000-2017 The OpenSSL Project Authors. Toate drepturile rezervate.

Licențiat sub Licența Apache 2.0 („License”). Nu aveți voie să utilizați acest fișier decât în conformitate cu licența. Puteți obține o copie din fișierul LICENSE din distribuția sursei sau de la https://www.openssl.org/source/license.html.

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

5 august 2025 3.5.2