Line data Source code
1 : #include "tommath_private.h" 2 : #ifdef BN_MP_COUNT_BITS_C 3 : /* LibTomMath, multiple-precision integer library -- Tom St Denis */ 4 : /* SPDX-License-Identifier: Unlicense */ 5 : 6 : /* returns the number of bits in an int */ 7 5712 : int mp_count_bits(const mp_int *a) 8 : { 9 210 : int r; 10 210 : mp_digit q; 11 : 12 : /* shortcut */ 13 5712 : if (MP_IS_ZERO(a)) { 14 0 : return 0; 15 : } 16 : 17 : /* get number of digits and add that */ 18 5712 : r = (a->used - 1) * MP_DIGIT_BIT; 19 : 20 : /* take the last digit and count the bits in it */ 21 5712 : q = a->dp[a->used - 1]; 22 78372 : while (q > 0u) { 23 72660 : ++r; 24 72660 : q >>= 1u; 25 : } 26 5502 : return r; 27 : } 28 : #endif