# public libtom /libtommath

### Subversion checkout URL

You can clone with HTTPS or Subversion.

Fetching contributors…

Cannot retrieve contributors at this time

file 51 lines (46 sloc) 1.474 kb
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 `/* LibTomMath, multiple-precision integer library -- Tom St Denis * * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * * The library is free for all purposes without any express * guarantee it works. * * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */#include /* high level multiplication (handles sign) */intmp_mul (mp_int * a, mp_int * b, mp_int * c){  int res, neg;  neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;  /* use Toom-Cook? */  if (MIN (a->used, b->used) >= TOOM_MUL_CUTOFF) {    res = mp_toom_mul(a, b, c);  /* use Karatsuba? */  } else if (MIN (a->used, b->used) >= KARATSUBA_MUL_CUTOFF) {    res = mp_karatsuba_mul (a, b, c);  } else {    /* can we use the fast multiplier? * * The fast multiplier can be used if the output will * have less than MP_WARRAY digits and the number of * digits won't affect carry propagation */    int digs = a->used + b->used + 1;    if ((digs < MP_WARRAY) &&        MIN(a->used, b->used) <=         (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) {      res = fast_s_mp_mul_digs (a, b, c, digs);    } else {      res = s_mp_mul (a, b, c);    }  }  c->sign = neg;  return res;}`
Something went wrong with that request. Please try again.