Diff
Not logged in

Differences From Artifact [8820fae0c1]:

To Artifact [194fcf6f1b]:


12
13
14
15
16
17
18
19
20

21
22

23
24
25
26
27
28





29
30
31
32
33
34





35
36
37
38
39




40
41
42
43
44
45
46
47
48
49









50
51
52
53
54
55
12
13
14
15
16
17
18


19
20

21
22





23
24
25
26
27
28





29
30
31
32
33
34




35
36
37
38
39









40
41
42
43
44
45
46
47
48
49
50
51
52
53
54







-
-
+

-
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
+
+
+
+
+

-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+






 * The library is free for all purposes without any express
 * guarantee it works.
 *
 * Tom St Denis, tstdenis82@gmail.com, http://libtom.org
 */

/* calc a value mod 2**b */
int
mp_mod_2d (mp_int * a, int b, mp_int * c)
int mp_mod_2d(mp_int *a, int b, mp_int *c)
{
  int     x, res;
   int     x, res;

  /* if b is <= 0 then zero the int */
  if (b <= 0) {
    mp_zero (c);
    return MP_OKAY;
  }
   /* if b is <= 0 then zero the int */
   if (b <= 0) {
      mp_zero(c);
      return MP_OKAY;
   }

  /* if the modulus is larger than the value than return */
  if (b >= (int) (a->used * DIGIT_BIT)) {
    res = mp_copy (a, c);
    return res;
  }
   /* if the modulus is larger than the value than return */
   if (b >= (int)(a->used * DIGIT_BIT)) {
      res = mp_copy(a, c);
      return res;
   }

  /* copy */
  if ((res = mp_copy (a, c)) != MP_OKAY) {
    return res;
  }
   /* copy */
   if ((res = mp_copy(a, c)) != MP_OKAY) {
      return res;
   }

  /* zero digits above the last digit of the modulus */
  for (x = (b / DIGIT_BIT) + (((b % DIGIT_BIT) == 0) ? 0 : 1); x < c->used; x++) {
    c->dp[x] = 0;
  }
  /* clear the digit that is not completely outside/inside the modulus */
  c->dp[b / DIGIT_BIT] &=
    (mp_digit) ((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1));
  mp_clamp (c);
  return MP_OKAY;
   /* zero digits above the last digit of the modulus */
   for (x = (b / DIGIT_BIT) + (((b % DIGIT_BIT) == 0) ? 0 : 1); x < c->used; x++) {
      c->dp[x] = 0;
   }
   /* clear the digit that is not completely outside/inside the modulus */
   c->dp[b / DIGIT_BIT] &=
      (mp_digit)((((mp_digit) 1) << (((mp_digit) b) % DIGIT_BIT)) - ((mp_digit) 1));
   mp_clamp(c);
   return MP_OKAY;
}
#endif

/* ref:         $Format:%D$ */
/* git commit:  $Format:%H$ */
/* commit time: $Format:%ai$ */