Merge pull request #578 from PX4/fix_mp_prime_strong_lucas_lefridge_compilation
[libtommath.git] / mp_reduce_2k_setup.c
blob51f884134c92e6b974d238571356afef3ae8127d
1 #include "tommath_private.h"
2 #ifdef MP_REDUCE_2K_SETUP_C
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis */
4 /* SPDX-License-Identifier: Unlicense */
6 /* determines the setup value */
7 mp_err mp_reduce_2k_setup(const mp_int *a, mp_digit *d)
9 mp_err err;
10 mp_int tmp;
12 if ((err = mp_init(&tmp)) != MP_OKAY) {
13 return err;
16 if ((err = mp_2expt(&tmp, mp_count_bits(a))) != MP_OKAY) {
17 goto LBL_ERR;
20 if ((err = s_mp_sub(&tmp, a, &tmp)) != MP_OKAY) {
21 goto LBL_ERR;
24 *d = tmp.dp[0];
26 LBL_ERR:
27 mp_clear(&tmp);
28 return err;
30 #endif