diff options
author | gahr <gahr@gahr.ch> | 2016-03-11 17:13:38 (GMT) |
---|---|---|
committer | gahr <gahr@gahr.ch> | 2016-03-11 17:13:38 (GMT) |
commit | 48a3d3e4dca22efb2981fd8eb9b505b19438a704 (patch) | |
tree | f0acc29307113ad908a79330d8b8c924c8ad79ae /libtommath/bn_mp_dr_reduce.c | |
parent | 5137357e74c887368ad68c3cb09998b154e68d4f (diff) | |
download | tcl-48a3d3e4dca22efb2981fd8eb9b505b19438a704.zip tcl-48a3d3e4dca22efb2981fd8eb9b505b19438a704.tar.gz tcl-48a3d3e4dca22efb2981fd8eb9b505b19438a704.tar.bz2 |
[e6f27aa56f] Initial import of libtommath-1.0
This commit brings in libtommath-1.0, as of tag v1.0 of the upstream repository
at https://github.com/libtom/libtommath.
Only the top-level directory has been imported: the demo, etc, logs, mtest,
pics, pre_gen, and tombc directories have been removed from our repo.
The stubs tables have been regenerated to accomodate for the new function:
mp_expt_d_ex(mp_int *a, mp_digit b, mp_int *c, int fast);
See https://github.com/libtom/libtommath/commit/e9b1837 for details.
Only the unix build system has been modified for now. Windows and Mac OSX will
come later.
Diffstat (limited to 'libtommath/bn_mp_dr_reduce.c')
-rw-r--r-- | libtommath/bn_mp_dr_reduce.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/libtommath/bn_mp_dr_reduce.c b/libtommath/bn_mp_dr_reduce.c index 8337591..2273c79 100644 --- a/libtommath/bn_mp_dr_reduce.c +++ b/libtommath/bn_mp_dr_reduce.c @@ -1,4 +1,4 @@ -#include <tommath.h> +#include <tommath_private.h> #ifdef BN_MP_DR_REDUCE_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -12,7 +12,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com + * Tom St Denis, tstdenis82@gmail.com, http://libtom.org */ /* reduce "x" in place modulo "n" using the Diminished Radix algorithm. @@ -40,7 +40,7 @@ mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k) m = n->used; /* ensure that "x" has at least 2m digits */ - if (x->alloc < m + m) { + if (x->alloc < (m + m)) { if ((err = mp_grow (x, m + m)) != MP_OKAY) { return err; } @@ -62,7 +62,7 @@ top: /* compute (x mod B**m) + k * [x/B**m] inline and inplace */ for (i = 0; i < m; i++) { - r = ((mp_word)*tmpx2++) * ((mp_word)k) + *tmpx1 + mu; + r = (((mp_word)*tmpx2++) * (mp_word)k) + *tmpx1 + mu; *tmpx1++ = (mp_digit)(r & MP_MASK); mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); } @@ -82,9 +82,15 @@ top: * Each successive "recursion" makes the input smaller and smaller. */ if (mp_cmp_mag (x, n) != MP_LT) { - s_mp_sub(x, n, x); + if ((err = s_mp_sub(x, n, x)) != MP_OKAY) { + return err; + } goto top; } return MP_OKAY; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ |