Line data Source code
1 : #include <tommath.h>
2 : #ifdef BN_MP_REDUCE_IS_2K_L_C
3 : /* LibTomMath, multiple-precision integer library -- Tom St Denis
4 : *
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 : * The library is free for all purposes without any express
13 : * guarantee it works.
14 : *
15 : * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
16 : */
17 :
18 : /* determines if reduce_2k_l can be used */
19 872 : int mp_reduce_is_2k_l(mp_int *a)
20 : {
21 : int ix, iy;
22 :
23 872 : if (a->used == 0) {
24 0 : return MP_NO;
25 872 : } else if (a->used == 1) {
26 0 : return MP_YES;
27 872 : } else if (a->used > 1) {
28 : /* if more than half of the digits are -1 we're sold */
29 44314 : for (iy = ix = 0; ix < a->used; ix++) {
30 43474 : if (a->dp[ix] == MP_MASK) {
31 236 : ++iy;
32 : }
33 : }
34 872 : return (iy >= (a->used/2)) ? MP_YES : MP_NO;
35 :
36 : }
37 0 : return MP_NO;
38 : }
39 :
40 : #endif
41 :
42 : /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_is_2k_l.c,v $ */
43 : /* $Revision: 1.4 $ */
44 : /* $Date: 2006/12/28 01:25:13 $ */
|