X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fsptps_keypair.c;h=51a94eeb458723483c38fd55263a790914177488;hb=refs%2Fheads%2F1.1;hp=d762724f8fc222ab8d99c4517cfbe17d51b58242;hpb=df716df33af8e9a5b93d573a023ecd7fc24d9a03;p=tinc diff --git a/src/sptps_keypair.c b/src/sptps_keypair.c index d762724f..97d51895 100644 --- a/src/sptps_keypair.c +++ b/src/sptps_keypair.c @@ -19,9 +19,8 @@ #include "system.h" -#include - #include "crypto.h" +#include "random.h" #include "ecdsagen.h" #include "logger.h" #include "names.h" @@ -46,45 +45,19 @@ static void usage(void) { fprintf(stderr, "Report bugs to tinc@tinc-vpn.org.\n"); } -static struct option const long_options[] = { - {"help", no_argument, NULL, 1}, - {NULL, 0, NULL, 0} -}; - -int main(int argc, char *argv[]) { - program_name = argv[0]; - int r; - int option_index = 0; - - while((r = getopt_long(argc, argv, "", long_options, &option_index)) != EOF) { - switch(r) { - case 0: /* long option */ - break; - - case '?': /* wrong options */ - usage(); - return 1; - - case 1: /* help */ - usage(); - return 0; - - default: - break; - } - } +typedef enum option_t { + OPT_BAD_OPTION = '?', + OPT_LONG_OPTION = 0, - argc -= optind - 1; - argv += optind - 1; + OPT_HELP = 255, +} option_t; - if(argc != 3) { - fprintf(stderr, "Wrong number of arguments.\n"); - usage(); - return 1; - } - - crypto_init(); +static struct option const long_options[] = { + {"help", no_argument, NULL, OPT_HELP}, + {NULL, 0, NULL, 0} +}; +static int generate_keypair(char *argv[]) { ecdsa_t *key = ecdsa_generate(); if(!key) { @@ -96,14 +69,14 @@ int main(int argc, char *argv[]) { if(fp) { if(!ecdsa_write_pem_private_key(key, fp)) { fprintf(stderr, "Could not write ECDSA private key\n"); - free(key); + ecdsa_free(key); return 1; } fclose(fp); } else { fprintf(stderr, "Could not open '%s' for writing: %s\n", argv[1], strerror(errno)); - free(key); + ecdsa_free(key); return 1; } @@ -114,12 +87,54 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Could not write ECDSA public key\n"); } - free(key); + ecdsa_free(key); fclose(fp); return 0; } else { fprintf(stderr, "Could not open '%s' for writing: %s\n", argv[2], strerror(errno)); - free(key); + ecdsa_free(key); return 1; } } + +int main(int argc, char *argv[]) { + program_name = argv[0]; + int r; + int option_index = 0; + + while((r = getopt_long(argc, argv, "", long_options, &option_index)) != EOF) { + switch((option_t) r) { + case OPT_LONG_OPTION: + break; + + case OPT_BAD_OPTION: + usage(); + return 1; + + case OPT_HELP: + usage(); + return 0; + + default: + break; + } + } + + argc -= optind - 1; + argv += optind - 1; + + if(argc != 3) { + fprintf(stderr, "Wrong number of arguments.\n"); + usage(); + return 1; + } + + random_init(); + crypto_init(); + + int result = generate_keypair(argv); + + random_exit(); + + return result; +}