diff options
Diffstat (limited to 'libtommath/bn_mp_get_int.c')
-rw-r--r-- | libtommath/bn_mp_get_int.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/libtommath/bn_mp_get_int.c b/libtommath/bn_mp_get_int.c index 762cb23..4f99363 100644 --- a/libtommath/bn_mp_get_int.c +++ b/libtommath/bn_mp_get_int.c @@ -1,4 +1,4 @@ -#include <tommath.h> +#include "tommath_private.h" #ifdef BN_MP_GET_INT_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -11,31 +11,33 @@ * * The library is free for all purposes without any express * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com */ /* get the lower 32-bits of an mp_int */ -unsigned long mp_get_int(mp_int * a) +unsigned long mp_get_int(const mp_int *a) { - int i; - unsigned long res; + int i; + mp_min_u32 res; + + if (a->used == 0) { + return 0; + } - if (a->used == 0) { - return 0; - } + /* get number of digits of the lsb we have to read */ + i = MIN(a->used, ((((int)sizeof(unsigned long) * CHAR_BIT) + DIGIT_BIT - 1) / DIGIT_BIT)) - 1; - /* get number of digits of the lsb we have to read */ - i = MIN(a->used,(int)((sizeof(unsigned long)*CHAR_BIT+DIGIT_BIT-1)/DIGIT_BIT))-1; + /* get most significant digit of result */ + res = DIGIT(a, i); - /* get most significant digit of result */ - res = DIGIT(a,i); - - while (--i >= 0) { - res = (res << DIGIT_BIT) | DIGIT(a,i); - } + while (--i >= 0) { + res = (res << DIGIT_BIT) | DIGIT(a, i); + } - /* force result to 32-bits always so it is consistent on non 32-bit platforms */ - return res & 0xFFFFFFFFUL; + /* force result to 32-bits always so it is consistent on non 32-bit platforms */ + return res & 0xFFFFFFFFUL; } #endif + +/* ref: $Format:%D$ */ +/* git commit: $Format:%H$ */ +/* commit time: $Format:%ai$ */ |