1 #include <tommath.h> 2 #ifdef BN_MP_FREAD_C 3 /* LibTomMath, multiple-precision integer library -- Tom St Denis 4 * 5 * LibTomMath is a library that provides multiple-precision 6 * integer arithmetic as well as number theoretic functionality. 7 * 8 * The library was designed directly after the MPI library by 9 * Michael Fromberger but has been written from scratch with 10 * additional optimizations in place. 11 * 12 * The library is free for all purposes without any express 13 * guarantee it works. 14 * 15 * Tom St Denis, tomstdenis (at) gmail.com, http://math.libtomcrypt.com 16 */ 17 18 /* read a bigint from a file stream in ASCII */ 19 int mp_fread(mp_int *a, int radix, FILE *stream) 20 { 21 int err, ch, neg, y; 22 23 /* clear a */ 24 mp_zero(a); 25 26 /* if first digit is - then set negative */ 27 ch = fgetc(stream); 28 if (ch == '-') { 29 neg = MP_NEG; 30 ch = fgetc(stream); 31 } else { 32 neg = MP_ZPOS; 33 } 34 35 for (;;) { 36 /* find y in the radix map */ 37 for (y = 0; y < radix; y++) { 38 if (mp_s_rmap[y] == ch) { 39 break; 40 } 41 } 42 if (y == radix) { 43 break; 44 } 45 46 /* shift up and add */ 47 if ((err = mp_mul_d(a, radix, a)) != MP_OKAY) { 48 return err; 49 } 50 if ((err = mp_add_d(a, y, a)) != MP_OKAY) { 51 return err; 52 } 53 54 ch = fgetc(stream); 55 } 56 if (mp_cmp_d(a, 0) != MP_EQ) { 57 a->sign = neg; 58 } 59 60 return MP_OKAY; 61 } 62 63 #endif 64 65 /* $Source: /cvs/libtom/libtommath/bn_mp_fread.c,v $ */ 66 /* $Revision: 1.3 $ */ 67 /* $Date: 2006/03/31 14:18:44 $ */ 68