diff options
Diffstat (limited to 'src/ltm/bn_mp_dr_reduce.c')
-rw-r--r-- | src/ltm/bn_mp_dr_reduce.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/ltm/bn_mp_dr_reduce.c b/src/ltm/bn_mp_dr_reduce.c index ffc33a6b..da24d17a 100644 --- a/src/ltm/bn_mp_dr_reduce.c +++ b/src/ltm/bn_mp_dr_reduce.c @@ -1,7 +1,16 @@ #include "tommath_private.h" #ifdef BN_MP_DR_REDUCE_C -/* LibTomMath, multiple-precision integer library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * SPDX-License-Identifier: Unlicense + */ /* reduce "x" in place modulo "n" using the Diminished Radix algorithm. * @@ -17,10 +26,9 @@ * * Input x must be in the range 0 <= x <= (n-1)**2 */ -mp_err mp_dr_reduce(mp_int *x, const mp_int *n, mp_digit k) +int mp_dr_reduce(mp_int *x, const mp_int *n, mp_digit k) { - mp_err err; - int i, m; + int err, i, m; mp_word r; mp_digit mu, *tmpx1, *tmpx2; @@ -52,14 +60,16 @@ top: for (i = 0; i < m; i++) { r = ((mp_word)*tmpx2++ * (mp_word)k) + *tmpx1 + mu; *tmpx1++ = (mp_digit)(r & MP_MASK); - mu = (mp_digit)(r >> ((mp_word)MP_DIGIT_BIT)); + mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); } /* set final carry */ *tmpx1++ = mu; /* zero words above m */ - MP_ZERO_DIGITS(tmpx1, (x->used - m) - 1); + for (i = m + 1; i < x->used; i++) { + *tmpx1++ = 0; + } /* clamp, sub and return */ mp_clamp(x); @@ -76,3 +86,7 @@ top: return MP_OKAY; } #endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ |