Mercurial > dropbear
comparison libtommath/bn_mp_mod.c @ 1436:60fc6476e044
Update to libtommath v1.0
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Sat, 24 Jun 2017 22:37:14 +0800 |
parents | 4fbf9a7556ed |
children | 8bba51a55704 |
comparison
equal
deleted
inserted
replaced
1435:f849a5ca2efc | 1436:60fc6476e044 |
---|---|
1 #include <tommath.h> | 1 #include <tommath_private.h> |
2 #ifdef BN_MP_MOD_C | 2 #ifdef BN_MP_MOD_C |
3 /* LibTomMath, multiple-precision integer library -- Tom St Denis | 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis |
4 * | 4 * |
5 * LibTomMath is a library that provides multiple-precision | 5 * LibTomMath is a library that provides multiple-precision |
6 * integer arithmetic as well as number theoretic functionality. | 6 * integer arithmetic as well as number theoretic functionality. |
10 * additional optimizations in place. | 10 * additional optimizations in place. |
11 * | 11 * |
12 * The library is free for all purposes without any express | 12 * The library is free for all purposes without any express |
13 * guarantee it works. | 13 * guarantee it works. |
14 * | 14 * |
15 * Tom St Denis, [email protected], http://math.libtomcrypt.com | 15 * Tom St Denis, [email protected], http://libtom.org |
16 */ | 16 */ |
17 | 17 |
18 /* c = a mod b, 0 <= c < b */ | 18 /* c = a mod b, 0 <= c < b if b > 0, b < c <= 0 if b < 0 */ |
19 int | 19 int |
20 mp_mod (mp_int * a, mp_int * b, mp_int * c) | 20 mp_mod (mp_int * a, mp_int * b, mp_int * c) |
21 { | 21 { |
22 mp_int t; | 22 mp_int t; |
23 int res; | 23 int res; |
29 if ((res = mp_div (a, b, NULL, &t)) != MP_OKAY) { | 29 if ((res = mp_div (a, b, NULL, &t)) != MP_OKAY) { |
30 mp_clear (&t); | 30 mp_clear (&t); |
31 return res; | 31 return res; |
32 } | 32 } |
33 | 33 |
34 if (t.sign != b->sign) { | 34 if ((mp_iszero(&t) != MP_NO) || (t.sign == b->sign)) { |
35 res = mp_add (b, &t, c); | |
36 } else { | |
37 res = MP_OKAY; | 35 res = MP_OKAY; |
38 mp_exch (&t, c); | 36 mp_exch (&t, c); |
37 } else { | |
38 res = mp_add (b, &t, c); | |
39 } | 39 } |
40 | 40 |
41 mp_clear (&t); | 41 mp_clear (&t); |
42 return res; | 42 return res; |
43 } | 43 } |
44 #endif | 44 #endif |
45 | 45 |
46 /* $Source: /cvs/libtom/libtommath/bn_mp_mod.c,v $ */ | 46 /* $Source$ */ |
47 /* $Revision: 1.3 $ */ | 47 /* $Revision$ */ |
48 /* $Date: 2006/03/31 14:18:44 $ */ | 48 /* $Date$ */ |