bn_mp_count_bits.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <tommath.h>
  2. #ifdef BN_MP_COUNT_BITS_C
  3. /* LibTomMath, multiple-precision integer library -- Tom St Denis
  4. *
  5. * LibTomMath is a library that provides multiple-precision
  6. * integer arithmetic as well as number theoretic functionality.
  7. *
  8. * The library was designed directly after the MPI library by
  9. * Michael Fromberger but has been written from scratch with
  10. * additional optimizations in place.
  11. *
  12. * The library is free for all purposes without any express
  13. * guarantee it works.
  14. *
  15. * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com
  16. */
  17. /* returns the number of bits in an int */
  18. int
  19. mp_count_bits (mp_int * a)
  20. {
  21. int r;
  22. mp_digit q;
  23. /* shortcut */
  24. if (a->used == 0) {
  25. return 0;
  26. }
  27. /* get number of digits and add that */
  28. r = (a->used - 1) * DIGIT_BIT;
  29. /* take the last digit and count the bits in it */
  30. q = a->dp[a->used - 1];
  31. while (q > ((mp_digit) 0)) {
  32. ++r;
  33. q >>= ((mp_digit) 1);
  34. }
  35. return r;
  36. }
  37. #endif
  38. /* $Source: /cvs/libtom/libtommath/bn_mp_count_bits.c,v $ */
  39. /* $Revision: 1.3 $ */
  40. /* $Date: 2006/03/31 14:18:44 $ */