tommath.h contains declarations for the public part of the library. tommath_private.h contains the functions which are private to ltm and should not be exposed to the public.
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <tommath_private.h>
 | 
						|
#ifdef BN_MP_INIT_MULTI_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, tstdenis82@gmail.com, http://libtom.org
 | 
						|
 */
 | 
						|
#include <stdarg.h>
 | 
						|
 | 
						|
int mp_init_multi(mp_int *mp, ...) 
 | 
						|
{
 | 
						|
    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;
 | 
						|
 | 
						|
    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;
 | 
						|
            
 | 
						|
            /* end the current list */
 | 
						|
            va_end(args);
 | 
						|
            
 | 
						|
            /* 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. */
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
/* $Source$ */
 | 
						|
/* $Revision$ */
 | 
						|
/* $Date$ */
 |