1 // SPDX-License-Identifier: BSD-2-Clause
2 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
3 *
4 * LibTomCrypt is a library that provides various cryptographic
5 * algorithms in a highly modular and flexible manner.
6 *
7 * The library is free for all purposes without any express
8 * guarantee it works.
9 */
10 #include "tomcrypt_private.h"
11
12 #ifdef LTC_MPI
13 #include <stdarg.h>
14
ltc_init_multi(void ** a,...)15 int ltc_init_multi(void **a, ...)
16 {
17 void **cur = a;
18 int np = 0;
19 va_list args;
20
21 va_start(args, a);
22 while (cur != NULL) {
23 if (mp_init(cur) != CRYPT_OK) {
24 /* failed */
25 va_list clean_list;
26
27 va_start(clean_list, a);
28 cur = a;
29 while (np--) {
30 mp_clear(*cur);
31 cur = va_arg(clean_list, void**);
32 }
33 va_end(clean_list);
34 va_end(args);
35 return CRYPT_MEM;
36 }
37 ++np;
38 cur = va_arg(args, void**);
39 }
40 va_end(args);
41 return CRYPT_OK;
42 }
43
ltc_init_multi_size(int size_bits,void ** a,...)44 int ltc_init_multi_size(int size_bits, void **a, ...)
45 {
46 void **cur = a;
47 int np = 0;
48 va_list args;
49
50 va_start(args, a);
51 while (cur != NULL) {
52 if (mp_init_size(size_bits, cur) != CRYPT_OK) {
53 /* failed */
54 va_list clean_list;
55
56 va_start(clean_list, a);
57 cur = a;
58 while (np--) {
59 mp_clear(*cur);
60 cur = va_arg(clean_list, void**);
61 }
62 va_end(clean_list);
63 return CRYPT_MEM;
64 }
65 ++np;
66 cur = va_arg(args, void**);
67 }
68 va_end(args);
69 return CRYPT_OK;
70 }
71
ltc_deinit_multi(void * a,...)72 void ltc_deinit_multi(void *a, ...)
73 {
74 void *cur = a;
75 va_list args;
76
77 va_start(args, a);
78 while (cur != NULL) {
79 mp_clear(cur);
80 cur = va_arg(args, void *);
81 }
82 va_end(args);
83 }
84
ltc_cleanup_multi(void ** a,...)85 void ltc_cleanup_multi(void **a, ...)
86 {
87 void **cur = a;
88 va_list args;
89
90 va_start(args, a);
91 while (cur != NULL) {
92 if (*cur != NULL) {
93 mp_clear(*cur);
94 *cur = NULL;
95 }
96 cur = va_arg(args, void**);
97 }
98 va_end(args);
99 }
100
101 #endif
102
103 /* ref: $Format:%D$ */
104 /* git commit: $Format:%H$ */
105 /* commit time: $Format:%ai$ */
106