1 #include <tommath.h> 2 #ifdef BN_MP_INIT_MULTI_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 #include <stdarg.h> 18 19 int mp_init_multi(mp_int *mp, ...) 20 { 21 mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ 22 int n = 0; /* Number of ok inits */ 23 mp_int* cur_arg = mp; 24 va_list args; 25 26 va_start(args, mp); /* init args to next argument from caller */ 27 while (cur_arg != NULL) { 28 if (mp_init(cur_arg) != MP_OKAY) { 29 /* Oops - error! Back-track and mp_clear what we already 30 succeeded in init-ing, then return error. 31 */ 32 va_list clean_args; 33 34 /* end the current list */ 35 va_end(args); 36 37 /* now start cleaning up */ 38 cur_arg = mp; 39 va_start(clean_args, mp); 40 while (n--) { 41 mp_clear(cur_arg); 42 cur_arg = va_arg(clean_args, mp_int*); 43 } 44 va_end(clean_args); 45 res = MP_MEM; 46 break; 47 } 48 n++; 49 cur_arg = va_arg(args, mp_int*); 50 } 51 va_end(args); 52 return res; /* Assumed ok, if error flagged above. */ 53 } 54 55 #endif 56 57 /* $Source: /cvs/libtom/libtommath/bn_mp_init_multi.c,v $ */ 58 /* $Revision: 1.3 $ */ 59 /* $Date: 2006/03/31 14:18:44 $ */ 60