Go to the documentation of this file.
122 #include "../../internal.h"
194 "BN_MONT_CTX_N0_LIMBS value is invalid");
196 sizeof(BN_ULONG) * BN_MONT_CTX_N0_LIMBS ==
sizeof(
uint64_t),
197 "uint64_t is insufficient precision for n0");
199 mont->
n0[0] = (BN_ULONG)n0;
200 #if BN_MONT_CTX_N0_LIMBS == 2
201 mont->
n0[1] = (BN_ULONG)(n0 >> BN_BITS2);
216 if (new_ctx == NULL) {
227 unsigned lgBigR = mont->
N.
width * BN_BITS2;
252 unsigned lgBigR = mont->
N.
width * BN_BITS2;
275 if (*pmont == NULL) {
278 const int ok = *pmont != NULL;
290 const BN_ULONG *
n = mont->
N.
d;
291 size_t num_n = mont->
N.
width;
292 if (num_r != num_n || num_a != 2 * num_n) {
300 BN_ULONG n0 = mont->
n0[0];
302 for (
size_t i = 0;
i < num_n;
i++) {
304 v += carry +
a[
i + num_n];
305 carry |= (
v !=
a[
i + num_n]);
306 carry &= (
v <=
a[
i + num_n]);
332 int max = 2 *
n->width;
338 ret->width =
n->width;
367 if (
n->width > 0 && (
n->d[
n->width - 1] >> (BN_BITS2 - 1)) != 0) {
371 r->d[0] = 0 -
n->d[0];
372 for (
int i = 1;
i <
n->width;
i++) {
419 if (
a->neg ||
b->neg) {
424 #if defined(OPENSSL_BN_ASM_MONT)
427 if (
num >= (128 / BN_BITS2) &&
473 const BN_ULONG *
b,
size_t num,
479 #if defined(OPENSSL_BN_ASM_MONT)
481 if (
num >= (128 / BN_BITS2)) {
int bn_less_than_montgomery_R(const BIGNUM *bn, const BN_MONT_CTX *mont)
#define bn_set_minimal_width
int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BN_MONT_CTX *mont, BN_CTX *ctx)
void BN_MONT_CTX_free(BN_MONT_CTX *mont)
#define BN_R_CALLED_WITH_EVEN_MODULUS
int bn_one_to_montgomery(BIGNUM *r, const BN_MONT_CTX *mont, BN_CTX *ctx)
static int bn_mod_mul_montgomery_fallback(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BN_MONT_CTX *mont, BN_CTX *ctx)
int BN_to_montgomery(BIGNUM *ret, const BIGNUM *a, const BN_MONT_CTX *mont, BN_CTX *ctx)
BN_MONT_CTX * BN_MONT_CTX_copy(BN_MONT_CTX *to, const BN_MONT_CTX *from)
#define OPENSSL_PUT_ERROR(library, reason)
BN_MONT_CTX * BN_MONT_CTX_new_consttime(const BIGNUM *mod, BN_CTX *ctx)
#define CRYPTO_MUTEX_unlock_read
void bn_from_montgomery_small(BN_ULONG *r, size_t num_r, const BN_ULONG *a, size_t num_a, const BN_MONT_CTX *mont)
#define BN_mod(rem, numerator, divisor, ctx)
#define BN_R_NEGATIVE_NUMBER
static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, const BN_MONT_CTX *mont)
void bn_mod_mul_montgomery_small(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, size_t num, const BN_MONT_CTX *mont)
static void * OPENSSL_memset(void *dst, int c, size_t n)
#define bn_mod_exp_base_2_consttime
int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED
BN_MONT_CTX * BN_MONT_CTX_new(void)
static int bn_from_montgomery_in_place(BN_ULONG *r, size_t num_r, BN_ULONG *a, size_t num_a, const BN_MONT_CTX *mont)
unsigned __int64 uint64_t
static void * OPENSSL_memcpy(void *dst, const void *src, size_t n)
#define ERR_R_INTERNAL_ERROR
BN_MONT_CTX * BN_MONT_CTX_new_for_modulus(const BIGNUM *mod, BN_CTX *ctx)
#define CRYPTO_MUTEX_lock_read
static int bn_mont_ctx_set_N_and_n0(BN_MONT_CTX *mont, const BIGNUM *mod)
int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock, const BIGNUM *mod, BN_CTX *bn_ctx)
UniquePtr< SSL_SESSION > ret
#define CRYPTO_MUTEX_lock_write
void bn_to_montgomery_small(BN_ULONG *r, const BN_ULONG *a, size_t num, const BN_MONT_CTX *mont)
int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, const BN_MONT_CTX *mont, BN_CTX *ctx)
#define BN_SMALL_MAX_WORDS
#define CRYPTO_MUTEX_unlock_write
#define OPENSSL_STATIC_ASSERT(cond, msg)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:30