--- embedtools/src/voucher.c 2012/07/04 15:59:10 1.1.2.2 +++ embedtools/src/voucher.c 2012/07/04 16:15:53 1.1.2.3 @@ -1,6 +1,8 @@ #include "global.h" +#include +#include +#include - io_enableDEBUG; cfg_root_t cfg; @@ -19,6 +21,7 @@ Usage() "\t-v\t\tVerbose (more -v more verbosity)\n" "\t-r\t\tRequest new voucher(s) mode\n" "\t-t\t\tTest voucher(s) mode\n" + "\t-g\t\tRequest new RSA pair mode\n" "\t-c \tConfig file\n" "\t-o \tOutput file [default=-]\n" "\n", compiled, compiledby, compilehost); @@ -48,7 +51,21 @@ RedirOutput(const char *name) return 0; } +static int +NewRSA() +{ + RSA *k = RSA_generate_key(VOUCHER_MAX_RSA * 8, 65537, NULL, NULL); + if (!k) { + printf("Error:: can't generate RSA key\n"); + return 2; + } + PEM_write_RSAPrivateKey(output, k, NULL, NULL, 0, NULL, NULL); + PEM_write_RSA_PUBKEY(output, k); + return 0; +} + + int main(int argc, char **argv) { @@ -58,7 +75,7 @@ main(int argc, char **argv) output = stdout; atexit(AtExit); - while ((ch = getopt(argc, argv, "hvrtc:o:")) != -1) + while ((ch = getopt(argc, argv, "hvrtgc:o:")) != -1) switch (ch) { case 'r': mode = 1; @@ -66,6 +83,8 @@ main(int argc, char **argv) case 't': mode = 2; break; + case 'g': + return NewRSA(); case 'c': strlcpy(szConfig, optarg, sizeof szConfig); break; @@ -89,7 +108,7 @@ main(int argc, char **argv) } if (cfgLoadConfig(szConfig, &cfg)) { printf("Error:: load config #%d - %s\n", cfg_GetErrno(), cfg_GetError()); - return 2; + return 3; } cfgUnloadConfig(&cfg);