/src/dropbear/libtommath/bn_mp_count_bits.c
Line | Count | Source (jump to first uncovered line) |
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 | | int mp_count_bits(const mp_int *a) |
8 | 124 | { |
9 | 124 | int r; |
10 | 124 | mp_digit q; |
11 | | |
12 | | /* shortcut */ |
13 | 124 | if (MP_IS_ZERO(a)) { |
14 | 0 | return 0; |
15 | 0 | } |
16 | | |
17 | | /* get number of digits and add that */ |
18 | 124 | r = (a->used - 1) * MP_DIGIT_BIT; |
19 | | |
20 | | /* take the last digit and count the bits in it */ |
21 | 124 | q = a->dp[a->used - 1]; |
22 | 4.28k | while (q > 0u) { |
23 | 4.15k | ++r; |
24 | 4.15k | q >>= 1u; |
25 | 4.15k | } |
26 | 124 | return r; |
27 | 124 | } |
28 | | #endif |