Merge branch 'master' of ssh://civodul@git.savannah.gnu.org/srv/git/gnutls
[gnutls.git] / src / certtool-gaa.c
blob8f7f6beaea952c2474542788253085172fa6ff53
1 /* File generated by GAA 1.6.6
2 */
3 #define GAA_NO_WIN32
4 #line 1 "certtool.gaa"
7 /* C declarations */
9 #include <config.h>
10 #ifdef _WIN32
11 # include <io.h>
12 #endif
14 void certtool_version(void);
16 #include <stdio.h>
17 #include <string.h>
18 #include <stdlib.h>
20 #ifndef GAA_NO_WIN32
21 #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(WINDOWS)
22 #define GAA_WIN32
23 #endif
24 #endif
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);
33 return ret;
36 static void __gaa_helpsingle(char short_name, char *name,
37 char *arg_desc, char *opt_help)
39 int col1, col3, col4, tabsize = 3, curr;
40 int i;
42 col1 = 5; /* Default values */
43 col3 = 30;
44 col4 = 70;
46 curr = 0;
47 for(i = 0; i < col1; i++)
49 printf(" ");
50 curr++;
52 if(short_name)
54 if(name && *name)
56 printf("-%c, ", short_name);
57 curr += 4;
59 else
61 printf("-%c ", short_name);
62 curr += 3;
65 if(name && *name)
67 printf("--%s ", name);
68 curr += 3 + strlen(name);
70 if(arg_desc && *arg_desc)
72 printf("%s ", arg_desc);
73 curr += 1 + strlen(arg_desc);
75 if(curr >= col3)
77 printf("\n");
78 curr = 0;
80 if(opt_help) /* let's print the option's help body */
82 const char *str = opt_help;
83 while(*str)
85 while(curr < col3)
87 printf(" ");
88 curr++;
90 switch(*str)
92 case '\n':
93 printf("\n");
94 curr = 0;
95 break;
96 case '\t':
99 printf(" ");
100 curr++;
102 while((curr - col3) % tabsize != 0 && curr < col4);
103 case ' ':
104 if(*str == ' ')
106 curr++;
107 printf(" ");
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++;
118 if(curr >= col4)
120 printf("\n");
121 curr = 0;
123 str++;
126 printf("\n");
129 void gaa_help(void)
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-request", "FILE ", "Certificate request file to use.");
145 __gaa_helpsingle(0, "load-certificate", "FILE ", "Certificate file to use.");
146 __gaa_helpsingle(0, "load-ca-privkey", "FILE ", "Certificate authority's private key file to use.");
147 __gaa_helpsingle(0, "load-ca-certificate", "FILE ", "Certificate authority's certificate file to use.");
148 __gaa_helpsingle(0, "password", "PASSWORD ", "Password to use.");
149 __gaa_helpsingle('i', "certificate-info", "", "Print information on a certificate.");
150 __gaa_helpsingle(0, "pgp-certificate-info", "", "Print information on a OpenPGP certificate.");
151 __gaa_helpsingle(0, "pgp-ring-info", "", "Print information on a keyring structure.");
152 __gaa_helpsingle('l', "crl-info", "", "Print information on a CRL.");
153 __gaa_helpsingle(0, "p12-info", "", "Print information on a PKCS #12 structure.");
154 __gaa_helpsingle(0, "p7-info", "", "Print information on a PKCS #7 structure.");
155 __gaa_helpsingle(0, "smime-to-p7", "", "Convert S/MIME to PKCS #7 structure.");
156 __gaa_helpsingle('k', "key-info", "", "Print information on a private key.");
157 __gaa_helpsingle(0, "pgp-key-info", "", "Print information on a OpenPGP private key.");
158 __gaa_helpsingle(0, "fix-key", "", "Regenerate the parameters in a private key.");
159 __gaa_helpsingle(0, "v1", "", "Generate an X.509 version 1 certificate (no extensions).");
160 __gaa_helpsingle(0, "to-p12", "", "Generate a PKCS #12 structure.");
161 __gaa_helpsingle(0, "to-p8", "", "Generate a PKCS #8 key structure.");
162 __gaa_helpsingle('8', "pkcs8", "", "Use PKCS #8 format for private keys.");
163 __gaa_helpsingle(0, "dsa", "", "Use DSA keys.");
164 __gaa_helpsingle(0, "hash", "STR ", "Hash algorithm to use for signing (MD5,SHA1,RMD160,SHA256,SHA384,SHA512).");
165 __gaa_helpsingle(0, "export-ciphers", "", "Use weak encryption algorithms.");
166 __gaa_helpsingle(0, "inder", "", "Use DER format for input certificates and private keys.");
167 __gaa_helpsingle(0, "outder", "", "Use DER format for output certificates and private keys.");
168 __gaa_helpsingle(0, "bits", "BITS ", "specify the number of bits for key generation.");
169 __gaa_helpsingle(0, "disable-quick-random", "", "Use /dev/random for key generationg, thus increasing the quality of randomness used.");
170 __gaa_helpsingle(0, "outfile", "FILE ", "Output file.");
171 __gaa_helpsingle(0, "infile", "FILE ", "Input file.");
172 __gaa_helpsingle(0, "template", "FILE ", "Template file to use for non interactive operation.");
173 __gaa_helpsingle('d', "debug", "LEVEL ", "specify the debug level. Default is 1.");
174 __gaa_helpsingle('h', "help", "", "shows this help text");
175 __gaa_helpsingle('v', "version", "", "shows the program's version");
177 #line 100 "gaa.skel"
179 /* Copy of C area */
181 #line 104 "gaa.skel"
182 /* GAA HEADER */
183 #ifndef GAA_HEADER_POKY
184 #define GAA_HEADER_POKY
186 typedef struct _gaainfo gaainfo;
188 struct _gaainfo
190 #line 118 "certtool.gaa"
191 int debug;
192 #line 114 "certtool.gaa"
193 char *template;
194 #line 111 "certtool.gaa"
195 char *infile;
196 #line 108 "certtool.gaa"
197 char *outfile;
198 #line 105 "certtool.gaa"
199 int quick_random;
200 #line 102 "certtool.gaa"
201 int bits;
202 #line 99 "certtool.gaa"
203 int outcert_format;
204 #line 96 "certtool.gaa"
205 int incert_format;
206 #line 93 "certtool.gaa"
207 int export;
208 #line 90 "certtool.gaa"
209 char *hash;
210 #line 87 "certtool.gaa"
211 int dsa;
212 #line 84 "certtool.gaa"
213 int pkcs8;
214 #line 77 "certtool.gaa"
215 int v1_cert;
216 #line 74 "certtool.gaa"
217 int fix_key;
218 #line 53 "certtool.gaa"
219 char *pass;
220 #line 50 "certtool.gaa"
221 char *ca;
222 #line 47 "certtool.gaa"
223 char *ca_privkey;
224 #line 44 "certtool.gaa"
225 char *cert;
226 #line 41 "certtool.gaa"
227 char *request;
228 #line 38 "certtool.gaa"
229 char *privkey;
230 #line 16 "certtool.gaa"
231 int action;
233 #line 114 "gaa.skel"
236 #ifdef __cplusplus
237 extern "C"
239 #endif
241 int gaa(int argc, char *argv[], gaainfo *gaaval);
243 void gaa_help(void);
245 int gaa_file(const char *name, gaainfo *gaaval);
247 #ifdef __cplusplus
249 #endif
252 #endif
254 #line 135 "gaa.skel"
256 /* C declarations */
258 #define GAAERROR(x) \
260 gaa_error = 1; \
261 return x; \
264 static char *gaa_current_option;
265 static int gaa_error = 0;
267 /* Generated by gaa */
269 #include <string.h>
270 #include <stdlib.h>
273 #define GAA_OK -1
275 #define GAA_ERROR_NOMATCH 0
276 #define GAA_ERROR_NOTENOUGH_ARGS 1
277 #define GAA_ERROR_INVALID_ARG 2
278 #define GAA_ERROR_UNKNOWN 3
280 #define GAA_NOT_AN_OPTION 0
281 #define GAA_WORD_OPTION 1
282 #define GAA_LETTER_OPTION 2
283 #define GAA_MULTIPLE_OPTION 3
285 #define GAA_REST 0
286 #define GAA_NB_OPTION 44
287 #define GAAOPTID_version 1
288 #define GAAOPTID_help 2
289 #define GAAOPTID_debug 3
290 #define GAAOPTID_template 4
291 #define GAAOPTID_infile 5
292 #define GAAOPTID_outfile 6
293 #define GAAOPTID_disable_quick_random 7
294 #define GAAOPTID_bits 8
295 #define GAAOPTID_outder 9
296 #define GAAOPTID_inder 10
297 #define GAAOPTID_export_ciphers 11
298 #define GAAOPTID_hash 12
299 #define GAAOPTID_dsa 13
300 #define GAAOPTID_pkcs8 14
301 #define GAAOPTID_to_p8 15
302 #define GAAOPTID_to_p12 16
303 #define GAAOPTID_v1 17
304 #define GAAOPTID_fix_key 18
305 #define GAAOPTID_pgp_key_info 19
306 #define GAAOPTID_key_info 20
307 #define GAAOPTID_smime_to_p7 21
308 #define GAAOPTID_p7_info 22
309 #define GAAOPTID_p12_info 23
310 #define GAAOPTID_crl_info 24
311 #define GAAOPTID_pgp_ring_info 25
312 #define GAAOPTID_pgp_certificate_info 26
313 #define GAAOPTID_certificate_info 27
314 #define GAAOPTID_password 28
315 #define GAAOPTID_load_ca_certificate 29
316 #define GAAOPTID_load_ca_privkey 30
317 #define GAAOPTID_load_certificate 31
318 #define GAAOPTID_load_request 32
319 #define GAAOPTID_load_privkey 33
320 #define GAAOPTID_get_dh_params 34
321 #define GAAOPTID_generate_dh_params 35
322 #define GAAOPTID_verify_crl 36
323 #define GAAOPTID_verify_chain 37
324 #define GAAOPTID_generate_request 38
325 #define GAAOPTID_generate_privkey 39
326 #define GAAOPTID_update_certificate 40
327 #define GAAOPTID_generate_crl 41
328 #define GAAOPTID_generate_proxy 42
329 #define GAAOPTID_generate_certificate 43
330 #define GAAOPTID_generate_self_signed 44
332 #line 168 "gaa.skel"
334 #define GAA_CHECK1STR(a,b) \
335 if(a[0] == str[0]) \
337 gaa_current_option = a; \
338 return b; \
341 #define GAA_CHECKSTR(a,b) \
342 if(strcmp(a,str) == 0) \
344 gaa_current_option = a; \
345 return b; \
348 #define GAA_TESTMOREARGS \
349 if(!OK) \
351 while((gaa_last_non_option != gaa_index) && (gaa_arg_used[gaa_index] == 1)) \
352 gaa_index++; \
353 if(gaa_last_non_option == gaa_index) \
354 return GAA_ERROR_NOTENOUGH_ARGS; \
357 #define GAA_TESTMOREOPTIONALARGS \
358 if(!OK) \
360 while((gaa_last_non_option != gaa_index) && (gaa_arg_used[gaa_index] == 1)) \
361 gaa_index++; \
362 if(gaa_last_non_option == gaa_index) \
363 OK = 1; \
366 #define GAA_FILL_2ARGS(target, func) \
367 target = func(GAAargv[gaa_index]); \
368 gaa_arg_used[gaa_index] = 1; \
369 if(gaa_error == 1) \
371 gaa_error = 0; \
372 return GAA_ERROR_INVALID_ARG; \
377 #define GAA_FILL(target, func, num) \
378 if(!OK) \
380 target = func(GAAargv[gaa_index]); \
381 gaa_arg_used[gaa_index] = 1; \
382 if(gaa_error == 1) \
384 gaa_error = 0; \
385 return GAA_ERROR_INVALID_ARG; \
387 num = 1; \
389 else \
391 num = 0; \
394 #define GAA_LIST_FILL(target, func, type ,num) \
395 if(!OK) \
397 num = 0; \
398 target = NULL; \
399 if ( gaa_last_non_option - gaa_index > 0) \
400 target = gaa_malloc((gaa_last_non_option - gaa_index) * sizeof(type));\
401 for(; gaa_index < gaa_last_non_option; gaa_index++) \
403 if(gaa_arg_used[gaa_index] == 0) \
405 GAA_FILL_2ARGS(target[num], func); \
406 num++; \
409 if(num == 0) \
410 return GAA_ERROR_NOTENOUGH_ARGS; \
413 #define GAA_OPTIONALLIST_FILL(target, func, type ,num) \
414 if(!OK) \
416 num = 0; \
417 target = NULL; \
418 if ( gaa_last_non_option - gaa_index > 0) \
419 target = gaa_malloc((gaa_last_non_option - gaa_index) * sizeof(type));\
420 for(; gaa_index < gaa_last_non_option; gaa_index++) \
422 if(gaa_arg_used[gaa_index] == 0) \
424 GAA_FILL_2ARGS(target[num], func); \
425 num++; \
430 #define GAA_OBLIGAT(str) \
431 k = 0; \
432 for(i = 0; i < strlen(str); i++) \
434 j = gaa_get_option_num(str + i, GAA_LETTER_OPTION); \
435 if(j == GAA_ERROR_NOMATCH) \
437 printf("Error: invalid 'obligat' set\n"); \
438 exit(-1); \
440 if(opt_list[j] == 1) \
441 k = 1; \
443 if(k == 0) \
445 if(strlen(str) == 1) \
446 printf("You must give the -%s option\n", str); \
447 else \
448 printf("You must give at least one option of '%s'\n", str); \
449 return 0; \
452 #define GAA_INCOMP(str) \
453 k = 0; \
454 for(i = 0; i < strlen(str); i++) \
456 j = gaa_get_option_num(str + i, GAA_LETTER_OPTION); \
457 if(j == GAA_ERROR_NOMATCH) \
459 printf("Error: invalid 'obligat' set\n"); \
460 exit(-1); \
462 if(opt_list[j] == 1) \
463 k++; \
465 if(k > 1) \
467 printf("The options '%s' are incompatible\n", str); \
468 return 0; \
472 static char **GAAargv;
473 static int GAAargc;
474 static char *gaa_arg_used;
475 static int gaa_processing_file = 0;
476 static int inited = 0;
478 static int gaa_getint(char *arg)
480 int tmp;
481 char a;
482 if(sscanf(arg, "%d%c", &tmp, &a) < 1)
484 printf("Option %s: '%s' isn't an integer\n", gaa_current_option, arg);
485 GAAERROR(-1);
487 return tmp;
490 static char gaa_getchar(char *arg)
492 if(strlen(arg) != 1)
494 printf("Option %s: '%s' isn't an character\n", gaa_current_option, arg);
495 GAAERROR(-1);
497 return arg[0];
500 static char* gaa_getstr(char *arg)
502 return arg;
504 static float gaa_getfloat(char *arg)
506 float tmp;
507 char a;
508 if(sscanf(arg, "%f%c", &tmp, &a) < 1)
510 printf("Option %s: '%s' isn't a float number\n", gaa_current_option, arg);
511 GAAERROR(-1);
513 return tmp;
515 /* option structures */
517 struct GAAOPTION_debug
519 int arg1;
520 int size1;
523 struct GAAOPTION_template
525 char* arg1;
526 int size1;
529 struct GAAOPTION_infile
531 char* arg1;
532 int size1;
535 struct GAAOPTION_outfile
537 char* arg1;
538 int size1;
541 struct GAAOPTION_bits
543 int arg1;
544 int size1;
547 struct GAAOPTION_hash
549 char* arg1;
550 int size1;
553 struct GAAOPTION_password
555 char* arg1;
556 int size1;
559 struct GAAOPTION_load_ca_certificate
561 char* arg1;
562 int size1;
565 struct GAAOPTION_load_ca_privkey
567 char* arg1;
568 int size1;
571 struct GAAOPTION_load_certificate
573 char* arg1;
574 int size1;
577 struct GAAOPTION_load_request
579 char* arg1;
580 int size1;
583 struct GAAOPTION_load_privkey
585 char* arg1;
586 int size1;
589 #line 349 "gaa.skel"
590 static int gaa_is_an_argument(char *str)
592 #ifdef GAA_WIN32
593 if(str[0] == '/' && str[1] != 0)
594 return GAA_MULTIPLE_OPTION;
595 #endif
596 if(str[0] != '-')
597 return GAA_NOT_AN_OPTION;
598 if(str[1] == 0)
599 return GAA_NOT_AN_OPTION;
600 if(str[1] == '-')
602 if(str[2] != 0)
603 return GAA_WORD_OPTION;
604 else
605 return GAA_NOT_AN_OPTION;
607 if(str[2] == 0)
608 return GAA_LETTER_OPTION;
609 else
610 return GAA_MULTIPLE_OPTION;
613 static int gaa_get_option_num(char *str, int status)
615 switch(status)
617 case GAA_LETTER_OPTION:
618 GAA_CHECK1STR("d", GAAOPTID_debug);
619 GAA_CHECK1STR("", GAAOPTID_template);
620 GAA_CHECK1STR("", GAAOPTID_infile);
621 GAA_CHECK1STR("", GAAOPTID_outfile);
622 GAA_CHECK1STR("", GAAOPTID_bits);
623 GAA_CHECK1STR("", GAAOPTID_hash);
624 GAA_CHECK1STR("", GAAOPTID_password);
625 GAA_CHECK1STR("", GAAOPTID_load_ca_certificate);
626 GAA_CHECK1STR("", GAAOPTID_load_ca_privkey);
627 GAA_CHECK1STR("", GAAOPTID_load_certificate);
628 GAA_CHECK1STR("", GAAOPTID_load_request);
629 GAA_CHECK1STR("", GAAOPTID_load_privkey);
630 case GAA_MULTIPLE_OPTION:
631 #line 375 "gaa.skel"
632 GAA_CHECK1STR("v", GAAOPTID_version);
633 GAA_CHECK1STR("h", GAAOPTID_help);
634 GAA_CHECK1STR("", GAAOPTID_disable_quick_random);
635 GAA_CHECK1STR("", GAAOPTID_outder);
636 GAA_CHECK1STR("", GAAOPTID_inder);
637 GAA_CHECK1STR("", GAAOPTID_export_ciphers);
638 GAA_CHECK1STR("", GAAOPTID_dsa);
639 GAA_CHECK1STR("8", GAAOPTID_pkcs8);
640 GAA_CHECK1STR("", GAAOPTID_to_p8);
641 GAA_CHECK1STR("", GAAOPTID_to_p12);
642 GAA_CHECK1STR("", GAAOPTID_v1);
643 GAA_CHECK1STR("", GAAOPTID_fix_key);
644 GAA_CHECK1STR("", GAAOPTID_pgp_key_info);
645 GAA_CHECK1STR("k", GAAOPTID_key_info);
646 GAA_CHECK1STR("", GAAOPTID_smime_to_p7);
647 GAA_CHECK1STR("", GAAOPTID_p7_info);
648 GAA_CHECK1STR("", GAAOPTID_p12_info);
649 GAA_CHECK1STR("l", GAAOPTID_crl_info);
650 GAA_CHECK1STR("", GAAOPTID_pgp_ring_info);
651 GAA_CHECK1STR("", GAAOPTID_pgp_certificate_info);
652 GAA_CHECK1STR("i", GAAOPTID_certificate_info);
653 GAA_CHECK1STR("", GAAOPTID_get_dh_params);
654 GAA_CHECK1STR("", GAAOPTID_generate_dh_params);
655 GAA_CHECK1STR("", GAAOPTID_verify_crl);
656 GAA_CHECK1STR("e", GAAOPTID_verify_chain);
657 GAA_CHECK1STR("q", GAAOPTID_generate_request);
658 GAA_CHECK1STR("p", GAAOPTID_generate_privkey);
659 GAA_CHECK1STR("u", GAAOPTID_update_certificate);
660 GAA_CHECK1STR("", GAAOPTID_generate_crl);
661 GAA_CHECK1STR("", GAAOPTID_generate_proxy);
662 GAA_CHECK1STR("c", GAAOPTID_generate_certificate);
663 GAA_CHECK1STR("s", GAAOPTID_generate_self_signed);
665 #line 277 "gaa.skel"
666 break;
667 case GAA_WORD_OPTION:
668 GAA_CHECKSTR("version", GAAOPTID_version);
669 GAA_CHECKSTR("help", GAAOPTID_help);
670 GAA_CHECKSTR("debug", GAAOPTID_debug);
671 GAA_CHECKSTR("template", GAAOPTID_template);
672 GAA_CHECKSTR("infile", GAAOPTID_infile);
673 GAA_CHECKSTR("outfile", GAAOPTID_outfile);
674 GAA_CHECKSTR("disable-quick-random", GAAOPTID_disable_quick_random);
675 GAA_CHECKSTR("bits", GAAOPTID_bits);
676 GAA_CHECKSTR("outder", GAAOPTID_outder);
677 GAA_CHECKSTR("inder", GAAOPTID_inder);
678 GAA_CHECKSTR("export-ciphers", GAAOPTID_export_ciphers);
679 GAA_CHECKSTR("hash", GAAOPTID_hash);
680 GAA_CHECKSTR("dsa", GAAOPTID_dsa);
681 GAA_CHECKSTR("pkcs8", GAAOPTID_pkcs8);
682 GAA_CHECKSTR("to-p8", GAAOPTID_to_p8);
683 GAA_CHECKSTR("to-p12", GAAOPTID_to_p12);
684 GAA_CHECKSTR("v1", GAAOPTID_v1);
685 GAA_CHECKSTR("fix-key", GAAOPTID_fix_key);
686 GAA_CHECKSTR("pgp-key-info", GAAOPTID_pgp_key_info);
687 GAA_CHECKSTR("key-info", GAAOPTID_key_info);
688 GAA_CHECKSTR("smime-to-p7", GAAOPTID_smime_to_p7);
689 GAA_CHECKSTR("p7-info", GAAOPTID_p7_info);
690 GAA_CHECKSTR("p12-info", GAAOPTID_p12_info);
691 GAA_CHECKSTR("crl-info", GAAOPTID_crl_info);
692 GAA_CHECKSTR("pgp-ring-info", GAAOPTID_pgp_ring_info);
693 GAA_CHECKSTR("pgp-certificate-info", GAAOPTID_pgp_certificate_info);
694 GAA_CHECKSTR("certificate-info", GAAOPTID_certificate_info);
695 GAA_CHECKSTR("password", GAAOPTID_password);
696 GAA_CHECKSTR("load-ca-certificate", GAAOPTID_load_ca_certificate);
697 GAA_CHECKSTR("load-ca-privkey", GAAOPTID_load_ca_privkey);
698 GAA_CHECKSTR("load-certificate", GAAOPTID_load_certificate);
699 GAA_CHECKSTR("load-request", GAAOPTID_load_request);
700 GAA_CHECKSTR("load-privkey", GAAOPTID_load_privkey);
701 GAA_CHECKSTR("get-dh-params", GAAOPTID_get_dh_params);
702 GAA_CHECKSTR("generate-dh-params", GAAOPTID_generate_dh_params);
703 GAA_CHECKSTR("verify-crl", GAAOPTID_verify_crl);
704 GAA_CHECKSTR("verify-chain", GAAOPTID_verify_chain);
705 GAA_CHECKSTR("generate-request", GAAOPTID_generate_request);
706 GAA_CHECKSTR("generate-privkey", GAAOPTID_generate_privkey);
707 GAA_CHECKSTR("update-certificate", GAAOPTID_update_certificate);
708 GAA_CHECKSTR("generate-crl", GAAOPTID_generate_crl);
709 GAA_CHECKSTR("generate-proxy", GAAOPTID_generate_proxy);
710 GAA_CHECKSTR("generate-certificate", GAAOPTID_generate_certificate);
711 GAA_CHECKSTR("generate-self-signed", GAAOPTID_generate_self_signed);
713 #line 281 "gaa.skel"
714 break;
715 default: break;
717 return GAA_ERROR_NOMATCH;
720 static int gaa_try(int gaa_num, int gaa_index, gaainfo *gaaval, char *opt_list)
722 int OK = 0;
723 int gaa_last_non_option;
724 struct GAAOPTION_debug GAATMP_debug;
725 struct GAAOPTION_template GAATMP_template;
726 struct GAAOPTION_infile GAATMP_infile;
727 struct GAAOPTION_outfile GAATMP_outfile;
728 struct GAAOPTION_bits GAATMP_bits;
729 struct GAAOPTION_hash GAATMP_hash;
730 struct GAAOPTION_password GAATMP_password;
731 struct GAAOPTION_load_ca_certificate GAATMP_load_ca_certificate;
732 struct GAAOPTION_load_ca_privkey GAATMP_load_ca_privkey;
733 struct GAAOPTION_load_certificate GAATMP_load_certificate;
734 struct GAAOPTION_load_request GAATMP_load_request;
735 struct GAAOPTION_load_privkey GAATMP_load_privkey;
737 #line 393 "gaa.skel"
738 #ifdef GAA_REST_EXISTS
739 struct GAAREST GAAREST_tmp;
740 #endif
742 opt_list[gaa_num] = 1;
744 for(gaa_last_non_option = gaa_index;
745 (gaa_last_non_option != GAAargc) && (gaa_is_an_argument(GAAargv[gaa_last_non_option]) == GAA_NOT_AN_OPTION);
746 gaa_last_non_option++);
748 if(gaa_num == GAA_REST)
750 gaa_index = 1;
751 gaa_last_non_option = GAAargc;
754 switch(gaa_num)
756 case GAAOPTID_version:
757 OK = 0;
758 #line 123 "certtool.gaa"
759 { certtool_version(); exit(0); ;};
761 return GAA_OK;
762 break;
763 case GAAOPTID_help:
764 OK = 0;
765 #line 121 "certtool.gaa"
766 { gaa_help(); exit(0); ;};
768 return GAA_OK;
769 break;
770 case GAAOPTID_debug:
771 OK = 0;
772 GAA_TESTMOREARGS;
773 GAA_FILL(GAATMP_debug.arg1, gaa_getint, GAATMP_debug.size1);
774 gaa_index++;
775 #line 119 "certtool.gaa"
776 { gaaval->debug = GAATMP_debug.arg1 ;};
778 return GAA_OK;
779 break;
780 case GAAOPTID_template:
781 OK = 0;
782 GAA_TESTMOREARGS;
783 GAA_FILL(GAATMP_template.arg1, gaa_getstr, GAATMP_template.size1);
784 gaa_index++;
785 #line 115 "certtool.gaa"
786 { gaaval->template = GAATMP_template.arg1 ;};
788 return GAA_OK;
789 break;
790 case GAAOPTID_infile:
791 OK = 0;
792 GAA_TESTMOREARGS;
793 GAA_FILL(GAATMP_infile.arg1, gaa_getstr, GAATMP_infile.size1);
794 gaa_index++;
795 #line 112 "certtool.gaa"
796 { gaaval->infile = GAATMP_infile.arg1 ;};
798 return GAA_OK;
799 break;
800 case GAAOPTID_outfile:
801 OK = 0;
802 GAA_TESTMOREARGS;
803 GAA_FILL(GAATMP_outfile.arg1, gaa_getstr, GAATMP_outfile.size1);
804 gaa_index++;
805 #line 109 "certtool.gaa"
806 { gaaval->outfile = GAATMP_outfile.arg1 ;};
808 return GAA_OK;
809 break;
810 case GAAOPTID_disable_quick_random:
811 OK = 0;
812 #line 106 "certtool.gaa"
813 { gaaval->quick_random = 0; ;};
815 return GAA_OK;
816 break;
817 case GAAOPTID_bits:
818 OK = 0;
819 GAA_TESTMOREARGS;
820 GAA_FILL(GAATMP_bits.arg1, gaa_getint, GAATMP_bits.size1);
821 gaa_index++;
822 #line 103 "certtool.gaa"
823 { gaaval->bits = GAATMP_bits.arg1 ;};
825 return GAA_OK;
826 break;
827 case GAAOPTID_outder:
828 OK = 0;
829 #line 100 "certtool.gaa"
830 { gaaval->outcert_format=1 ;};
832 return GAA_OK;
833 break;
834 case GAAOPTID_inder:
835 OK = 0;
836 #line 97 "certtool.gaa"
837 { gaaval->incert_format=1 ;};
839 return GAA_OK;
840 break;
841 case GAAOPTID_export_ciphers:
842 OK = 0;
843 #line 94 "certtool.gaa"
844 { gaaval->export=1 ;};
846 return GAA_OK;
847 break;
848 case GAAOPTID_hash:
849 OK = 0;
850 GAA_TESTMOREARGS;
851 GAA_FILL(GAATMP_hash.arg1, gaa_getstr, GAATMP_hash.size1);
852 gaa_index++;
853 #line 91 "certtool.gaa"
854 { gaaval->hash = GAATMP_hash.arg1 ;};
856 return GAA_OK;
857 break;
858 case GAAOPTID_dsa:
859 OK = 0;
860 #line 88 "certtool.gaa"
861 { gaaval->dsa=1 ;};
863 return GAA_OK;
864 break;
865 case GAAOPTID_pkcs8:
866 OK = 0;
867 #line 85 "certtool.gaa"
868 { gaaval->pkcs8=1 ;};
870 return GAA_OK;
871 break;
872 case GAAOPTID_to_p8:
873 OK = 0;
874 #line 82 "certtool.gaa"
875 { gaaval->action = 18; ;};
877 return GAA_OK;
878 break;
879 case GAAOPTID_to_p12:
880 OK = 0;
881 #line 80 "certtool.gaa"
882 { gaaval->action = 8; ;};
884 return GAA_OK;
885 break;
886 case GAAOPTID_v1:
887 OK = 0;
888 #line 78 "certtool.gaa"
889 { gaaval->v1_cert = 1; ;};
891 return GAA_OK;
892 break;
893 case GAAOPTID_fix_key:
894 OK = 0;
895 #line 75 "certtool.gaa"
896 { gaaval->fix_key = 1; ;};
898 return GAA_OK;
899 break;
900 case GAAOPTID_pgp_key_info:
901 OK = 0;
902 #line 72 "certtool.gaa"
903 { gaaval->action = 20; ;};
905 return GAA_OK;
906 break;
907 case GAAOPTID_key_info:
908 OK = 0;
909 #line 70 "certtool.gaa"
910 { gaaval->action = 6; ;};
912 return GAA_OK;
913 break;
914 case GAAOPTID_smime_to_p7:
915 OK = 0;
916 #line 68 "certtool.gaa"
917 { gaaval->action = 15; ;};
919 return GAA_OK;
920 break;
921 case GAAOPTID_p7_info:
922 OK = 0;
923 #line 66 "certtool.gaa"
924 { gaaval->action = 12; ;};
926 return GAA_OK;
927 break;
928 case GAAOPTID_p12_info:
929 OK = 0;
930 #line 64 "certtool.gaa"
931 { gaaval->action = 9; ;};
933 return GAA_OK;
934 break;
935 case GAAOPTID_crl_info:
936 OK = 0;
937 #line 62 "certtool.gaa"
938 { gaaval->action = 11; ;};
940 return GAA_OK;
941 break;
942 case GAAOPTID_pgp_ring_info:
943 OK = 0;
944 #line 60 "certtool.gaa"
945 { gaaval->action = 21; ;};
947 return GAA_OK;
948 break;
949 case GAAOPTID_pgp_certificate_info:
950 OK = 0;
951 #line 58 "certtool.gaa"
952 { gaaval->action = 19; ;};
954 return GAA_OK;
955 break;
956 case GAAOPTID_certificate_info:
957 OK = 0;
958 #line 56 "certtool.gaa"
959 { gaaval->action = 2; ;};
961 return GAA_OK;
962 break;
963 case GAAOPTID_password:
964 OK = 0;
965 GAA_TESTMOREARGS;
966 GAA_FILL(GAATMP_password.arg1, gaa_getstr, GAATMP_password.size1);
967 gaa_index++;
968 #line 54 "certtool.gaa"
969 { gaaval->pass = GAATMP_password.arg1 ;};
971 return GAA_OK;
972 break;
973 case GAAOPTID_load_ca_certificate:
974 OK = 0;
975 GAA_TESTMOREARGS;
976 GAA_FILL(GAATMP_load_ca_certificate.arg1, gaa_getstr, GAATMP_load_ca_certificate.size1);
977 gaa_index++;
978 #line 51 "certtool.gaa"
979 { gaaval->ca = GAATMP_load_ca_certificate.arg1 ;};
981 return GAA_OK;
982 break;
983 case GAAOPTID_load_ca_privkey:
984 OK = 0;
985 GAA_TESTMOREARGS;
986 GAA_FILL(GAATMP_load_ca_privkey.arg1, gaa_getstr, GAATMP_load_ca_privkey.size1);
987 gaa_index++;
988 #line 48 "certtool.gaa"
989 { gaaval->ca_privkey = GAATMP_load_ca_privkey.arg1 ;};
991 return GAA_OK;
992 break;
993 case GAAOPTID_load_certificate:
994 OK = 0;
995 GAA_TESTMOREARGS;
996 GAA_FILL(GAATMP_load_certificate.arg1, gaa_getstr, GAATMP_load_certificate.size1);
997 gaa_index++;
998 #line 45 "certtool.gaa"
999 { gaaval->cert = GAATMP_load_certificate.arg1 ;};
1001 return GAA_OK;
1002 break;
1003 case GAAOPTID_load_request:
1004 OK = 0;
1005 GAA_TESTMOREARGS;
1006 GAA_FILL(GAATMP_load_request.arg1, gaa_getstr, GAATMP_load_request.size1);
1007 gaa_index++;
1008 #line 42 "certtool.gaa"
1009 { gaaval->request = GAATMP_load_request.arg1 ;};
1011 return GAA_OK;
1012 break;
1013 case GAAOPTID_load_privkey:
1014 OK = 0;
1015 GAA_TESTMOREARGS;
1016 GAA_FILL(GAATMP_load_privkey.arg1, gaa_getstr, GAATMP_load_privkey.size1);
1017 gaa_index++;
1018 #line 39 "certtool.gaa"
1019 { gaaval->privkey = GAATMP_load_privkey.arg1 ;};
1021 return GAA_OK;
1022 break;
1023 case GAAOPTID_get_dh_params:
1024 OK = 0;
1025 #line 36 "certtool.gaa"
1026 { gaaval->action=16; ;};
1028 return GAA_OK;
1029 break;
1030 case GAAOPTID_generate_dh_params:
1031 OK = 0;
1032 #line 35 "certtool.gaa"
1033 { gaaval->action=10; ;};
1035 return GAA_OK;
1036 break;
1037 case GAAOPTID_verify_crl:
1038 OK = 0;
1039 #line 33 "certtool.gaa"
1040 { gaaval->action=14; ;};
1042 return GAA_OK;
1043 break;
1044 case GAAOPTID_verify_chain:
1045 OK = 0;
1046 #line 31 "certtool.gaa"
1047 { gaaval->action=5; ;};
1049 return GAA_OK;
1050 break;
1051 case GAAOPTID_generate_request:
1052 OK = 0;
1053 #line 29 "certtool.gaa"
1054 { gaaval->action=3; ;};
1056 return GAA_OK;
1057 break;
1058 case GAAOPTID_generate_privkey:
1059 OK = 0;
1060 #line 27 "certtool.gaa"
1061 { gaaval->action=1; ;};
1063 return GAA_OK;
1064 break;
1065 case GAAOPTID_update_certificate:
1066 OK = 0;
1067 #line 25 "certtool.gaa"
1068 { gaaval->action=7; ;};
1070 return GAA_OK;
1071 break;
1072 case GAAOPTID_generate_crl:
1073 OK = 0;
1074 #line 23 "certtool.gaa"
1075 { gaaval->action=13; ;};
1077 return GAA_OK;
1078 break;
1079 case GAAOPTID_generate_proxy:
1080 OK = 0;
1081 #line 21 "certtool.gaa"
1082 { gaaval->action=17; ;};
1084 return GAA_OK;
1085 break;
1086 case GAAOPTID_generate_certificate:
1087 OK = 0;
1088 #line 19 "certtool.gaa"
1089 { gaaval->action=4; ;};
1091 return GAA_OK;
1092 break;
1093 case GAAOPTID_generate_self_signed:
1094 OK = 0;
1095 #line 17 "certtool.gaa"
1096 { gaaval->action=0; ;};
1098 return GAA_OK;
1099 break;
1101 #line 413 "gaa.skel"
1102 default: break;
1104 return GAA_ERROR_UNKNOWN;
1107 int gaa(int argc, char **argv, gaainfo *gaaval)
1109 int tmp1, tmp2;
1110 int i, j;
1111 char *opt_list;
1113 GAAargv = argv;
1114 GAAargc = argc;
1116 opt_list = (char*) gaa_malloc(GAA_NB_OPTION + 1);
1118 for(i = 0; i < GAA_NB_OPTION + 1; i++)
1119 opt_list[i] = 0;
1120 /* initialization */
1121 if(inited == 0)
1124 #line 125 "certtool.gaa"
1125 { gaaval->bits = 2048; gaaval->pkcs8 = 0; gaaval->privkey = NULL; gaaval->ca=NULL; gaaval->ca_privkey = NULL;
1126 gaaval->debug=1; gaaval->request = NULL; gaaval->infile = NULL; gaaval->outfile = NULL; gaaval->cert = NULL;
1127 gaaval->incert_format = 0; gaaval->outcert_format = 0; gaaval->action=-1; gaaval->pass = NULL; gaaval->v1_cert = 0;
1128 gaaval->export = 0; gaaval->template = NULL; gaaval->hash=NULL; gaaval->fix_key = 0; gaaval->quick_random=1; ;};
1131 inited = 1;
1132 #line 438 "gaa.skel"
1133 gaa_arg_used = NULL;
1135 if (argc > 0) {
1136 gaa_arg_used = gaa_malloc(argc * sizeof(char));
1139 for(i = 1; i < argc; i++)
1140 gaa_arg_used[i] = 0;
1141 for(i = 1; i < argc; i++)
1143 if(gaa_arg_used[i] == 0)
1145 j = 0;
1146 tmp1 = gaa_is_an_argument(GAAargv[i]);
1147 switch(tmp1)
1149 case GAA_WORD_OPTION:
1150 j++;
1151 case GAA_LETTER_OPTION:
1152 j++;
1153 tmp2 = gaa_get_option_num(argv[i]+j, tmp1);
1154 if(tmp2 == GAA_ERROR_NOMATCH)
1156 printf("Invalid option '%s'\n", argv[i]+j);
1157 return 0;
1159 switch(gaa_try(tmp2, i+1, gaaval, opt_list))
1161 case GAA_ERROR_NOTENOUGH_ARGS:
1162 printf("'%s': not enough arguments\n",gaa_current_option);
1163 return 0;
1164 case GAA_ERROR_INVALID_ARG:
1165 printf("Invalid arguments\n");
1166 return 0;
1167 case GAA_OK:
1168 break;
1169 default:
1170 printf("Unknown error\n");
1172 gaa_arg_used[i] = 1;
1173 break;
1174 case GAA_MULTIPLE_OPTION:
1175 for(j = 1; j < strlen(argv[i]); j++)
1177 tmp2 = gaa_get_option_num(argv[i]+j, tmp1);
1178 if(tmp2 == GAA_ERROR_NOMATCH)
1180 printf("Invalid option '%c'\n", *(argv[i]+j));
1181 return 0;
1183 switch(gaa_try(tmp2, i+1, gaaval, opt_list))
1185 case GAA_ERROR_NOTENOUGH_ARGS:
1186 printf("'%s': not enough arguments\n",gaa_current_option);
1187 return 0;
1188 case GAA_ERROR_INVALID_ARG:
1189 printf("Invalid arguments\n");
1190 return 0;
1191 case GAA_OK:
1192 break;
1193 default:
1194 printf("Unknown error\n");
1197 gaa_arg_used[i] = 1;
1198 break;
1199 default: break;
1203 if(gaa_processing_file == 0)
1206 #line 507 "gaa.skel"
1207 #ifdef GAA_REST_EXISTS
1208 switch(gaa_try(GAA_REST, 1, gaaval, opt_list))
1210 case GAA_ERROR_NOTENOUGH_ARGS:
1211 printf("Rest: not enough arguments\n");
1212 return 0;
1213 case GAA_ERROR_INVALID_ARG:
1214 printf("Invalid arguments\n");
1215 return 0;
1216 case GAA_OK:
1217 break;
1218 default:
1219 printf("Unknown error\n");
1221 #endif
1223 for(i = 1; i < argc; i++)
1225 if(gaa_arg_used[i] == 0)
1227 printf("Too many arguments\n");
1228 return 0;
1231 free(gaa_arg_used);
1232 free(opt_list);
1233 return -1;
1236 struct gaastrnode
1238 char *str;
1239 struct gaastrnode *next;
1242 typedef struct gaastrnode gaa_str_node;
1244 static int gaa_internal_get_next_str(FILE *file, gaa_str_node *tmp_str, int argc)
1246 int pos_ini;
1247 int a;
1248 int i = 0, len = 0, newline = 0;
1250 if(argc == 1) {
1251 newline = 1;
1252 len = 2;
1255 a = fgetc( file);
1256 if (a == EOF) return 0;
1258 while(a == ' ' || a == 9 || a == '\n')
1260 if(a == '\n')
1262 newline=1;
1263 len = 2;
1265 a = fgetc( file);
1266 if (a == EOF) return 0;
1269 pos_ini = ftell(file) - 1;
1271 while(a != ' ' && a != 9 && a != '\n')
1274 len++;
1275 a = fgetc( file);
1276 if(a==EOF) return 0; //a = ' ';
1279 len += 1;
1280 tmp_str->str = gaa_malloc((len) * sizeof(char));
1282 if(newline == 1)
1284 tmp_str->str[0] = '-';
1285 tmp_str->str[1] = '-';
1286 i = 2;
1288 else
1290 i = 0;
1293 fseek(file,pos_ini, SEEK_SET);
1296 a = fgetc( file);
1298 if (a == EOF) {
1299 i+=2;
1300 break;
1302 tmp_str->str[i] = a;
1303 i++;
1305 while(a != ' ' && a != 9 && a != '\n' && i < len);
1307 tmp_str->str[i - 1] = 0;
1309 fseek(file,- 1, SEEK_CUR);
1310 /* printf("%d\n", ftell(file)); */
1312 return -1;
1315 int gaa_file(const char *name, gaainfo *gaaval)
1317 gaa_str_node *first_str, **tmp_str, *tmp_str2;
1318 int rval, i;
1319 char **argv;
1320 int argc = 0;
1321 FILE *file;
1323 gaa_processing_file = 1;
1325 if((file = fopen(name, "r")) == NULL)
1327 printf("Couldn't open '%s' configuration file for reading\n", name);
1328 return 1;
1331 tmp_str = &first_str;
1334 argc++;
1335 *tmp_str = gaa_malloc(sizeof(gaa_str_node));
1337 (*tmp_str)->str = NULL;
1338 (*tmp_str)->next = NULL;
1340 rval = gaa_internal_get_next_str(file, *tmp_str, argc);
1341 tmp_str = &((*tmp_str)->next);
1343 while(rval == -1);
1345 if(rval == 1)
1346 return 0;
1348 argv = gaa_malloc((1 + argc) * sizeof(char*));
1350 tmp_str2 = first_str;
1351 argv[0] = "cfg";
1352 for(i = 1; i < argc; i++)
1354 argv[i] = tmp_str2->str;
1355 tmp_str2 = tmp_str2->next;
1358 rval = gaa(argc, argv, gaaval);
1359 gaa_processing_file = 0;
1360 return rval;