### comparison libtommath/bn_mp_mod.c @ 1436:60fc6476e044

Update to libtommath v1.0
author Matt Johnston Sat, 24 Jun 2017 22:37:14 +0800 4fbf9a7556ed 8bba51a55704
comparison
equal 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\$ */