Tizen 2.0 Release
[external/libgnutls26.git] / src / certtool-gaa.c
1 /* File generated by GAA 1.6.6
2  */
3 #define GAA_NO_WIN32
4 #line 1 "certtool.gaa"
5
6
7 /* C declarations */
8
9 #include <config.h>
10 #ifdef _WIN32
11 # include <io.h>
12 #endif
13
14 #include "certtool-common.h"
15
16 #include <stdio.h>
17 #include <string.h>
18 #include <stdlib.h>
19
20 #ifndef GAA_NO_WIN32
21 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(WINDOWS)
22 #define GAA_WIN32
23 #endif
24 #endif
25
26 static void* gaa_malloc( size_t size) {
27 void* ret;
28         ret = malloc(size);
29         if (ret==NULL) {
30                 fprintf(stderr, "gaa: could not allocate memory");
31                 exit(1);
32         }
33         return ret;
34 }
35
36 static void __gaa_helpsingle(char short_name, char *name, 
37         char *arg_desc, char *opt_help)
38 {
39      int col1, col3, col4, tabsize = 3, curr;
40      int i;
41
42      col1 = 5; /* Default values */
43      col3 = 30;
44      col4 = 70;
45
46      curr = 0;
47      for(i = 0; i < col1; i++)
48         {
49         printf(" ");
50         curr++;
51         }
52      if(short_name)
53         {
54         if(name && *name)
55           {
56             printf("-%c, ", short_name);
57             curr += 4;
58           }
59         else
60           {
61             printf("-%c ", short_name);
62             curr += 3;
63           }
64         }
65      if(name && *name)
66         {
67           printf("--%s ", name);
68           curr += 3 + strlen(name);
69         }
70      if(arg_desc && *arg_desc)
71         {
72           printf("%s ", arg_desc);
73           curr += 1 + strlen(arg_desc);
74         }
75      if(curr >= col3)
76         {
77           printf("\n");
78           curr = 0;
79         }
80      if(opt_help) /* let's print the option's help body */
81         {
82         const char *str = opt_help;
83         while(*str)
84           {
85              while(curr < col3)
86                {
87                  printf(" ");
88                  curr++;
89                }
90              switch(*str)
91                {
92                  case '\n':
93                      printf("\n");
94                      curr = 0;
95                      break;
96                  case '\t':
97                      do
98                         {
99                         printf(" ");
100                         curr++;
101                         }
102                      while((curr - col3) % tabsize != 0 && curr < col4);
103                  case ' ':
104                      if(*str == ' ')
105                         {
106                         curr++;
107                         printf(" ");
108                         }
109                      for(i = 1; str[i] && str[i] != ' ' && str[i] != '\n'
110                         && str[i] != '\t'; i++);
111                      if(curr + i - 1 >= col4)
112                         curr = col4;
113                      break;
114                 default:
115                      printf("%c", *str);
116                      curr++;
117                }
118              if(curr >= col4)
119                {
120                  printf("\n");
121                  curr = 0;
122                }
123              str++;
124           }
125         }
126      printf("\n");
127 }
128
129 void gaa_help(void)
130 {
131         printf("Certtool help\nUsage: certtool [options]\n");
132         __gaa_helpsingle('s', "generate-self-signed", "", "Generate a self-signed certificate.");
133         __gaa_helpsingle('c', "generate-certificate", "", "Generate a signed certificate.");
134         __gaa_helpsingle(0, "generate-proxy", "", "Generate a proxy certificate.");
135         __gaa_helpsingle(0, "generate-crl", "", "Generate a CRL.");
136         __gaa_helpsingle('u', "update-certificate", "", "Update a signed certificate.");
137         __gaa_helpsingle('p', "generate-privkey", "", "Generate a private key.");
138         __gaa_helpsingle('q', "generate-request", "", "Generate a PKCS #10 certificate request.");
139         __gaa_helpsingle('e', "verify-chain", "", "Verify a PEM encoded certificate chain. The last certificate in the chain must be a self signed one.");
140         __gaa_helpsingle(0, "verify-crl", "", "Verify a CRL.");
141         __gaa_helpsingle(0, "generate-dh-params", "", "Generate PKCS #3 encoded Diffie-Hellman parameters.");
142         __gaa_helpsingle(0, "get-dh-params", "", "Get the included PKCS #3 encoded Diffie-Hellman parameters.");
143         __gaa_helpsingle(0, "load-privkey", "FILE ", "Private key file to use.");
144         __gaa_helpsingle(0, "load-pubkey", "FILE ", "Public key file to use.");
145         __gaa_helpsingle(0, "load-request", "FILE ", "Certificate request file to use.");
146         __gaa_helpsingle(0, "load-certificate", "FILE ", "Certificate file to use.");
147         __gaa_helpsingle(0, "load-ca-privkey", "FILE ", "Certificate authority's private key file to use.");
148         __gaa_helpsingle(0, "load-ca-certificate", "FILE ", "Certificate authority's certificate file to use.");
149         __gaa_helpsingle(0, "password", "PASSWORD ", "Password to use.");
150         __gaa_helpsingle('i', "certificate-info", "", "Print information on a certificate.");
151         __gaa_helpsingle(0, "certificate-pubkey", "", "Print certificate public key.");
152         __gaa_helpsingle(0, "pgp-certificate-info", "", "Print information on a OpenPGP certificate.");
153         __gaa_helpsingle(0, "pgp-ring-info", "", "Print information on a keyring structure.");
154         __gaa_helpsingle('l', "crl-info", "", "Print information on a CRL.");
155         __gaa_helpsingle(0, "crq-info", "", "Print information on a Certificate Request.");
156         __gaa_helpsingle(0, "no-crq-extensions", "", "Do not use extensions in certificate requests.");
157         __gaa_helpsingle(0, "p12-info", "", "Print information on a PKCS #12 structure.");
158         __gaa_helpsingle(0, "p7-info", "", "Print information on a PKCS #7 structure.");
159         __gaa_helpsingle(0, "smime-to-p7", "", "Convert S/MIME to PKCS #7 structure.");
160         __gaa_helpsingle('k', "key-info", "", "Print information on a private key.");
161         __gaa_helpsingle(0, "pgp-key-info", "", "Print information on a OpenPGP private key.");
162         __gaa_helpsingle(0, "pubkey-info", "", "Print information on a public key.");
163         __gaa_helpsingle(0, "fix-key", "", "Regenerate the parameters in a private key.");
164         __gaa_helpsingle(0, "v1", "", "Generate an X.509 version 1 certificate (no extensions).");
165         __gaa_helpsingle(0, "to-p12", "", "Generate a PKCS #12 structure.");
166         __gaa_helpsingle(0, "to-p8", "", "Generate a PKCS #8 key structure.");
167         __gaa_helpsingle('8', "pkcs8", "", "Use PKCS #8 format for private keys.");
168         __gaa_helpsingle(0, "dsa", "", "Use DSA keys.");
169         __gaa_helpsingle(0, "hash", "STR ", "Hash algorithm to use for signing (MD5,SHA1,RMD160,SHA256,SHA384,SHA512).");
170         __gaa_helpsingle(0, "export-ciphers", "", "Use weak encryption algorithms.");
171         __gaa_helpsingle(0, "inder", "", "Use DER format for input certificates and private keys.");
172         __gaa_helpsingle(0, "inraw", "", "Use RAW/DER format for input certificates and private keys.");
173         __gaa_helpsingle(0, "outder", "", "Use DER format for output certificates and private keys.");
174         __gaa_helpsingle(0, "outraw", "", "Use RAW/DER format for output certificates and private keys.");
175         __gaa_helpsingle(0, "bits", "BITS ", "specify the number of bits for key generation.");
176         __gaa_helpsingle(0, "sec-param", "PARAM ", "specify the security level [low|normal|high|ultra].");
177         __gaa_helpsingle(0, "disable-quick-random", "", "Use /dev/random for key generationg, thus increasing the quality of randomness used.");
178         __gaa_helpsingle(0, "outfile", "FILE ", "Output file.");
179         __gaa_helpsingle(0, "infile", "FILE ", "Input file.");
180         __gaa_helpsingle(0, "template", "FILE ", "Template file to use for non interactive operation.");
181         __gaa_helpsingle(0, "pkcs-cipher", "CIPHER ", "Cipher to use for pkcs operations (3des,3des-pkcs12,aes-128,aes-192,aes-256,rc2-40,arcfour).");
182         __gaa_helpsingle('d', "debug", "LEVEL ", "specify the debug level. Default is 1.");
183         __gaa_helpsingle('h', "help", "", "shows this help text");
184         __gaa_helpsingle('v', "version", "", "shows the program's version");
185
186 #line 100 "gaa.skel"
187 }
188 /* Copy of C area */
189
190 #line 104 "gaa.skel"
191 /* GAA HEADER */
192 #ifndef GAA_HEADER_POKY
193 #define GAA_HEADER_POKY
194
195 typedef struct _gaainfo gaainfo;
196
197 struct _gaainfo
198 {
199 #line 140 "certtool.gaa"
200         int debug;
201 #line 137 "certtool.gaa"
202         char *pkcs_cipher;
203 #line 134 "certtool.gaa"
204         char *template;
205 #line 131 "certtool.gaa"
206         char *infile;
207 #line 128 "certtool.gaa"
208         char *outfile;
209 #line 125 "certtool.gaa"
210         int quick_random;
211 #line 122 "certtool.gaa"
212         char* sec_param;
213 #line 119 "certtool.gaa"
214         int bits;
215 #line 115 "certtool.gaa"
216         int outcert_format;
217 #line 111 "certtool.gaa"
218         int incert_format;
219 #line 108 "certtool.gaa"
220         int export;
221 #line 105 "certtool.gaa"
222         char *hash;
223 #line 102 "certtool.gaa"
224         int dsa;
225 #line 99 "certtool.gaa"
226         int pkcs8;
227 #line 92 "certtool.gaa"
228         int v1_cert;
229 #line 89 "certtool.gaa"
230         int fix_key;
231 #line 72 "certtool.gaa"
232         int crq_extensions;
233 #line 57 "certtool.gaa"
234         char *pass;
235 #line 54 "certtool.gaa"
236         char *ca;
237 #line 51 "certtool.gaa"
238         char *ca_privkey;
239 #line 48 "certtool.gaa"
240         char *cert;
241 #line 45 "certtool.gaa"
242         char *request;
243 #line 42 "certtool.gaa"
244         char *pubkey;
245 #line 39 "certtool.gaa"
246         char *privkey;
247 #line 17 "certtool.gaa"
248         int action;
249 #line 16 "certtool.gaa"
250         int privkey_op;
251
252 #line 114 "gaa.skel"
253 };
254
255 #ifdef __cplusplus
256 extern "C"
257 {
258 #endif
259
260     int gaa(int argc, char *argv[], gaainfo *gaaval);
261
262     void gaa_help(void);
263     
264     int gaa_file(const char *name, gaainfo *gaaval);
265     
266 #ifdef __cplusplus
267 }
268 #endif
269
270
271 #endif
272
273 #line 135 "gaa.skel"
274
275 /* C declarations */
276
277 #define GAAERROR(x)    \
278 {                   \
279 gaa_error = 1;      \
280 return x;        \
281 }
282
283 static char *gaa_current_option;
284 static int gaa_error = 0;
285
286 /* Generated by gaa */
287
288 #include <string.h>
289 #include <stdlib.h>
290
291
292 #define GAA_OK                       -1
293
294 #define GAA_ERROR_NOMATCH            0
295 #define GAA_ERROR_NOTENOUGH_ARGS     1
296 #define GAA_ERROR_INVALID_ARG        2
297 #define GAA_ERROR_UNKNOWN            3
298
299 #define GAA_NOT_AN_OPTION       0
300 #define GAA_WORD_OPTION         1
301 #define GAA_LETTER_OPTION       2
302 #define GAA_MULTIPLE_OPTION     3
303
304 #define GAA_REST                0
305 #define GAA_NB_OPTION           53
306 #define GAAOPTID_version        1
307 #define GAAOPTID_help   2
308 #define GAAOPTID_debug  3
309 #define GAAOPTID_pkcs_cipher    4
310 #define GAAOPTID_template       5
311 #define GAAOPTID_infile 6
312 #define GAAOPTID_outfile        7
313 #define GAAOPTID_disable_quick_random   8
314 #define GAAOPTID_sec_param      9
315 #define GAAOPTID_bits   10
316 #define GAAOPTID_outraw 11
317 #define GAAOPTID_outder 12
318 #define GAAOPTID_inraw  13
319 #define GAAOPTID_inder  14
320 #define GAAOPTID_export_ciphers 15
321 #define GAAOPTID_hash   16
322 #define GAAOPTID_dsa    17
323 #define GAAOPTID_pkcs8  18
324 #define GAAOPTID_to_p8  19
325 #define GAAOPTID_to_p12 20
326 #define GAAOPTID_v1     21
327 #define GAAOPTID_fix_key        22
328 #define GAAOPTID_pubkey_info    23
329 #define GAAOPTID_pgp_key_info   24
330 #define GAAOPTID_key_info       25
331 #define GAAOPTID_smime_to_p7    26
332 #define GAAOPTID_p7_info        27
333 #define GAAOPTID_p12_info       28
334 #define GAAOPTID_no_crq_extensions      29
335 #define GAAOPTID_crq_info       30
336 #define GAAOPTID_crl_info       31
337 #define GAAOPTID_pgp_ring_info  32
338 #define GAAOPTID_pgp_certificate_info   33
339 #define GAAOPTID_certificate_pubkey     34
340 #define GAAOPTID_certificate_info       35
341 #define GAAOPTID_password       36
342 #define GAAOPTID_load_ca_certificate    37
343 #define GAAOPTID_load_ca_privkey        38
344 #define GAAOPTID_load_certificate       39
345 #define GAAOPTID_load_request   40
346 #define GAAOPTID_load_pubkey    41
347 #define GAAOPTID_load_privkey   42
348 #define GAAOPTID_get_dh_params  43
349 #define GAAOPTID_generate_dh_params     44
350 #define GAAOPTID_verify_crl     45
351 #define GAAOPTID_verify_chain   46
352 #define GAAOPTID_generate_request       47
353 #define GAAOPTID_generate_privkey       48
354 #define GAAOPTID_update_certificate     49
355 #define GAAOPTID_generate_crl   50
356 #define GAAOPTID_generate_proxy 51
357 #define GAAOPTID_generate_certificate   52
358 #define GAAOPTID_generate_self_signed   53
359
360 #line 168 "gaa.skel"
361
362 #define GAA_CHECK1STR(a,b)      \
363 if(a[0] == str[0])              \
364 {                               \
365     gaa_current_option = a;     \
366     return b;                   \
367 }
368
369 #define GAA_CHECKSTR(a,b)                \
370 if(strcmp(a,str) == 0)                   \
371 {                                        \
372     gaa_current_option = a;              \
373     return b;                            \
374 }
375
376 #define GAA_TESTMOREARGS                                                  \
377 if(!OK)                                                                     \
378 {                                  \
379 while((gaa_last_non_option != gaa_index) && (gaa_arg_used[gaa_index] == 1)) \
380     gaa_index++;                                                            \
381 if(gaa_last_non_option == gaa_index)                                        \
382     return GAA_ERROR_NOTENOUGH_ARGS; \
383 }
384
385 #define GAA_TESTMOREOPTIONALARGS                                                  \
386 if(!OK) \
387 { \
388 while((gaa_last_non_option != gaa_index) && (gaa_arg_used[gaa_index] == 1)) \
389     gaa_index++;                                                            \
390 if(gaa_last_non_option == gaa_index)                                        \
391     OK = 1; \
392 }
393
394 #define GAA_FILL_2ARGS(target, func)           \
395 target = func(GAAargv[gaa_index]);       \
396 gaa_arg_used[gaa_index] = 1;             \
397 if(gaa_error == 1)                       \
398 {                                        \
399     gaa_error = 0;                       \
400     return GAA_ERROR_INVALID_ARG;        \
401
402
403
404
405 #define GAA_FILL(target, func, num)           \
406 if(!OK) \
407 { \
408 target = func(GAAargv[gaa_index]);       \
409 gaa_arg_used[gaa_index] = 1;             \
410 if(gaa_error == 1)                       \
411 {                                        \
412     gaa_error = 0;                       \
413     return GAA_ERROR_INVALID_ARG;        \
414 } \
415 num = 1;  \
416 } \
417 else \
418 { \
419 num = 0; \
420 }
421
422 #define GAA_LIST_FILL(target, func, type ,num)                      \
423 if(!OK) \
424 { \
425 num = 0;                                                            \
426 target = NULL;                                                      \
427 if ( gaa_last_non_option - gaa_index > 0)                           \
428   target = gaa_malloc((gaa_last_non_option - gaa_index) * sizeof(type));\
429 for(; gaa_index < gaa_last_non_option; gaa_index++)                 \
430 {                                                                   \
431     if(gaa_arg_used[gaa_index] == 0)                                \
432     {                                                               \
433         GAA_FILL_2ARGS(target[num], func);                          \
434         num++;                                                      \
435     }                                                               \
436 }                                                                   \
437 if(num == 0)                                                        \
438     return GAA_ERROR_NOTENOUGH_ARGS; \
439 }
440
441 #define GAA_OPTIONALLIST_FILL(target, func, type ,num)                      \
442 if(!OK) \
443 { \
444 num = 0;                                                            \
445 target = NULL;                                                      \
446 if ( gaa_last_non_option - gaa_index > 0)                           \
447   target = gaa_malloc((gaa_last_non_option - gaa_index) * sizeof(type));\
448 for(; gaa_index < gaa_last_non_option; gaa_index++)                 \
449 {                                                                   \
450     if(gaa_arg_used[gaa_index] == 0)                                \
451     {                                                               \
452         GAA_FILL_2ARGS(target[num], func);                                \
453         num++;                                                      \
454     }                                                               \
455 } \
456 }
457
458 #define GAA_OBLIGAT(str)                                            \
459 k = 0;                                                              \
460 for(i = 0; i < strlen(str); i++)                                    \
461 {                                                                   \
462     j = gaa_get_option_num(str + i, GAA_LETTER_OPTION);           \
463     if(j == GAA_ERROR_NOMATCH)                                       \
464     {                                                               \
465         printf("Error: invalid 'obligat' set\n");                  \
466         exit(-1);                                                   \
467     }                                                               \
468     if(opt_list[j] == 1)                                            \
469         k = 1;                                                      \
470 }                                                                    \
471 if(k == 0)                                                            \
472 {                                                                      \
473     if(strlen(str) == 1)                                                \
474         printf("You must give the -%s option\n", str);                     \
475     else                                                                  \
476         printf("You must give at least one option of '%s'\n", str);          \
477     return 0;         \
478 }
479         
480 #define GAA_INCOMP(str)                                                \
481 k = 0;                                                              \
482 for(i = 0; i < strlen(str); i++)                                    \
483 {                                                                   \
484     j = gaa_get_option_num(str + i, GAA_LETTER_OPTION);           \
485     if(j == GAA_ERROR_NOMATCH)                                      \
486     {                                                               \
487         printf("Error: invalid 'obligat' set\n");                  \
488         exit(-1);                                                   \
489     }                                                               \
490     if(opt_list[j] == 1)                                            \
491         k++;                                                      \
492 }                   \
493 if(k > 1)                                                            \
494 {                                                                      \
495     printf("The options '%s' are incompatible\n", str);              \
496     return 0;                                                          \
497 }
498         
499
500 static char **GAAargv;
501 static int GAAargc;
502 static char *gaa_arg_used;
503 static int gaa_processing_file = 0;
504 static int inited = 0;
505
506 static int gaa_getint(char *arg)
507 {
508     int tmp;
509     char a;
510     if(sscanf(arg, "%d%c", &tmp, &a) < 1)
511     {
512         printf("Option %s: '%s' isn't an integer\n", gaa_current_option, arg);
513         GAAERROR(-1);
514     }
515     return tmp;
516 }
517
518 static char gaa_getchar(char *arg)
519 {
520     if(strlen(arg) != 1)
521     {
522         printf("Option %s: '%s' isn't an character\n", gaa_current_option, arg);
523         GAAERROR(-1);
524     }
525     return arg[0];
526 }
527
528 static char* gaa_getstr(char *arg)
529 {
530     return arg;
531 }
532 static float gaa_getfloat(char *arg)
533 {
534     float tmp;
535     char a;
536     if(sscanf(arg, "%f%c", &tmp, &a) < 1)
537     {
538         printf("Option %s: '%s' isn't a float number\n", gaa_current_option, arg);
539         GAAERROR(-1);
540     }
541     return tmp;
542 }
543 /* option structures */
544
545 struct GAAOPTION_debug 
546 {
547         int arg1;
548         int size1;
549 };
550
551 struct GAAOPTION_pkcs_cipher 
552 {
553         char* arg1;
554         int size1;
555 };
556
557 struct GAAOPTION_template 
558 {
559         char* arg1;
560         int size1;
561 };
562
563 struct GAAOPTION_infile 
564 {
565         char* arg1;
566         int size1;
567 };
568
569 struct GAAOPTION_outfile 
570 {
571         char* arg1;
572         int size1;
573 };
574
575 struct GAAOPTION_sec_param 
576 {
577         char* arg1;
578         int size1;
579 };
580
581 struct GAAOPTION_bits 
582 {
583         int arg1;
584         int size1;
585 };
586
587 struct GAAOPTION_hash 
588 {
589         char* arg1;
590         int size1;
591 };
592
593 struct GAAOPTION_password 
594 {
595         char* arg1;
596         int size1;
597 };
598
599 struct GAAOPTION_load_ca_certificate 
600 {
601         char* arg1;
602         int size1;
603 };
604
605 struct GAAOPTION_load_ca_privkey 
606 {
607         char* arg1;
608         int size1;
609 };
610
611 struct GAAOPTION_load_certificate 
612 {
613         char* arg1;
614         int size1;
615 };
616
617 struct GAAOPTION_load_request 
618 {
619         char* arg1;
620         int size1;
621 };
622
623 struct GAAOPTION_load_pubkey 
624 {
625         char* arg1;
626         int size1;
627 };
628
629 struct GAAOPTION_load_privkey 
630 {
631         char* arg1;
632         int size1;
633 };
634          
635 #line 349 "gaa.skel"
636 static int gaa_is_an_argument(char *str)
637 {
638 #ifdef GAA_WIN32
639     if(str[0] == '/' && str[1] != 0)
640         return GAA_MULTIPLE_OPTION;
641 #endif
642     if(str[0] != '-')
643         return GAA_NOT_AN_OPTION;
644     if(str[1] == 0)
645         return GAA_NOT_AN_OPTION;
646     if(str[1] == '-')
647     {
648         if(str[2] != 0)
649             return GAA_WORD_OPTION;
650         else
651             return GAA_NOT_AN_OPTION;
652     }
653     if(str[2] == 0)
654         return GAA_LETTER_OPTION;
655     else
656         return GAA_MULTIPLE_OPTION;
657 }
658
659 static int gaa_get_option_num(char *str, int status)
660 {
661     switch(status)
662         {
663         case GAA_LETTER_OPTION:
664                         GAA_CHECK1STR("d", GAAOPTID_debug);
665                         GAA_CHECK1STR("", GAAOPTID_pkcs_cipher);
666                         GAA_CHECK1STR("", GAAOPTID_template);
667                         GAA_CHECK1STR("", GAAOPTID_infile);
668                         GAA_CHECK1STR("", GAAOPTID_outfile);
669                         GAA_CHECK1STR("", GAAOPTID_sec_param);
670                         GAA_CHECK1STR("", GAAOPTID_bits);
671                         GAA_CHECK1STR("", GAAOPTID_hash);
672                         GAA_CHECK1STR("", GAAOPTID_password);
673                         GAA_CHECK1STR("", GAAOPTID_load_ca_certificate);
674                         GAA_CHECK1STR("", GAAOPTID_load_ca_privkey);
675                         GAA_CHECK1STR("", GAAOPTID_load_certificate);
676                         GAA_CHECK1STR("", GAAOPTID_load_request);
677                         GAA_CHECK1STR("", GAAOPTID_load_pubkey);
678                         GAA_CHECK1STR("", GAAOPTID_load_privkey);
679         case GAA_MULTIPLE_OPTION:
680 #line 375 "gaa.skel"
681                         GAA_CHECK1STR("v", GAAOPTID_version);
682                         GAA_CHECK1STR("h", GAAOPTID_help);
683                         GAA_CHECK1STR("", GAAOPTID_disable_quick_random);
684                         GAA_CHECK1STR("", GAAOPTID_outraw);
685                         GAA_CHECK1STR("", GAAOPTID_outder);
686                         GAA_CHECK1STR("", GAAOPTID_inraw);
687                         GAA_CHECK1STR("", GAAOPTID_inder);
688                         GAA_CHECK1STR("", GAAOPTID_export_ciphers);
689                         GAA_CHECK1STR("", GAAOPTID_dsa);
690                         GAA_CHECK1STR("8", GAAOPTID_pkcs8);
691                         GAA_CHECK1STR("", GAAOPTID_to_p8);
692                         GAA_CHECK1STR("", GAAOPTID_to_p12);
693                         GAA_CHECK1STR("", GAAOPTID_v1);
694                         GAA_CHECK1STR("", GAAOPTID_fix_key);
695                         GAA_CHECK1STR("", GAAOPTID_pubkey_info);
696                         GAA_CHECK1STR("", GAAOPTID_pgp_key_info);
697                         GAA_CHECK1STR("k", GAAOPTID_key_info);
698                         GAA_CHECK1STR("", GAAOPTID_smime_to_p7);
699                         GAA_CHECK1STR("", GAAOPTID_p7_info);
700                         GAA_CHECK1STR("", GAAOPTID_p12_info);
701                         GAA_CHECK1STR("", GAAOPTID_no_crq_extensions);
702                         GAA_CHECK1STR("", GAAOPTID_crq_info);
703                         GAA_CHECK1STR("l", GAAOPTID_crl_info);
704                         GAA_CHECK1STR("", GAAOPTID_pgp_ring_info);
705                         GAA_CHECK1STR("", GAAOPTID_pgp_certificate_info);
706                         GAA_CHECK1STR("", GAAOPTID_certificate_pubkey);
707                         GAA_CHECK1STR("i", GAAOPTID_certificate_info);
708                         GAA_CHECK1STR("", GAAOPTID_get_dh_params);
709                         GAA_CHECK1STR("", GAAOPTID_generate_dh_params);
710                         GAA_CHECK1STR("", GAAOPTID_verify_crl);
711                         GAA_CHECK1STR("e", GAAOPTID_verify_chain);
712                         GAA_CHECK1STR("q", GAAOPTID_generate_request);
713                         GAA_CHECK1STR("p", GAAOPTID_generate_privkey);
714                         GAA_CHECK1STR("u", GAAOPTID_update_certificate);
715                         GAA_CHECK1STR("", GAAOPTID_generate_crl);
716                         GAA_CHECK1STR("", GAAOPTID_generate_proxy);
717                         GAA_CHECK1STR("c", GAAOPTID_generate_certificate);
718                         GAA_CHECK1STR("s", GAAOPTID_generate_self_signed);
719
720 #line 277 "gaa.skel"
721         break;
722         case GAA_WORD_OPTION:
723                         GAA_CHECKSTR("version", GAAOPTID_version);
724                         GAA_CHECKSTR("help", GAAOPTID_help);
725                         GAA_CHECKSTR("debug", GAAOPTID_debug);
726                         GAA_CHECKSTR("pkcs-cipher", GAAOPTID_pkcs_cipher);
727                         GAA_CHECKSTR("template", GAAOPTID_template);
728                         GAA_CHECKSTR("infile", GAAOPTID_infile);
729                         GAA_CHECKSTR("outfile", GAAOPTID_outfile);
730                         GAA_CHECKSTR("disable-quick-random", GAAOPTID_disable_quick_random);
731                         GAA_CHECKSTR("sec-param", GAAOPTID_sec_param);
732                         GAA_CHECKSTR("bits", GAAOPTID_bits);
733                         GAA_CHECKSTR("outraw", GAAOPTID_outraw);
734                         GAA_CHECKSTR("outder", GAAOPTID_outder);
735                         GAA_CHECKSTR("inraw", GAAOPTID_inraw);
736                         GAA_CHECKSTR("inder", GAAOPTID_inder);
737                         GAA_CHECKSTR("export-ciphers", GAAOPTID_export_ciphers);
738                         GAA_CHECKSTR("hash", GAAOPTID_hash);
739                         GAA_CHECKSTR("dsa", GAAOPTID_dsa);
740                         GAA_CHECKSTR("pkcs8", GAAOPTID_pkcs8);
741                         GAA_CHECKSTR("to-p8", GAAOPTID_to_p8);
742                         GAA_CHECKSTR("to-p12", GAAOPTID_to_p12);
743                         GAA_CHECKSTR("v1", GAAOPTID_v1);
744                         GAA_CHECKSTR("fix-key", GAAOPTID_fix_key);
745                         GAA_CHECKSTR("pubkey-info", GAAOPTID_pubkey_info);
746                         GAA_CHECKSTR("pgp-key-info", GAAOPTID_pgp_key_info);
747                         GAA_CHECKSTR("key-info", GAAOPTID_key_info);
748                         GAA_CHECKSTR("smime-to-p7", GAAOPTID_smime_to_p7);
749                         GAA_CHECKSTR("p7-info", GAAOPTID_p7_info);
750                         GAA_CHECKSTR("p12-info", GAAOPTID_p12_info);
751                         GAA_CHECKSTR("no-crq-extensions", GAAOPTID_no_crq_extensions);
752                         GAA_CHECKSTR("crq-info", GAAOPTID_crq_info);
753                         GAA_CHECKSTR("crl-info", GAAOPTID_crl_info);
754                         GAA_CHECKSTR("pgp-ring-info", GAAOPTID_pgp_ring_info);
755                         GAA_CHECKSTR("pgp-certificate-info", GAAOPTID_pgp_certificate_info);
756                         GAA_CHECKSTR("certificate-pubkey", GAAOPTID_certificate_pubkey);
757                         GAA_CHECKSTR("certificate-info", GAAOPTID_certificate_info);
758                         GAA_CHECKSTR("password", GAAOPTID_password);
759                         GAA_CHECKSTR("load-ca-certificate", GAAOPTID_load_ca_certificate);
760                         GAA_CHECKSTR("load-ca-privkey", GAAOPTID_load_ca_privkey);
761                         GAA_CHECKSTR("load-certificate", GAAOPTID_load_certificate);
762                         GAA_CHECKSTR("load-request", GAAOPTID_load_request);
763                         GAA_CHECKSTR("load-pubkey", GAAOPTID_load_pubkey);
764                         GAA_CHECKSTR("load-privkey", GAAOPTID_load_privkey);
765                         GAA_CHECKSTR("get-dh-params", GAAOPTID_get_dh_params);
766                         GAA_CHECKSTR("generate-dh-params", GAAOPTID_generate_dh_params);
767                         GAA_CHECKSTR("verify-crl", GAAOPTID_verify_crl);
768                         GAA_CHECKSTR("verify-chain", GAAOPTID_verify_chain);
769                         GAA_CHECKSTR("generate-request", GAAOPTID_generate_request);
770                         GAA_CHECKSTR("generate-privkey", GAAOPTID_generate_privkey);
771                         GAA_CHECKSTR("update-certificate", GAAOPTID_update_certificate);
772                         GAA_CHECKSTR("generate-crl", GAAOPTID_generate_crl);
773                         GAA_CHECKSTR("generate-proxy", GAAOPTID_generate_proxy);
774                         GAA_CHECKSTR("generate-certificate", GAAOPTID_generate_certificate);
775                         GAA_CHECKSTR("generate-self-signed", GAAOPTID_generate_self_signed);
776
777 #line 281 "gaa.skel"
778         break;
779         default: break;
780         }
781     return GAA_ERROR_NOMATCH;
782 }
783
784 static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
785 {
786     int OK = 0;
787     int gaa_last_non_option;
788         struct GAAOPTION_debug GAATMP_debug;
789         struct GAAOPTION_pkcs_cipher GAATMP_pkcs_cipher;
790         struct GAAOPTION_template GAATMP_template;
791         struct GAAOPTION_infile GAATMP_infile;
792         struct GAAOPTION_outfile GAATMP_outfile;
793         struct GAAOPTION_sec_param GAATMP_sec_param;
794         struct GAAOPTION_bits GAATMP_bits;
795         struct GAAOPTION_hash GAATMP_hash;
796         struct GAAOPTION_password GAATMP_password;
797         struct GAAOPTION_load_ca_certificate GAATMP_load_ca_certificate;
798         struct GAAOPTION_load_ca_privkey GAATMP_load_ca_privkey;
799         struct GAAOPTION_load_certificate GAATMP_load_certificate;
800         struct GAAOPTION_load_request GAATMP_load_request;
801         struct GAAOPTION_load_pubkey GAATMP_load_pubkey;
802         struct GAAOPTION_load_privkey GAATMP_load_privkey;
803
804 #line 393 "gaa.skel"
805 #ifdef GAA_REST_EXISTS
806     struct GAAREST GAAREST_tmp;
807 #endif
808
809     opt_list[gaa_num] = 1;
810     
811     for(gaa_last_non_option = gaa_index;
812         (gaa_last_non_option != GAAargc) && (gaa_is_an_argument(GAAargv[gaa_last_non_option]) == GAA_NOT_AN_OPTION);
813         gaa_last_non_option++);
814
815     if(gaa_num == GAA_REST)
816     {
817         gaa_index = 1;
818         gaa_last_non_option = GAAargc;
819     }
820     
821     switch(gaa_num)
822     {
823         case GAAOPTID_version:
824         OK = 0;
825 #line 145 "certtool.gaa"
826 { certtool_version(); exit(0); ;};
827
828                 return GAA_OK;
829                 break;
830         case GAAOPTID_help:
831         OK = 0;
832 #line 143 "certtool.gaa"
833 { gaa_help(); exit(0); ;};
834
835                 return GAA_OK;
836                 break;
837         case GAAOPTID_debug:
838         OK = 0;
839                 GAA_TESTMOREARGS;
840                 GAA_FILL(GAATMP_debug.arg1, gaa_getint, GAATMP_debug.size1);
841                 gaa_index++;
842 #line 141 "certtool.gaa"
843 { gaaval->debug = GAATMP_debug.arg1 ;};
844
845                 return GAA_OK;
846                 break;
847         case GAAOPTID_pkcs_cipher:
848         OK = 0;
849                 GAA_TESTMOREARGS;
850                 GAA_FILL(GAATMP_pkcs_cipher.arg1, gaa_getstr, GAATMP_pkcs_cipher.size1);
851                 gaa_index++;
852 #line 138 "certtool.gaa"
853 { gaaval->pkcs_cipher = GAATMP_pkcs_cipher.arg1 ;};
854
855                 return GAA_OK;
856                 break;
857         case GAAOPTID_template:
858         OK = 0;
859                 GAA_TESTMOREARGS;
860                 GAA_FILL(GAATMP_template.arg1, gaa_getstr, GAATMP_template.size1);
861                 gaa_index++;
862 #line 135 "certtool.gaa"
863 { gaaval->template = GAATMP_template.arg1 ;};
864
865                 return GAA_OK;
866                 break;
867         case GAAOPTID_infile:
868         OK = 0;
869                 GAA_TESTMOREARGS;
870                 GAA_FILL(GAATMP_infile.arg1, gaa_getstr, GAATMP_infile.size1);
871                 gaa_index++;
872 #line 132 "certtool.gaa"
873 { gaaval->infile = GAATMP_infile.arg1 ;};
874
875                 return GAA_OK;
876                 break;
877         case GAAOPTID_outfile:
878         OK = 0;
879                 GAA_TESTMOREARGS;
880                 GAA_FILL(GAATMP_outfile.arg1, gaa_getstr, GAATMP_outfile.size1);
881                 gaa_index++;
882 #line 129 "certtool.gaa"
883 { gaaval->outfile = GAATMP_outfile.arg1 ;};
884
885                 return GAA_OK;
886                 break;
887         case GAAOPTID_disable_quick_random:
888         OK = 0;
889 #line 126 "certtool.gaa"
890 { gaaval->quick_random = 0; ;};
891
892                 return GAA_OK;
893                 break;
894         case GAAOPTID_sec_param:
895         OK = 0;
896                 GAA_TESTMOREARGS;
897                 GAA_FILL(GAATMP_sec_param.arg1, gaa_getstr, GAATMP_sec_param.size1);
898                 gaa_index++;
899 #line 123 "certtool.gaa"
900 { gaaval->sec_param = GAATMP_sec_param.arg1 ;};
901
902                 return GAA_OK;
903                 break;
904         case GAAOPTID_bits:
905         OK = 0;
906                 GAA_TESTMOREARGS;
907                 GAA_FILL(GAATMP_bits.arg1, gaa_getint, GAATMP_bits.size1);
908                 gaa_index++;
909 #line 120 "certtool.gaa"
910 { gaaval->bits = GAATMP_bits.arg1 ;};
911
912                 return GAA_OK;
913                 break;
914         case GAAOPTID_outraw:
915         OK = 0;
916 #line 117 "certtool.gaa"
917 { gaaval->outcert_format=1 ;};
918
919                 return GAA_OK;
920                 break;
921         case GAAOPTID_outder:
922         OK = 0;
923 #line 116 "certtool.gaa"
924 { gaaval->outcert_format=1 ;};
925
926                 return GAA_OK;
927                 break;
928         case GAAOPTID_inraw:
929         OK = 0;
930 #line 113 "certtool.gaa"
931 { gaaval->incert_format=1 ;};
932
933                 return GAA_OK;
934                 break;
935         case GAAOPTID_inder:
936         OK = 0;
937 #line 112 "certtool.gaa"
938 { gaaval->incert_format=1 ;};
939
940                 return GAA_OK;
941                 break;
942         case GAAOPTID_export_ciphers:
943         OK = 0;
944 #line 109 "certtool.gaa"
945 { gaaval->export=1 ;};
946
947                 return GAA_OK;
948                 break;
949         case GAAOPTID_hash:
950         OK = 0;
951                 GAA_TESTMOREARGS;
952                 GAA_FILL(GAATMP_hash.arg1, gaa_getstr, GAATMP_hash.size1);
953                 gaa_index++;
954 #line 106 "certtool.gaa"
955 { gaaval->hash = GAATMP_hash.arg1 ;};
956
957                 return GAA_OK;
958                 break;
959         case GAAOPTID_dsa:
960         OK = 0;
961 #line 103 "certtool.gaa"
962 { gaaval->dsa=1 ;};
963
964                 return GAA_OK;
965                 break;
966         case GAAOPTID_pkcs8:
967         OK = 0;
968 #line 100 "certtool.gaa"
969 { gaaval->pkcs8=1 ;};
970
971                 return GAA_OK;
972                 break;
973         case GAAOPTID_to_p8:
974         OK = 0;
975 #line 97 "certtool.gaa"
976 { gaaval->action = ACTION_GENERATE_PKCS8; ;};
977
978                 return GAA_OK;
979                 break;
980         case GAAOPTID_to_p12:
981         OK = 0;
982 #line 95 "certtool.gaa"
983 { gaaval->action = ACTION_TO_PKCS12; ;};
984
985                 return GAA_OK;
986                 break;
987         case GAAOPTID_v1:
988         OK = 0;
989 #line 93 "certtool.gaa"
990 { gaaval->v1_cert = 1; ;};
991
992                 return GAA_OK;
993                 break;
994         case GAAOPTID_fix_key:
995         OK = 0;
996 #line 90 "certtool.gaa"
997 { gaaval->privkey_op=1; gaaval->fix_key = 1; ;};
998
999                 return GAA_OK;
1000                 break;
1001         case GAAOPTID_pubkey_info:
1002         OK = 0;
1003 #line 87 "certtool.gaa"
1004 { gaaval->action = ACTION_PUBKEY_INFO; ;};
1005
1006                 return GAA_OK;
1007                 break;
1008         case GAAOPTID_pgp_key_info:
1009         OK = 0;
1010 #line 85 "certtool.gaa"
1011 { gaaval->privkey_op=1; gaaval->action = ACTION_PGP_PRIVKEY_INFO; ;};
1012
1013                 return GAA_OK;
1014                 break;
1015         case GAAOPTID_key_info:
1016         OK = 0;
1017 #line 83 "certtool.gaa"
1018 { gaaval->privkey_op=1; gaaval->action = ACTION_PRIVKEY_INFO; ;};
1019
1020                 return GAA_OK;
1021                 break;
1022         case GAAOPTID_smime_to_p7:
1023         OK = 0;
1024 #line 79 "certtool.gaa"
1025 { gaaval->action = ACTION_SMIME_TO_P7; ;};
1026
1027                 return GAA_OK;
1028                 break;
1029         case GAAOPTID_p7_info:
1030         OK = 0;
1031 #line 77 "certtool.gaa"
1032 { gaaval->action = ACTION_P7_INFO; ;};
1033
1034                 return GAA_OK;
1035                 break;
1036         case GAAOPTID_p12_info:
1037         OK = 0;
1038 #line 75 "certtool.gaa"
1039 { gaaval->action = ACTION_PKCS12_INFO; ;};
1040
1041                 return GAA_OK;
1042                 break;
1043         case GAAOPTID_no_crq_extensions:
1044         OK = 0;
1045 #line 73 "certtool.gaa"
1046 { gaaval->crq_extensions = 0; ;};
1047
1048                 return GAA_OK;
1049                 break;
1050         case GAAOPTID_crq_info:
1051         OK = 0;
1052 #line 70 "certtool.gaa"
1053 { gaaval->action = ACTION_REQUEST; ;};
1054
1055                 return GAA_OK;
1056                 break;
1057         case GAAOPTID_crl_info:
1058         OK = 0;
1059 #line 68 "certtool.gaa"
1060 { gaaval->action = ACTION_CRL_INFO; ;};
1061
1062                 return GAA_OK;
1063                 break;
1064         case GAAOPTID_pgp_ring_info:
1065         OK = 0;
1066 #line 66 "certtool.gaa"
1067 { gaaval->action = ACTION_RING_INFO; ;};
1068
1069                 return GAA_OK;
1070                 break;
1071         case GAAOPTID_pgp_certificate_info:
1072         OK = 0;
1073 #line 64 "certtool.gaa"
1074 { gaaval->action = ACTION_PGP_INFO; ;};
1075
1076                 return GAA_OK;
1077                 break;
1078         case GAAOPTID_certificate_pubkey:
1079         OK = 0;
1080 #line 62 "certtool.gaa"
1081 { gaaval->action = ACTION_CERT_PUBKEY; ;};
1082
1083                 return GAA_OK;
1084                 break;
1085         case GAAOPTID_certificate_info:
1086         OK = 0;
1087 #line 60 "certtool.gaa"
1088 { gaaval->action = ACTION_CERT_INFO; ;};
1089
1090                 return GAA_OK;
1091                 break;
1092         case GAAOPTID_password:
1093         OK = 0;
1094                 GAA_TESTMOREARGS;
1095                 GAA_FILL(GAATMP_password.arg1, gaa_getstr, GAATMP_password.size1);
1096                 gaa_index++;
1097 #line 58 "certtool.gaa"
1098 { gaaval->pass = GAATMP_password.arg1 ;};
1099
1100                 return GAA_OK;
1101                 break;
1102         case GAAOPTID_load_ca_certificate:
1103         OK = 0;
1104                 GAA_TESTMOREARGS;
1105                 GAA_FILL(GAATMP_load_ca_certificate.arg1, gaa_getstr, GAATMP_load_ca_certificate.size1);
1106                 gaa_index++;
1107 #line 55 "certtool.gaa"
1108 { gaaval->ca = GAATMP_load_ca_certificate.arg1 ;};
1109
1110                 return GAA_OK;
1111                 break;
1112         case GAAOPTID_load_ca_privkey:
1113         OK = 0;
1114                 GAA_TESTMOREARGS;
1115                 GAA_FILL(GAATMP_load_ca_privkey.arg1, gaa_getstr, GAATMP_load_ca_privkey.size1);
1116                 gaa_index++;
1117 #line 52 "certtool.gaa"
1118 { gaaval->ca_privkey = GAATMP_load_ca_privkey.arg1 ;};
1119
1120                 return GAA_OK;
1121                 break;
1122         case GAAOPTID_load_certificate:
1123         OK = 0;
1124                 GAA_TESTMOREARGS;
1125                 GAA_FILL(GAATMP_load_certificate.arg1, gaa_getstr, GAATMP_load_certificate.size1);
1126                 gaa_index++;
1127 #line 49 "certtool.gaa"
1128 { gaaval->cert = GAATMP_load_certificate.arg1 ;};
1129
1130                 return GAA_OK;
1131                 break;
1132         case GAAOPTID_load_request:
1133         OK = 0;
1134                 GAA_TESTMOREARGS;
1135                 GAA_FILL(GAATMP_load_request.arg1, gaa_getstr, GAATMP_load_request.size1);
1136                 gaa_index++;
1137 #line 46 "certtool.gaa"
1138 { gaaval->request = GAATMP_load_request.arg1 ;};
1139
1140                 return GAA_OK;
1141                 break;
1142         case GAAOPTID_load_pubkey:
1143         OK = 0;
1144                 GAA_TESTMOREARGS;
1145                 GAA_FILL(GAATMP_load_pubkey.arg1, gaa_getstr, GAATMP_load_pubkey.size1);
1146                 gaa_index++;
1147 #line 43 "certtool.gaa"
1148 { gaaval->pubkey = GAATMP_load_pubkey.arg1 ;};
1149
1150                 return GAA_OK;
1151                 break;
1152         case GAAOPTID_load_privkey:
1153         OK = 0;
1154                 GAA_TESTMOREARGS;
1155                 GAA_FILL(GAATMP_load_privkey.arg1, gaa_getstr, GAATMP_load_privkey.size1);
1156                 gaa_index++;
1157 #line 40 "certtool.gaa"
1158 { gaaval->privkey = GAATMP_load_privkey.arg1 ;};
1159
1160                 return GAA_OK;
1161                 break;
1162         case GAAOPTID_get_dh_params:
1163         OK = 0;
1164 #line 37 "certtool.gaa"
1165 { gaaval->action=ACTION_GET_DH; ;};
1166
1167                 return GAA_OK;
1168                 break;
1169         case GAAOPTID_generate_dh_params:
1170         OK = 0;
1171 #line 36 "certtool.gaa"
1172 { gaaval->action=ACTION_GENERATE_DH; ;};
1173
1174                 return GAA_OK;
1175                 break;
1176         case GAAOPTID_verify_crl:
1177         OK = 0;
1178 #line 34 "certtool.gaa"
1179 { gaaval->action=ACTION_VERIFY_CRL; ;};
1180
1181                 return GAA_OK;
1182                 break;
1183         case GAAOPTID_verify_chain:
1184         OK = 0;
1185 #line 32 "certtool.gaa"
1186 { gaaval->action=ACTION_VERIFY_CHAIN; ;};
1187
1188                 return GAA_OK;
1189                 break;
1190         case GAAOPTID_generate_request:
1191         OK = 0;
1192 #line 30 "certtool.gaa"
1193 { gaaval->privkey_op=1; gaaval->action=ACTION_GENERATE_REQUEST; ;};
1194
1195                 return GAA_OK;
1196                 break;
1197         case GAAOPTID_generate_privkey:
1198         OK = 0;
1199 #line 28 "certtool.gaa"
1200 { gaaval->privkey_op=1; gaaval->action=ACTION_GENERATE_PRIVKEY; ;};
1201
1202                 return GAA_OK;
1203                 break;
1204         case GAAOPTID_update_certificate:
1205         OK = 0;
1206 #line 26 "certtool.gaa"
1207 { gaaval->action=ACTION_UPDATE_CERTIFICATE; ;};
1208
1209                 return GAA_OK;
1210                 break;
1211         case GAAOPTID_generate_crl:
1212         OK = 0;
1213 #line 24 "certtool.gaa"
1214 { gaaval->action=ACTION_GENERATE_CRL; ;};
1215
1216                 return GAA_OK;
1217                 break;
1218         case GAAOPTID_generate_proxy:
1219         OK = 0;
1220 #line 22 "certtool.gaa"
1221 { gaaval->action=ACTION_GENERATE_PROXY; ;};
1222
1223                 return GAA_OK;
1224                 break;
1225         case GAAOPTID_generate_certificate:
1226         OK = 0;
1227 #line 20 "certtool.gaa"
1228 { gaaval->action=ACTION_GENERATE_CERTIFICATE; ;};
1229
1230                 return GAA_OK;
1231                 break;
1232         case GAAOPTID_generate_self_signed:
1233         OK = 0;
1234 #line 18 "certtool.gaa"
1235 { gaaval->action=ACTION_SELF_SIGNED; ;};
1236
1237                 return GAA_OK;
1238                 break;
1239
1240 #line 413 "gaa.skel"
1241     default: break;
1242     }
1243     return GAA_ERROR_UNKNOWN;
1244 }
1245
1246 int gaa(int argc, char **argv, gaainfo *gaaval)
1247 {
1248     int tmp1, tmp2;
1249     int i, j;
1250     char *opt_list;
1251
1252     GAAargv = argv;
1253     GAAargc = argc;
1254
1255     opt_list = (char*) gaa_malloc(GAA_NB_OPTION + 1);
1256
1257     for(i = 0; i < GAA_NB_OPTION + 1; i++)
1258         opt_list[i] = 0;
1259     /* initialization */
1260     if(inited == 0)
1261     {
1262
1263 #line 147 "certtool.gaa"
1264 { gaaval->bits = 0; gaaval->pkcs8 = 0; gaaval->privkey = NULL; gaaval->ca=NULL; gaaval->ca_privkey = NULL;
1265         gaaval->debug=1; gaaval->request = NULL; gaaval->infile = NULL; gaaval->outfile = NULL; gaaval->cert = NULL; 
1266         gaaval->incert_format = 0; gaaval->outcert_format = 0; gaaval->action=-1; gaaval->pass = NULL; gaaval->v1_cert = 0;
1267         gaaval->export = 0; gaaval->template = NULL; gaaval->hash=NULL; gaaval->fix_key = 0; gaaval->quick_random=1; 
1268         gaaval->privkey_op = 0; gaaval->pkcs_cipher = "aes-128"; gaaval->crq_extensions=1; ;};
1269
1270     }
1271     inited = 1;
1272 #line 438 "gaa.skel"
1273     gaa_arg_used = NULL;
1274
1275     if (argc > 0) {
1276       gaa_arg_used = gaa_malloc(argc * sizeof(char));
1277     }
1278
1279     for(i = 1; i < argc; i++)
1280         gaa_arg_used[i] = 0;
1281     for(i = 1; i < argc; i++)
1282     {
1283         if(gaa_arg_used[i] == 0)
1284         {
1285             j = 0;
1286             tmp1 = gaa_is_an_argument(GAAargv[i]);
1287             switch(tmp1)
1288             {
1289             case GAA_WORD_OPTION:
1290                 j++;
1291             case GAA_LETTER_OPTION:
1292                 j++;
1293                 tmp2 = gaa_get_option_num(argv[i]+j, tmp1);
1294                 if(tmp2 == GAA_ERROR_NOMATCH)
1295                 {
1296                     printf("Invalid option '%s'\n", argv[i]+j);
1297                     return 0;
1298                 }
1299                 switch(gaa_try(tmp2, i+1, gaaval, opt_list))
1300                 {
1301                 case GAA_ERROR_NOTENOUGH_ARGS:
1302                     printf("'%s': not enough arguments\n",gaa_current_option);
1303                     return 0;
1304                 case GAA_ERROR_INVALID_ARG:
1305                     printf("Invalid arguments\n");
1306                     return 0;
1307                 case GAA_OK:
1308                     break;
1309                 default:
1310                     printf("Unknown error\n");
1311                 }
1312                 gaa_arg_used[i] = 1;
1313                 break;
1314             case GAA_MULTIPLE_OPTION:
1315                 for(j = 1; j < strlen(argv[i]); j++)
1316                 {
1317                     tmp2 = gaa_get_option_num(argv[i]+j, tmp1);
1318                     if(tmp2 == GAA_ERROR_NOMATCH)
1319                     {
1320                         printf("Invalid option '%c'\n", *(argv[i]+j));
1321                         return 0;
1322                     }
1323                     switch(gaa_try(tmp2, i+1, gaaval, opt_list))
1324                     {
1325                     case GAA_ERROR_NOTENOUGH_ARGS:
1326                         printf("'%s': not enough arguments\n",gaa_current_option);
1327                         return 0;
1328                     case GAA_ERROR_INVALID_ARG:
1329                         printf("Invalid arguments\n");
1330                         return 0;
1331                     case GAA_OK:
1332                         break;
1333                     default:
1334                         printf("Unknown error\n");
1335                     }
1336                 }
1337                 gaa_arg_used[i] = 1;
1338                 break;
1339             default: break;
1340             }
1341         }
1342     }
1343 if(gaa_processing_file == 0)
1344 {
1345
1346 #line 507 "gaa.skel"
1347 #ifdef GAA_REST_EXISTS
1348     switch(gaa_try(GAA_REST, 1, gaaval, opt_list))
1349     {
1350     case GAA_ERROR_NOTENOUGH_ARGS:
1351         printf("Rest: not enough arguments\n");
1352         return 0;
1353     case GAA_ERROR_INVALID_ARG:
1354         printf("Invalid arguments\n");
1355         return 0;
1356     case GAA_OK:
1357         break;
1358     default:
1359         printf("Unknown error\n");
1360     }
1361 #endif
1362 }
1363     for(i = 1; i < argc; i++)
1364     {
1365         if(gaa_arg_used[i] == 0)
1366         {
1367             printf("Too many arguments\n");
1368             return 0;
1369         }
1370     }
1371     free(gaa_arg_used);
1372     free(opt_list);
1373     return -1;
1374 }
1375
1376 struct gaastrnode
1377 {
1378     char *str;
1379     struct gaastrnode *next;
1380 };
1381
1382 typedef struct gaastrnode gaa_str_node;
1383
1384 static int gaa_internal_get_next_str(FILE *file, gaa_str_node *tmp_str, int argc)
1385 {
1386     int pos_ini;
1387     int a;
1388     int i = 0, len = 0, newline = 0;
1389
1390     if(argc == 1) {
1391         newline = 1;
1392         len = 2;
1393     }
1394     
1395     a = fgetc( file);
1396     if (a == EOF) return 0;
1397
1398     while(a == ' ' || a == 9 || a == '\n')
1399     {
1400         if(a == '\n')
1401         {
1402             newline=1;
1403             len = 2;
1404         }
1405         a = fgetc( file);
1406         if (a == EOF) return 0;
1407     }
1408
1409     pos_ini = ftell(file) - 1;
1410
1411     while(a != ' ' && a != 9 && a != '\n')
1412     {
1413
1414         len++;
1415         a = fgetc( file);
1416         if(a==EOF) return 0;
1417     }
1418
1419     len += 1;
1420     tmp_str->str = gaa_malloc((len) * sizeof(char));
1421
1422     if(newline == 1)
1423     {
1424         tmp_str->str[0] = '-';
1425         tmp_str->str[1] = '-';
1426         i = 2;
1427     }
1428     else
1429     {
1430         i = 0;
1431     }
1432
1433     fseek(file,pos_ini, SEEK_SET);
1434     do
1435     {
1436         a = fgetc( file);
1437
1438         if (a == EOF) {
1439             i+=2;
1440             break;
1441         }
1442         tmp_str->str[i] = a;
1443         i++;
1444     }
1445     while(a != ' ' && a != 9 && a != '\n' && i < len);
1446
1447     tmp_str->str[i - 1] = 0;
1448
1449     fseek(file,- 1, SEEK_CUR);
1450 /*    printf("%d\n", ftell(file)); */
1451     
1452     return -1;
1453 }
1454
1455 int gaa_file(const char *name, gaainfo *gaaval)
1456 {
1457     gaa_str_node *first_str, **tmp_str, *tmp_str2;
1458     int rval, i;
1459     char **argv;
1460     int argc = 0;
1461     FILE *file;
1462
1463     gaa_processing_file = 1;
1464     
1465     if((file = fopen(name, "r")) == NULL)
1466     {
1467         printf("Couldn't open '%s' configuration file for reading\n", name);
1468         return 1;
1469     }
1470     
1471     tmp_str = &first_str;
1472     do
1473     {
1474         argc++;
1475         *tmp_str = gaa_malloc(sizeof(gaa_str_node));
1476
1477         (*tmp_str)->str = NULL;
1478         (*tmp_str)->next = NULL;
1479
1480         rval = gaa_internal_get_next_str(file, *tmp_str, argc);
1481         tmp_str = &((*tmp_str)->next);
1482     }
1483     while(rval == -1);
1484     
1485     if(rval == 1)
1486         return 0;
1487     
1488     argv = gaa_malloc((1 + argc) * sizeof(char*));
1489
1490     tmp_str2 = first_str;
1491     argv[0] = "cfg";
1492     for(i = 1; i < argc; i++)
1493     {
1494         argv[i] = tmp_str2->str;
1495         tmp_str2 = tmp_str2->next;
1496     }
1497
1498     rval = gaa(argc, argv, gaaval);
1499     gaa_processing_file = 0;
1500     return rval;
1501 }