| 
									
										
										
										
											2018-05-02 21:43:17 +02:00
										 |  |  | #include "tommath_private.h"
 | 
					
						
							| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #ifdef BN_MP_INIT_MULTI_C
 | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  | /* LibTomMath, multiple-precision integer library -- Tom St Denis
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2003-08-05 01:24:44 +00:00
										 |  |  |  * LibTomMath is a library that provides multiple-precision | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  |  * integer arithmetic as well as number theoretic functionality. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2003-08-05 01:24:44 +00:00
										 |  |  |  * The library was designed directly after the MPI library by | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  |  * 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. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-12-18 23:37:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  | #include <stdarg.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-30 05:51:11 +02:00
										 |  |  | int mp_init_multi(mp_int *mp, ...) | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2017-08-30 19:11:35 +02:00
										 |  |  |    mp_err res = MP_OKAY;      /* Assume ok until proven otherwise */ | 
					
						
							|  |  |  |    int n = 0;                 /* Number of ok inits */ | 
					
						
							|  |  |  |    mp_int *cur_arg = mp; | 
					
						
							|  |  |  |    va_list args; | 
					
						
							| 
									
										
										
										
											2003-05-17 12:33:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-30 19:11:35 +02:00
										 |  |  |    va_start(args, mp);        /* init args to next argument from caller */ | 
					
						
							|  |  |  |    while (cur_arg != NULL) { | 
					
						
							|  |  |  |       if (mp_init(cur_arg) != MP_OKAY) { | 
					
						
							|  |  |  |          /* Oops - error! Back-track and mp_clear what we already
 | 
					
						
							|  |  |  |             succeeded in init-ing, then return error. | 
					
						
							|  |  |  |          */ | 
					
						
							|  |  |  |          va_list clean_args; | 
					
						
							| 
									
										
										
										
											2017-08-30 05:51:11 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-30 19:11:35 +02:00
										 |  |  |          /* now start cleaning up */ | 
					
						
							|  |  |  |          cur_arg = mp; | 
					
						
							|  |  |  |          va_start(clean_args, mp); | 
					
						
							|  |  |  |          while (n-- != 0) { | 
					
						
							|  |  |  |             mp_clear(cur_arg); | 
					
						
							|  |  |  |             cur_arg = va_arg(clean_args, mp_int *); | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |          va_end(clean_args); | 
					
						
							|  |  |  |          res = MP_MEM; | 
					
						
							|  |  |  |          break; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       n++; | 
					
						
							|  |  |  |       cur_arg = va_arg(args, mp_int *); | 
					
						
							|  |  |  |    } | 
					
						
							|  |  |  |    va_end(args); | 
					
						
							|  |  |  |    return res;                /* Assumed ok, if error flagged above. */ | 
					
						
							| 
									
										
										
										
											2003-08-29 14:06:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 22:07:18 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2005-08-01 16:37:28 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-28 16:27:26 +02:00
										 |  |  | /* ref:         $Format:%D$ */ | 
					
						
							|  |  |  | /* git commit:  $Format:%H$ */ | 
					
						
							|  |  |  | /* commit time: $Format:%ai$ */ |