Donatien Garnier / MiniTLS-GPL

Dependents:   MiniTLS-HTTPS-Example

Committer:
MiniTLS
Date:
Fri Jun 06 10:49:02 2014 +0000
Revision:
0:35aa5be3b78d
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MiniTLS 0:35aa5be3b78d 1 /* TomsFastMath, a fast ISO C bignum library.
MiniTLS 0:35aa5be3b78d 2 *
MiniTLS 0:35aa5be3b78d 3 * This project is meant to fill in where LibTomMath
MiniTLS 0:35aa5be3b78d 4 * falls short. That is speed ;-)
MiniTLS 0:35aa5be3b78d 5 *
MiniTLS 0:35aa5be3b78d 6 * This project is public domain and free for all purposes.
MiniTLS 0:35aa5be3b78d 7 *
MiniTLS 0:35aa5be3b78d 8 * Tom St Denis, tomstdenis@gmail.com
MiniTLS 0:35aa5be3b78d 9 */
MiniTLS 0:35aa5be3b78d 10 #include <tfm.h>
MiniTLS 0:35aa5be3b78d 11
MiniTLS 0:35aa5be3b78d 12 void fp_mul_2(fp_int * a, fp_int * b)
MiniTLS 0:35aa5be3b78d 13 {
MiniTLS 0:35aa5be3b78d 14 int x, oldused;
MiniTLS 0:35aa5be3b78d 15
MiniTLS 0:35aa5be3b78d 16 oldused = b->used;
MiniTLS 0:35aa5be3b78d 17 b->used = a->used;
MiniTLS 0:35aa5be3b78d 18
MiniTLS 0:35aa5be3b78d 19 {
MiniTLS 0:35aa5be3b78d 20 register fp_digit r, rr, *tmpa, *tmpb;
MiniTLS 0:35aa5be3b78d 21
MiniTLS 0:35aa5be3b78d 22 /* alias for source */
MiniTLS 0:35aa5be3b78d 23 tmpa = a->dp;
MiniTLS 0:35aa5be3b78d 24
MiniTLS 0:35aa5be3b78d 25 /* alias for dest */
MiniTLS 0:35aa5be3b78d 26 tmpb = b->dp;
MiniTLS 0:35aa5be3b78d 27
MiniTLS 0:35aa5be3b78d 28 /* carry */
MiniTLS 0:35aa5be3b78d 29 r = 0;
MiniTLS 0:35aa5be3b78d 30 for (x = 0; x < a->used; x++) {
MiniTLS 0:35aa5be3b78d 31
MiniTLS 0:35aa5be3b78d 32 /* get what will be the *next* carry bit from the
MiniTLS 0:35aa5be3b78d 33 * MSB of the current digit
MiniTLS 0:35aa5be3b78d 34 */
MiniTLS 0:35aa5be3b78d 35 rr = *tmpa >> ((fp_digit)(DIGIT_BIT - 1));
MiniTLS 0:35aa5be3b78d 36
MiniTLS 0:35aa5be3b78d 37 /* now shift up this digit, add in the carry [from the previous] */
MiniTLS 0:35aa5be3b78d 38 *tmpb++ = ((*tmpa++ << ((fp_digit)1)) | r);
MiniTLS 0:35aa5be3b78d 39
MiniTLS 0:35aa5be3b78d 40 /* copy the carry that would be from the source
MiniTLS 0:35aa5be3b78d 41 * digit into the next iteration
MiniTLS 0:35aa5be3b78d 42 */
MiniTLS 0:35aa5be3b78d 43 r = rr;
MiniTLS 0:35aa5be3b78d 44 }
MiniTLS 0:35aa5be3b78d 45
MiniTLS 0:35aa5be3b78d 46 /* new leading digit? */
MiniTLS 0:35aa5be3b78d 47 if (r != 0 && b->used != (FP_SIZE-1)) {
MiniTLS 0:35aa5be3b78d 48 /* add a MSB which is always 1 at this point */
MiniTLS 0:35aa5be3b78d 49 *tmpb = 1;
MiniTLS 0:35aa5be3b78d 50 ++(b->used);
MiniTLS 0:35aa5be3b78d 51 }
MiniTLS 0:35aa5be3b78d 52
MiniTLS 0:35aa5be3b78d 53 /* now zero any excess digits on the destination
MiniTLS 0:35aa5be3b78d 54 * that we didn't write to
MiniTLS 0:35aa5be3b78d 55 */
MiniTLS 0:35aa5be3b78d 56 tmpb = b->dp + b->used;
MiniTLS 0:35aa5be3b78d 57 for (x = b->used; x < oldused; x++) {
MiniTLS 0:35aa5be3b78d 58 *tmpb++ = 0;
MiniTLS 0:35aa5be3b78d 59 }
MiniTLS 0:35aa5be3b78d 60 }
MiniTLS 0:35aa5be3b78d 61 b->sign = a->sign;
MiniTLS 0:35aa5be3b78d 62 }
MiniTLS 0:35aa5be3b78d 63
MiniTLS 0:35aa5be3b78d 64
MiniTLS 0:35aa5be3b78d 65 /* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul_2.c,v $ */
MiniTLS 0:35aa5be3b78d 66 /* $Revision: 1.1 $ */
MiniTLS 0:35aa5be3b78d 67 /* $Date: 2006/12/31 21:25:53 $ */