diff options
author | Matt Johnston <matt@ucc.asn.au> | 2007-02-03 08:20:34 +0000 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2007-02-03 08:20:34 +0000 |
commit | d9aeb2773e236e662c8b493f4bcee978f9908d7c (patch) | |
tree | bac48e388bf3ac739ae14cdf98da0eb4bb9d17bf /libtommath/bn_mp_fread.c | |
parent | 056b92bd4c8a42ce1843493310d382159166edb8 (diff) | |
parent | c5fd7dd5548f28e32d846e39d17e5c4de4e769af (diff) |
merge of '5fdf69ca60d1683cdd9f4c2595134bed26394834'
and '6b61c50f4cf888bea302ac8fcf5dbb573b443251'
--HG--
extra : convert_revision : b1dd3b94e60a07a176dba2b035ac79968595990a
Diffstat (limited to 'libtommath/bn_mp_fread.c')
-rw-r--r-- | libtommath/bn_mp_fread.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/libtommath/bn_mp_fread.c b/libtommath/bn_mp_fread.c new file mode 100644 index 0000000..c3bd08d --- /dev/null +++ b/libtommath/bn_mp_fread.c @@ -0,0 +1,67 @@ +#include <tommath.h> +#ifdef BN_MP_FREAD_C +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com + */ + +/* read a bigint from a file stream in ASCII */ +int mp_fread(mp_int *a, int radix, FILE *stream) +{ + int err, ch, neg, y; + + /* clear a */ + mp_zero(a); + + /* if first digit is - then set negative */ + ch = fgetc(stream); + if (ch == '-') { + neg = MP_NEG; + ch = fgetc(stream); + } else { + neg = MP_ZPOS; + } + + for (;;) { + /* find y in the radix map */ + for (y = 0; y < radix; y++) { + if (mp_s_rmap[y] == ch) { + break; + } + } + if (y == radix) { + break; + } + + /* shift up and add */ + if ((err = mp_mul_d(a, radix, a)) != MP_OKAY) { + return err; + } + if ((err = mp_add_d(a, y, a)) != MP_OKAY) { + return err; + } + + ch = fgetc(stream); + } + if (mp_cmp_d(a, 0) != MP_EQ) { + a->sign = neg; + } + + return MP_OKAY; +} + +#endif + +/* $Source: /cvs/libtom/libtommath/bn_mp_fread.c,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2006/03/31 14:18:44 $ */ |