~ubuntu-branches/debian/lenny/dropbear/lenny

« back to all changes in this revision

Viewing changes to libtommath/bn_mp_sqr.c

  • Committer: Bazaar Package Importer
  • Author(s): Matt Johnston
  • Date: 2004-06-16 12:44:54 UTC
  • Revision ID: james.westby@ubuntu.com-20040616124454-1udcijfiroqczfpe
Tags: upstream-0.42
ImportĀ upstreamĀ versionĀ 0.42

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* LibTomMath, multiple-precision integer library -- Tom St Denis
 
2
 *
 
3
 * LibTomMath is a library that provides multiple-precision
 
4
 * integer arithmetic as well as number theoretic functionality.
 
5
 *
 
6
 * The library was designed directly after the MPI library by
 
7
 * Michael Fromberger but has been written from scratch with
 
8
 * additional optimizations in place.
 
9
 *
 
10
 * The library is free for all purposes without any express
 
11
 * guarantee it works.
 
12
 *
 
13
 * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org
 
14
 */
 
15
#include <tommath.h>
 
16
 
 
17
/* computes b = a*a */
 
18
int
 
19
mp_sqr (mp_int * a, mp_int * b)
 
20
{
 
21
  int     res;
 
22
#ifndef NO_LTM_TOOM
 
23
  /* use Toom-Cook? */
 
24
  if (a->used >= TOOM_SQR_CUTOFF) {
 
25
    res = mp_toom_sqr(a, b);
 
26
  } else
 
27
#endif
 
28
#ifndef NO_LTM_KARATSUBA
 
29
  /* Karatsuba? */
 
30
  if (a->used >= KARATSUBA_SQR_CUTOFF) {
 
31
    res = mp_karatsuba_sqr (a, b);
 
32
  } else 
 
33
#endif
 
34
  {
 
35
    /* can we use the fast comba multiplier? */
 
36
    if ((a->used * 2 + 1) < MP_WARRAY && 
 
37
         a->used < 
 
38
         (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) {
 
39
      res = fast_s_mp_sqr (a, b);
 
40
    } else {
 
41
      res = s_mp_sqr (a, b);
 
42
    }
 
43
  }
 
44
  b->sign = MP_ZPOS;
 
45
  return res;
 
46
}