summaryrefslogtreecommitdiff
path: root/src/ltm/bn_mp_dr_reduce.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ltm/bn_mp_dr_reduce.c')
-rw-r--r--src/ltm/bn_mp_dr_reduce.c28
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$ */