Mercurial > dropbear
comparison bn_mp_sqr.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 | a96ff234ff19 |
comparison
equal
deleted
inserted
replaced
19:e1037a1e12e7 | 142:d29b64170cf0 |
---|---|
1 #include <tommath.h> | |
2 #ifdef BN_MP_SQR_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 /* computes b = a*a */ | 18 /* computes b = a*a */ |
18 int | 19 int |
19 mp_sqr (mp_int * a, mp_int * b) | 20 mp_sqr (mp_int * a, mp_int * b) |
20 { | 21 { |
21 int res; | 22 int res; |
22 | 23 |
24 #ifdef BN_MP_TOOM_SQR_C | |
23 /* use Toom-Cook? */ | 25 /* use Toom-Cook? */ |
24 if (a->used >= TOOM_SQR_CUTOFF) { | 26 if (a->used >= TOOM_SQR_CUTOFF) { |
25 res = mp_toom_sqr(a, b); | 27 res = mp_toom_sqr(a, b); |
26 /* Karatsuba? */ | 28 /* Karatsuba? */ |
27 } else if (a->used >= KARATSUBA_SQR_CUTOFF) { | 29 } else |
30 #endif | |
31 #ifdef BN_MP_KARATSUBA_SQR_C | |
32 if (a->used >= KARATSUBA_SQR_CUTOFF) { | |
28 res = mp_karatsuba_sqr (a, b); | 33 res = mp_karatsuba_sqr (a, b); |
29 } else { | 34 } else |
35 #endif | |
36 { | |
37 #ifdef BN_FAST_S_MP_SQR_C | |
30 /* can we use the fast comba multiplier? */ | 38 /* can we use the fast comba multiplier? */ |
31 if ((a->used * 2 + 1) < MP_WARRAY && | 39 if ((a->used * 2 + 1) < MP_WARRAY && |
32 a->used < | 40 a->used < |
33 (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) { | 41 (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) { |
34 res = fast_s_mp_sqr (a, b); | 42 res = fast_s_mp_sqr (a, b); |
35 } else { | 43 } else |
44 #endif | |
45 #ifdef BN_S_MP_SQR_C | |
36 res = s_mp_sqr (a, b); | 46 res = s_mp_sqr (a, b); |
37 } | 47 #else |
48 res = MP_VAL; | |
49 #endif | |
38 } | 50 } |
39 b->sign = MP_ZPOS; | 51 b->sign = MP_ZPOS; |
40 return res; | 52 return res; |
41 } | 53 } |
54 #endif |