Lines Matching defs:mont

126 static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont);
130 BN_MONT_CTX *mont, BN_CTX *ctx)
135 int num = mont->N.top;
140 if (bn_mul_mont(r->d,a->d,b->d,mont->N.d,mont->n0,num))
165 if (!BN_from_montgomery_word(r,tmp,mont)) goto err;
167 if (!BN_from_montgomery(r,tmp,mont,ctx)) goto err;
177 static int BN_from_montgomery_word(BIGNUM *ret, BIGNUM *r, BN_MONT_CTX *mont)
183 n= &(mont->N);
203 n0=mont->n0[0];
280 int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
289 retn = BN_from_montgomery_word(ret,t,mont);
300 BN_mask_bits(t1,mont->ri);
302 if (!BN_mul(t2,t1,&mont->Ni,ctx)) goto err;
303 BN_mask_bits(t2,mont->ri);
305 if (!BN_mul(t1,t2,&mont->N,ctx)) goto err;
307 if (!BN_rshift(ret,t2,mont->ri)) goto err;
309 if (BN_ucmp(ret, &(mont->N)) >= 0)
311 if (!BN_usub(ret,ret,&(mont->N))) goto err;
343 void BN_MONT_CTX_free(BN_MONT_CTX *mont)
345 if(mont == NULL)
348 BN_free(&(mont->RR));
349 BN_free(&(mont->N));
350 BN_free(&(mont->Ni));
351 if (mont->flags & BN_FLG_MALLOCED)
352 OPENSSL_free(mont);
355 int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
362 R= &(mont->RR); /* grab RR as a temp */
363 if (!BN_copy(&(mont->N),mod)) goto err; /* Set N */
364 mont->N.neg = 0;
376 mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
411 mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
412 mont->n0[1] = (Ri->top > 1) ? Ri->d[1] : 0;
435 mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
436 mont->n0[1] = 0;
441 mont->ri=BN_num_bits(&mont->N);
443 if (!BN_set_bit(R,mont->ri)) goto err; /* R = 2^ri */
445 if ((BN_mod_inverse(Ri,R,&mont->N,ctx)) == NULL)
447 if (!BN_lshift(Ri,Ri,mont->ri)) goto err; /* R*Ri */
450 if (!BN_div(&(mont->Ni),NULL,Ri,&mont->N,ctx)) goto err;
455 BN_zero(&(mont->RR));
456 if (!BN_set_bit(&(mont->RR),mont->ri*2)) goto err;
457 if (!BN_mod(&(mont->RR),&(mont->RR),&(mont->N),ctx)) goto err;