Home | History | Annotate | Line # | Download | only in libtommath
      1 /*	$NetBSD: bn_mp_sqr.c,v 1.2 2017/01/28 21:31:47 christos Exp $	*/
      2 
      3 #include <tommath.h>
      4 #ifdef BN_MP_SQR_C
      5 /* LibTomMath, multiple-precision integer library -- Tom St Denis
      6  *
      7  * LibTomMath is a library that provides multiple-precision
      8  * integer arithmetic as well as number theoretic functionality.
      9  *
     10  * The library was designed directly after the MPI library by
     11  * Michael Fromberger but has been written from scratch with
     12  * additional optimizations in place.
     13  *
     14  * The library is free for all purposes without any express
     15  * guarantee it works.
     16  *
     17  * Tom St Denis, tomstdenis (at) gmail.com, http://libtom.org
     18  */
     19 
     20 /* computes b = a*a */
     21 int
     22 mp_sqr (mp_int * a, mp_int * b)
     23 {
     24   int     res;
     25 
     26 #ifdef BN_MP_TOOM_SQR_C
     27   /* use Toom-Cook? */
     28   if (a->used >= TOOM_SQR_CUTOFF) {
     29     res = mp_toom_sqr(a, b);
     30   /* Karatsuba? */
     31   } else
     32 #endif
     33 #ifdef BN_MP_KARATSUBA_SQR_C
     34 if (a->used >= KARATSUBA_SQR_CUTOFF) {
     35     res = mp_karatsuba_sqr (a, b);
     36   } else
     37 #endif
     38   {
     39 #ifdef BN_FAST_S_MP_SQR_C
     40     /* can we use the fast comba multiplier? */
     41     if ((a->used * 2 + 1) < MP_WARRAY &&
     42          a->used <
     43          (1 << (sizeof(mp_word) * CHAR_BIT - 2*DIGIT_BIT - 1))) {
     44       res = fast_s_mp_sqr (a, b);
     45     } else
     46 #endif
     47 #ifdef BN_S_MP_SQR_C
     48       res = s_mp_sqr (a, b);
     49 #else
     50       res = MP_VAL;
     51 #endif
     52   }
     53   b->sign = MP_ZPOS;
     54   return res;
     55 }
     56 #endif
     57 
     58 /* Source: /cvs/libtom/libtommath/bn_mp_sqr.c,v  */
     59 /* Revision: 1.4  */
     60 /* Date: 2006/12/28 01:25:13  */
     61