Line data Source code
1 : #include "tommath_private.h" 2 : #ifdef BN_S_MP_GET_BIT_C 3 : 4 : /* LibTomMath, multiple-precision integer library -- Tom St Denis */ 5 : /* SPDX-License-Identifier: Unlicense */ 6 : 7 : /* Get bit at position b and return MP_YES if the bit is 1, MP_NO if it is 0 */ 8 0 : mp_bool s_mp_get_bit(const mp_int *a, unsigned int b) 9 : { 10 0 : mp_digit bit; 11 0 : int limb = (int)(b / MP_DIGIT_BIT); 12 : 13 0 : if (limb >= a->used) { 14 0 : return MP_NO; 15 : } 16 : 17 0 : bit = (mp_digit)1 << (b % MP_DIGIT_BIT); 18 0 : return ((a->dp[limb] & bit) != 0u) ? MP_YES : MP_NO; 19 : } 20 : 21 : #endif