/src/dropbear/libtommath/bn_mp_reduce_2k_setup.c
Line | Count | Source (jump to first uncovered line) |
1 | | #include "tommath_private.h" |
2 | | #ifdef BN_MP_REDUCE_2K_SETUP_C |
3 | | /* LibTomMath, multiple-precision integer library -- Tom St Denis */ |
4 | | /* SPDX-License-Identifier: Unlicense */ |
5 | | |
6 | | /* determines the setup value */ |
7 | | mp_err mp_reduce_2k_setup(const mp_int *a, mp_digit *d) |
8 | 0 | { |
9 | 0 | mp_err err; |
10 | 0 | mp_int tmp; |
11 | 0 | int p; |
12 | |
|
13 | 0 | if ((err = mp_init(&tmp)) != MP_OKAY) { |
14 | 0 | return err; |
15 | 0 | } |
16 | | |
17 | 0 | p = mp_count_bits(a); |
18 | 0 | if ((err = mp_2expt(&tmp, p)) != MP_OKAY) { |
19 | 0 | mp_clear(&tmp); |
20 | 0 | return err; |
21 | 0 | } |
22 | | |
23 | 0 | if ((err = s_mp_sub(&tmp, a, &tmp)) != MP_OKAY) { |
24 | 0 | mp_clear(&tmp); |
25 | 0 | return err; |
26 | 0 | } |
27 | | |
28 | 0 | *d = tmp.dp[0]; |
29 | 0 | mp_clear(&tmp); |
30 | 0 | return MP_OKAY; |
31 | 0 | } |
32 | | #endif |