comparison bn_mp_div_d.c @ 142:d29b64170cf0 libtommath-orig

import of libtommath 0.32
author Matt Johnston <matt@ucc.asn.au>
date Sun, 19 Dec 2004 11:33:56 +0000
parents 86e0b50a9b58
children
comparison
equal deleted inserted replaced
19:e1037a1e12e7 142:d29b64170cf0
1 #include <tommath.h>
2 #ifdef BN_MP_DIV_D_C
1 /* LibTomMath, multiple-precision integer library -- Tom St Denis 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis
2 * 4 *
3 * LibTomMath is a library that provides multiple-precision 5 * LibTomMath is a library that provides multiple-precision
4 * integer arithmetic as well as number theoretic functionality. 6 * integer arithmetic as well as number theoretic functionality.
5 * 7 *
10 * The library is free for all purposes without any express 12 * The library is free for all purposes without any express
11 * guarantee it works. 13 * guarantee it works.
12 * 14 *
13 * Tom St Denis, [email protected], http://math.libtomcrypt.org 15 * Tom St Denis, [email protected], http://math.libtomcrypt.org
14 */ 16 */
15 #include <tommath.h>
16 17
17 static int s_is_power_of_two(mp_digit b, int *p) 18 static int s_is_power_of_two(mp_digit b, int *p)
18 { 19 {
19 int x; 20 int x;
20 21
52 } 53 }
53 54
54 /* power of two ? */ 55 /* power of two ? */
55 if (s_is_power_of_two(b, &ix) == 1) { 56 if (s_is_power_of_two(b, &ix) == 1) {
56 if (d != NULL) { 57 if (d != NULL) {
57 *d = a->dp[0] & ((1<<ix) - 1); 58 *d = a->dp[0] & ((((mp_digit)1)<<ix) - 1);
58 } 59 }
59 if (c != NULL) { 60 if (c != NULL) {
60 return mp_div_2d(a, ix, c, NULL); 61 return mp_div_2d(a, ix, c, NULL);
61 } 62 }
62 return MP_OKAY; 63 return MP_OKAY;
63 } 64 }
64 65
66 #ifdef BN_MP_DIV_3_C
65 /* three? */ 67 /* three? */
66 if (b == 3) { 68 if (b == 3) {
67 return mp_div_3(a, c, d); 69 return mp_div_3(a, c, d);
68 } 70 }
71 #endif
69 72
70 /* no easy answer [c'est la vie]. Just division */ 73 /* no easy answer [c'est la vie]. Just division */
71 if ((res = mp_init_size(&q, a->used)) != MP_OKAY) { 74 if ((res = mp_init_size(&q, a->used)) != MP_OKAY) {
72 return res; 75 return res;
73 } 76 }
98 mp_clear(&q); 101 mp_clear(&q);
99 102
100 return res; 103 return res;
101 } 104 }
102 105
106 #endif