diff options
Diffstat (limited to 'third_party/heimdal/lib/hcrypto/libtommath/bn_mp_count_bits.c')
-rw-r--r-- | third_party/heimdal/lib/hcrypto/libtommath/bn_mp_count_bits.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/third_party/heimdal/lib/hcrypto/libtommath/bn_mp_count_bits.c b/third_party/heimdal/lib/hcrypto/libtommath/bn_mp_count_bits.c new file mode 100644 index 00000000000..b7c2cad101d --- /dev/null +++ b/third_party/heimdal/lib/hcrypto/libtommath/bn_mp_count_bits.c @@ -0,0 +1,28 @@ +#include "tommath_private.h" +#ifdef BN_MP_COUNT_BITS_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis */ +/* SPDX-License-Identifier: Unlicense */ + +/* returns the number of bits in an int */ +int mp_count_bits(const mp_int *a) +{ + int r; + mp_digit q; + + /* shortcut */ + if (MP_IS_ZERO(a)) { + return 0; + } + + /* get number of digits and add that */ + r = (a->used - 1) * MP_DIGIT_BIT; + + /* take the last digit and count the bits in it */ + q = a->dp[a->used - 1]; + while (q > 0u) { + ++r; + q >>= 1u; + } + return r; +} +#endif |