1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <tommath.h> 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef BN_MP_INIT_MULTI_C 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomMath, multiple-precision integer library -- Tom St Denis 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomMath is a library that provides multiple-precision 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * integer arithmetic as well as number theoretic functionality. 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library was designed directly after the MPI library by 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Michael Fromberger but has been written from scratch with 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * additional optimizations in place. 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works. 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://math.libtomcrypt.com 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <stdarg.h> 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint mp_init_multi(mp_int *mp, ...) 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int n = 0; /* Number of ok inits */ 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_int* cur_arg = mp; 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_list args; 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_start(args, mp); /* init args to next argument from caller */ 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (cur_arg != NULL) { 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (mp_init(cur_arg) != MP_OKAY) { 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* Oops - error! Back-track and mp_clear what we already 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project succeeded in init-ing, then return error. 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_list clean_args; 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* end the current list */ 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_end(args); 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /* now start cleaning up */ 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cur_arg = mp; 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_start(clean_args, mp); 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project while (n--) { 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mp_clear(cur_arg); 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cur_arg = va_arg(clean_args, mp_int*); 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_end(clean_args); 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project res = MP_MEM; 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project break; 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project n++; 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project cur_arg = va_arg(args, mp_int*); 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project va_end(args); 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return res; /* Assumed ok, if error flagged above. */ 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtommath/bn_mp_init_multi.c,v $ */ 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.3 $ */ 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/03/31 14:18:44 $ */ 60