#include "tommath_private.h"
#ifdef BN_MP_MOD_2D_C
mp_err mp_mod_2d(const mp_int *a, int b, mp_int *c)
{
int x;
mp_err err;
if (b <= 0) {
mp_zero(c);
return MP_OKAY;
}
if (b >= (a->used * MP_DIGIT_BIT)) {
return mp_copy(a, c);
}
if ((err = mp_copy(a, c)) != MP_OKAY) {
return err;
}
x = (b / MP_DIGIT_BIT) + (((b % MP_DIGIT_BIT) == 0) ? 0 : 1);
MP_ZERO_DIGITS(c->dp + x, c->used - x);
c->dp[b / MP_DIGIT_BIT] &=
((mp_digit)1 << (mp_digit)(b % MP_DIGIT_BIT)) - (mp_digit)1;
mp_clamp(c);
return MP_OKAY;
}
#endif