• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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@gmail.com, http://math.libtomcrypt.com
16  */
17 #include <stdarg.h>
18 
mp_init_multi(mp_int * mp,...)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