diff options
Diffstat (limited to 'libtommath/bn_mp_count_bits.c')
-rw-r--r-- | libtommath/bn_mp_count_bits.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libtommath/bn_mp_count_bits.c b/libtommath/bn_mp_count_bits.c new file mode 100644 index 0000000..f3f85ac --- /dev/null +++ b/libtommath/bn_mp_count_bits.c @@ -0,0 +1,41 @@ +#include <tommath.h> +#ifdef BN_MP_COUNT_BITS_C +/* 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. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ + +/* returns the number of bits in an int */ +int +mp_count_bits (mp_int * a) +{ + int r; + mp_digit q; + + /* shortcut */ + if (a->used == 0) { + return 0; + } + + /* get number of digits and add that */ + r = (a->used - 1) * DIGIT_BIT; + + /* take the last digit and count the bits in it */ + q = a->dp[a->used - 1]; + while (q > ((mp_digit) 0)) { + ++r; + q >>= ((mp_digit) 1); + } + return r; +} +#endif |