X-Git-Url: http://git.rot13.org/?p=bcm963xx.git;a=blobdiff_plain;f=userapps%2Fopensource%2Fsshd%2Flibtommath%2Fbn_s_mp_sqr.c;h=9cdb563ace36da162c54ae07ff9f394150419ec7;hp=bd4bc51fd1e0f06a0be442f022a73d1fe64edf82;hb=57a096f051259ceaefd5977f30d269884e1dd248;hpb=a69849c98808437716b821267cd97529c56f45b0 diff --git a/userapps/opensource/sshd/libtommath/bn_s_mp_sqr.c b/userapps/opensource/sshd/libtommath/bn_s_mp_sqr.c index bd4bc51f..9cdb563a 100755 --- a/userapps/opensource/sshd/libtommath/bn_s_mp_sqr.c +++ b/userapps/opensource/sshd/libtommath/bn_s_mp_sqr.c @@ -1,9 +1,11 @@ +#include +#ifdef BN_S_MP_SQR_C /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -12,11 +14,9 @@ * * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ -#include /* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */ -int -s_mp_sqr (mp_int * a, mp_int * b) +int s_mp_sqr (mp_int * a, mp_int * b) { mp_int t; int res, ix, iy, pa; @@ -27,46 +27,48 @@ s_mp_sqr (mp_int * a, mp_int * b) if ((res = mp_init_size (&t, 2*pa + 1)) != MP_OKAY) { return res; } + + /* default used is maximum possible size */ t.used = 2*pa + 1; for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ - r = ((mp_word) t.dp[2*ix]) + - ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + r = ((mp_word) t.dp[2*ix]) + + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); /* store lower part in result */ - t.dp[2*ix] = (mp_digit) (r & ((mp_word) MP_MASK)); + t.dp[ix+ix] = (mp_digit) (r & ((mp_word) MP_MASK)); /* get the carry */ - u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); /* left hand side of A[ix] * A[iy] */ - tmpx = a->dp[ix]; + tmpx = a->dp[ix]; /* alias for where to store the results */ - tmpt = t.dp + (2*ix + 1); + tmpt = t.dp + (2*ix + 1); for (iy = ix + 1; iy < pa; iy++) { /* first calculate the product */ - r = ((mp_word) tmpx) * ((mp_word) a->dp[iy]); + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); /* now calculate the double precision result, note we use * addition instead of *2 since it's easier to optimize */ - r = ((mp_word) * tmpt) + r + r + ((mp_word) u); + r = ((mp_word) *tmpt) + r + r + ((mp_word) u); /* store lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); /* get carry */ - u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); } /* propagate upwards */ while (u != ((mp_digit) 0)) { - r = ((mp_word) * tmpt) + ((mp_word) u); + r = ((mp_word) *tmpt) + ((mp_word) u); *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); - u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); } } @@ -75,3 +77,4 @@ s_mp_sqr (mp_int * a, mp_int * b) mp_clear (&t); return MP_OKAY; } +#endif