Lines Matching refs:recp
63 void BN_RECP_CTX_init(BN_RECP_CTX *recp)
65 BN_init(&(recp->N));
66 BN_init(&(recp->Nr));
67 recp->num_bits=0;
68 recp->flags=0;
83 void BN_RECP_CTX_free(BN_RECP_CTX *recp)
85 if(recp == NULL)
88 BN_free(&(recp->N));
89 BN_free(&(recp->Nr));
90 if (recp->flags & BN_FLG_MALLOCED)
91 OPENSSL_free(recp);
94 int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *d, BN_CTX *ctx)
96 if (!BN_copy(&(recp->N),d)) return 0;
97 if (!BN_zero(&(recp->Nr))) return 0;
98 recp->num_bits=BN_num_bits(d);
99 recp->shift=0;
104 BN_RECP_CTX *recp, BN_CTX *ctx)
123 ret = BN_div_recp(NULL,r,ca,recp,ctx);
130 BN_RECP_CTX *recp, BN_CTX *ctx)
148 if (BN_ucmp(m,&(recp->N)) < 0)
164 j=recp->num_bits<<1;
168 if (i != recp->shift)
169 recp->shift=BN_reciprocal(&(recp->Nr),&(recp->N),
171 if (recp->shift == -1) goto err;
173 /* d := |round(round(m / 2^BN_num_bits(N)) * recp->Nr / 2^(i - BN_num_bits(N)))|
178 if (!BN_rshift(a,m,recp->num_bits)) goto err;
179 if (!BN_mul(b,a,&(recp->Nr),ctx)) goto err;
180 if (!BN_rshift(d,b,i-recp->num_bits)) goto err;
183 if (!BN_mul(b,&(recp->N),d,ctx)) goto err;
189 while (BN_ucmp(r,&(recp->N)) >= 0)
196 if (!BN_usub(r,r,&(recp->N))) goto err;
202 d->neg=m->neg^recp->N.neg;