Lines Matching defs:recp
75 BN_RECP_CTX *recp;
77 if ((recp = calloc(1, sizeof(*recp))) == NULL)
80 if ((recp->N = BN_dup(N)) == NULL)
82 BN_set_negative(recp->N, 0);
83 recp->num_bits = BN_num_bits(recp->N);
85 if ((recp->Nr = BN_new()) == NULL)
88 return recp;
91 BN_RECP_CTX_free(recp);
97 BN_RECP_CTX_free(BN_RECP_CTX *recp)
99 if (recp == NULL)
102 BN_free(recp->N);
103 BN_free(recp->Nr);
104 freezero(recp, sizeof(*recp));
136 BN_div_reciprocal(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, BN_RECP_CTX *recp,
156 if (BN_ucmp(m, recp->N) < 0) {
174 j = recp->num_bits << 1;
179 if (i != recp->shift)
180 recp->shift = BN_reciprocal(recp->Nr, recp->N, i, ctx);
183 if (recp->shift == -1)
186 /* d := |round(round(m / 2^BN_num_bits(N)) * recp->Nr / 2^(i - BN_num_bits(N)))|
191 if (!BN_rshift(a, m, recp->num_bits))
193 if (!BN_mul(b, a, recp->Nr, ctx))
195 if (!BN_rshift(d, b, i - recp->num_bits))
199 if (!BN_mul(b, recp->N, d, ctx))
207 while (BN_ucmp(r, recp->N) >= 0) {
212 if (!BN_usub(r, r, recp->N))
220 BN_set_negative(d, m->neg ^ recp->N->neg);
232 BN_RECP_CTX *recp, BN_CTX *ctx)
237 return BN_div_reciprocal(NULL, r, r, recp, ctx);
242 BN_mod_sqr_reciprocal(BIGNUM *r, const BIGNUM *x, BN_RECP_CTX *recp, BN_CTX *ctx)
247 return BN_div_reciprocal(NULL, r, r, recp, ctx);