comparison libtommath/bn_mp_reduce_is_2k.c @ 1692:1051e4eea25a

Update LibTomMath to 1.2.0 (#84) * update C files * update other files * update headers * update makefiles * remove mp_set/get_double() * use ltm 1.2.0 API * update ltm_desc * use bundled tommath if system-tommath is too old * XMALLOC etc. were changed to MP_MALLOC etc.
author Steffen Jaeckel <s@jaeckel.eu>
date Tue, 26 May 2020 17:36:47 +0200
parents f52919ffd3b1
children
comparison
equal deleted inserted replaced
1691:2d3745d58843 1692:1051e4eea25a
1 #include "tommath_private.h" 1 #include "tommath_private.h"
2 #ifdef BN_MP_REDUCE_IS_2K_C 2 #ifdef BN_MP_REDUCE_IS_2K_C
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis */
4 * 4 /* SPDX-License-Identifier: Unlicense */
5 * LibTomMath is a library that provides multiple-precision
6 * integer arithmetic as well as number theoretic functionality.
7 *
8 * The library was designed directly after the MPI library by
9 * Michael Fromberger but has been written from scratch with
10 * additional optimizations in place.
11 *
12 * SPDX-License-Identifier: Unlicense
13 */
14 5
15 /* determines if mp_reduce_2k can be used */ 6 /* determines if mp_reduce_2k can be used */
16 int mp_reduce_is_2k(const mp_int *a) 7 mp_bool mp_reduce_is_2k(const mp_int *a)
17 { 8 {
18 int ix, iy, iw; 9 int ix, iy, iw;
19 mp_digit iz; 10 mp_digit iz;
20 11
21 if (a->used == 0) { 12 if (a->used == 0) {
26 iy = mp_count_bits(a); 17 iy = mp_count_bits(a);
27 iz = 1; 18 iz = 1;
28 iw = 1; 19 iw = 1;
29 20
30 /* Test every bit from the second digit up, must be 1 */ 21 /* Test every bit from the second digit up, must be 1 */
31 for (ix = DIGIT_BIT; ix < iy; ix++) { 22 for (ix = MP_DIGIT_BIT; ix < iy; ix++) {
32 if ((a->dp[iw] & iz) == 0u) { 23 if ((a->dp[iw] & iz) == 0u) {
33 return MP_NO; 24 return MP_NO;
34 } 25 }
35 iz <<= 1; 26 iz <<= 1;
36 if (iz > (mp_digit)MP_MASK) { 27 if (iz > MP_DIGIT_MAX) {
37 ++iw; 28 ++iw;
38 iz = 1; 29 iz = 1;
39 } 30 }
40 } 31 }
32 return MP_YES;
33 } else {
34 return MP_YES;
41 } 35 }
42 return MP_YES;
43 } 36 }
44 37
45 #endif 38 #endif
46
47 /* ref: HEAD -> master, tag: v1.1.0 */
48 /* git commit: 08549ad6bc8b0cede0b357a9c341c5c6473a9c55 */
49 /* commit time: 2019-01-28 20:32:32 +0100 */