Lines Matching defs:mont
23 static int bn_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont);
27 BN_MONT_CTX *mont, BN_CTX *ctx)
29 int ret = bn_mul_mont_fixed_top(r, a, b, mont, ctx);
38 BN_MONT_CTX *mont, BN_CTX *ctx)
42 int num = mont->N.top;
48 if (bn_mul_mont(r->d, a->d, b->d, mont->N.d, mont->n0, num)) {
75 if (!bn_from_montgomery_word(r, tmp, mont))
78 if (!BN_from_montgomery(r, tmp, mont, ctx))
88 static int bn_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont)
95 n = &(mont->N);
118 n0 = mont->n0[0];
162 int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
167 retn = bn_from_mont_fixed_top(ret, a, mont, ctx);
174 int bn_from_mont_fixed_top(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
183 retn = bn_from_montgomery_word(ret, t, mont);
197 BN_mask_bits(t1, mont->ri);
199 if (!BN_mul(t2, t1, &mont->Ni, ctx))
201 BN_mask_bits(t2, mont->ri);
203 if (!BN_mul(t1, t2, &mont->N, ctx))
207 if (!BN_rshift(ret, t2, mont->ri))
210 if (BN_ucmp(ret, &(mont->N)) >= 0) {
211 if (!BN_usub(ret, ret, &(mont->N)))
222 int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont,
225 return bn_mul_mont_fixed_top(r, a, &(mont->RR), mont, ctx);
252 void BN_MONT_CTX_free(BN_MONT_CTX *mont)
254 if (mont == NULL)
256 BN_clear_free(&mont->RR);
257 BN_clear_free(&mont->N);
258 BN_clear_free(&mont->Ni);
259 if (mont->flags & BN_FLG_MALLOCED)
260 OPENSSL_free(mont);
263 int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
274 R = &(mont->RR); /* grab RR as a temp */
275 if (!BN_copy(&(mont->N), mod))
278 BN_set_flags(&(mont->N), BN_FLG_CONSTTIME);
279 mont->N.neg = 0;
294 mont->ri = (BN_num_bits(mod) + (BN_BITS2 - 1)) / BN_BITS2 * BN_BITS2;
338 mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
339 mont->n0[1] = (Ri->top > 1) ? Ri->d[1] : 0;
368 mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
369 mont->n0[1] = 0;
374 mont->ri = BN_num_bits(&mont->N);
376 if (!BN_set_bit(R, mont->ri))
379 if ((BN_mod_inverse(Ri, R, &mont->N, ctx)) == NULL)
381 if (!BN_lshift(Ri, Ri, mont->ri))
388 if (!BN_div(&(mont->Ni), NULL, Ri, &mont->N, ctx))
394 BN_zero(&(mont->RR));
395 if (!BN_set_bit(&(mont->RR), mont->ri * 2))
397 if (!BN_mod(&(mont->RR), &(mont->RR), &(mont->N), ctx))
400 for (i = mont->RR.top, ret = mont->N.top; i < ret; i++)
401 mont->RR.d[i] = 0;
402 mont->RR.top = ret;
403 mont->RR.flags |= BN_FLG_FIXED_TOP;