Mercurial > dropbear
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 |