1 /* TomsFastMath, a fast ISO C bignum library. 2 * 3 * This project is meant to fill in where LibTomMath 4 * falls short. That is speed ;-) 5 * 6 * This project is public domain and free for all purposes. 7 * 8 * Tom St Denis, tomstdenis@gmail.com 9 */ 10 #include "bignum_fast.h" 11 12 /* c = a mod 2**d */ fp_mod_2d(fp_int * a,int b,fp_int * c)13void fp_mod_2d(fp_int *a, int b, fp_int *c) 14 { 15 int x; 16 17 /* zero if count less than or equal to zero */ 18 if (b <= 0) { 19 fp_zero(c); 20 return; 21 } 22 23 /* get copy of input */ 24 fp_copy(a, c); 25 26 /* if 2**d is larger than we just return */ 27 if (b >= (DIGIT_BIT * a->used)) { 28 return; 29 } 30 31 /* zero digits above the last digit of the modulus */ 32 for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) { 33 c->dp[x] = 0; 34 } 35 /* clear the digit that is not completely outside/inside the modulus */ 36 c->dp[b / DIGIT_BIT] &= ~((fp_digit)0) >> (DIGIT_BIT - b); 37 fp_clamp (c); 38 } 39 40 /* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_mod_2d.c,v $ */ 41 /* $Revision: 1.1 $ */ 42 /* $Date: 2006/12/31 21:25:53 $ */ 43