/*
sptps_test.c -- Simple Peer-to-Peer Security test program
- Copyright (C) 2011-2013 Guus Sliepen <guus@tinc-vpn.org>,
+ Copyright (C) 2011-2022 Guus Sliepen <guus@tinc-vpn.org>,
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "system.h"
-#include <getopt.h>
-
#include "crypto.h"
+#include "random.h"
#include "ecdsagen.h"
+#include "logger.h"
+#include "names.h"
-static char *program_name;
-
-void logger(int level, int priority, const char *format, ...) {
+void logger(debug_t level, int priority, const char *format, ...) {
(void)level;
(void)priority;
va_list ap;
fputc('\n', stderr);
}
-static void usage() {
+static void usage(void) {
fprintf(stderr, "Usage: %s [options] private_key_file public_key_file\n\n", program_name);
fprintf(stderr, "Valid options are:\n"
" --help Display this help and exit.\n"
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) {
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;
}
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;
+}