pretty up the main() getopt loop

pull/74/head
Levi Rak 2017-08-16 16:45:24 -06:00
parent 48a2a5afec
commit 5a46b4505e
2 changed files with 118 additions and 92 deletions

View File

@ -22,10 +22,15 @@
/* Enumerated types for long arguments */ /* Enumerated types for long arguments */
enum { enum {
/* @temporary: implement modes as arguments */
ENCRYPT = 1000, ENCRYPT = 1000,
DECRYPT, DECRYPT,
BENCHMARK, BENCHMARK,
HASH, HASH,
X509,
REQUEST,
GEN_KEY,
INFILE, INFILE,
OUTFILE, OUTFILE,
PASSWORD, PASSWORD,
@ -37,26 +42,27 @@ enum {
TIME, TIME,
VERIFY, VERIFY,
VERBOSE, VERBOSE,
X509,
INFORM, INFORM,
OUTFORM, OUTFORM,
NOOUT, NOOUT,
TEXT_OUT, TEXT_OUT,
SILENT, SILENT,
REQUEST,
GEN_KEY,
OUTPUT, OUTPUT,
HELP1, /* "-help" */ HELP,
HELP2, /* "-h" */
}; };
/* Structure for holding long arguments */ /* Structure for holding long arguments */
static struct option long_options[] = { static struct option long_options[] = {
{"encrypt", required_argument, 0, ENCRYPT }, /* @temporary: implement modes as flags */
{"decrypt", required_argument, 0, DECRYPT }, {"encrypt", optional_argument, 0, ENCRYPT },
{"bench", required_argument, 0, BENCHMARK }, {"decrypt", optional_argument, 0, DECRYPT },
{"hash", required_argument, 0, HASH }, {"bench", optional_argument, 0, BENCHMARK },
{"hash", optional_argument, 0, HASH },
{"x509", no_argument, 0, X509 },
{"req", optional_argument, 0, REQUEST },
{"genkey", optional_argument, 0, GEN_KEY },
{"in", required_argument, 0, INFILE }, {"in", required_argument, 0, INFILE },
{"out", required_argument, 0, OUTFILE }, {"out", required_argument, 0, OUTFILE },
{"pwd", required_argument, 0, PASSWORD }, {"pwd", required_argument, 0, PASSWORD },
@ -68,21 +74,18 @@ static struct option long_options[] = {
{"time", required_argument, 0, TIME }, {"time", required_argument, 0, TIME },
{"verify", 0, 0, VERIFY }, {"verify", 0, 0, VERIFY },
{"verbose", 0, 0, VERBOSE }, {"verbose", 0, 0, VERBOSE },
{"x509", 0, 0, X509 },
{"inform", required_argument, 0, INFORM }, {"inform", required_argument, 0, INFORM },
{"outform", required_argument, 0, OUTFORM }, {"outform", required_argument, 0, OUTFORM },
{"noout", 0, 0, NOOUT }, {"noout", 0, 0, NOOUT },
{"text", 0, 0, TEXT_OUT }, {"text", 0, 0, TEXT_OUT },
{"silent", 0, 0, SILENT }, {"silent", 0, 0, SILENT },
{"req", 0, 0, REQUEST },
{"genkey", 0, 0, GEN_KEY },
{"output", 0, 0, OUTPUT }, {"output", 0, 0, OUTPUT },
{"help", 0, 0, HELP1 }, {"help", 0, 0, HELP },
{"h", 0, 0, HELP2 }, {"h", 0, 0, HELP },
{"v", 0, 0, 'v' }, {"v", 0, 0, 'v' },
{"version", 0, 0, 'v' }, {"version", 0, 0, 'v' },
{0, 0, 0, 0}
{0, 0, 0, 0} /* terminal element */
}; };
/* method for converting arguments to lower case */ /* method for converting arguments to lower case */

View File

@ -31,6 +31,8 @@
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
int flag = 0;
char* mode = "";
int ret = 0; int ret = 0;
int option = 0; int option = 0;
int ignoreIn = 0; int ignoreIn = 0;
@ -42,6 +44,7 @@ int main(int argc, char** argv)
printf("Main Help.\n"); printf("Main Help.\n");
wolfCLU_help(); wolfCLU_help();
} }
/* Set ignore variables for -in and -out files */ /* Set ignore variables for -in and -out files */
ret = wolfCLU_checkForArg("-in", 3, argc, argv); ret = wolfCLU_checkForArg("-in", 3, argc, argv);
if (ret > 0) { if (ret > 0) {
@ -52,9 +55,8 @@ int main(int argc, char** argv)
ignoreOut = ret + 1; ignoreOut = ret + 1;
} }
/* flexibility: allow users to input any CAPS or lower case, we will do all
/* flexibility: allow users to input any CAPS or lower case, * processing on lower case only. except where ignored */
* we will do all processing on lower case only. */
for (i = 0; i < argc; i++) { for (i = 0; i < argc; i++) {
if (i != ignoreIn && i != ignoreOut) { if (i != ignoreIn && i != ignoreOut) {
convert_to_lower(argv[i], (int) XSTRLEN(argv[i])); convert_to_lower(argv[i], (int) XSTRLEN(argv[i]));
@ -65,77 +67,62 @@ int main(int argc, char** argv)
long_options, &long_index )) != -1) { long_options, &long_index )) != -1) {
switch (option) { switch (option) {
/* Encrypt */
case ENCRYPT: ret = wolfCLU_setup(argc, argv, 'e');
break;
/* Decrypt */
case DECRYPT: ret = wolfCLU_setup(argc, argv, 'd');;
break;
/* Benchmark */
case BENCHMARK:ret = wolfCLU_benchSetup(argc, argv);
break;
/* Hash */
case HASH: ret = wolfCLU_hashSetup(argc, argv);
break;
/* x509 Certificate processing */
case X509: ret = wolfCLU_certSetup(argc, argv);
break;
/* x509 Certificate request */
case REQUEST: ret = wolfCLU_requestSetup(argc, argv);
break;
case GEN_KEY: ret = wolfCLU_genKeySetup(argc, argv);
break;
/* Ignore the following arguments for now. Will be handled by their respective
* setups IE Crypto setup, Benchmark setup, or Hash Setup */
/* File passed in by user */ /* @temporary: implement the modes as arguments */
case INFILE: break; case ENCRYPT:
/* Output file */ case DECRYPT:
case OUTFILE: break; case BENCHMARK:
/* Password */ case HASH:
case PASSWORD: break; case X509:
/* Key if used must be in hex */ case REQUEST:
case KEY: break; case GEN_KEY:
/* IV if used must be in hex */ if (!flag) flag = option;
case IV: break; break;
/* Opt to benchmark all available algorithms */
case ALL: break; /*
/* size for hash or key to output */ * Ignore the following arguments for now. They will be handled by
case SIZE: break; * their respective setups (e.g. Crypto setup, Benchmark setup, or
/* exponent for generating RSA key */ * Hash Setup)
case EXPONENT: break; */
/* Time to benchmark for 1-10 seconds optional default: 3s */
case TIME: break; case INFILE: /* File passed in by user */
/* Verify results, used with -iv and -key */ case OUTFILE: /* Output file */
case VERIFY: break; case PASSWORD: /* Password */
/* Certificate Stuff*/ case KEY: /* Key if used must be in hex */
case INFORM: break; case IV: /* IV if used must be in hex */
case OUTFORM: break; case ALL: /* Opt to benchmark all available algorithms */
case OUTPUT: break; case SIZE: /* size for hash or key to output */
case NOOUT: break; case EXPONENT: /* exponent for generating RSA key */
case TEXT_OUT: break; case TIME: /* Time to benchmark for */
case SILENT: break; case VERIFY: /* Verify results, used with -iv and -key */
case HELP1: case INFORM: /* Certificate Stuff */
if (argc == 2) { case OUTFORM:
case OUTPUT:
case NOOUT:
case TEXT_OUT:
case SILENT:
/* do nothing. */
break;
/*
* End of ignored arguments
*/
case HELP:
/* only print for -help if no mode has been declared */
if (!flag) {
printf("Main help menu:\n"); printf("Main help menu:\n");
wolfCLU_help(); wolfCLU_help();
return 0; return 0;
} }
break; break;
case HELP2:
if (argc == 2) {
printf("Main help menu:\n");
wolfCLU_help();
return 0;
}
break;
/* which version of clu am I using */
case VERBOSE: case VERBOSE:
wolfCLU_verboseHelp(); wolfCLU_verboseHelp();
return 0; return 0;
/*End of ignored arguments */
case 'v': wolfCLU_version(); case 'v':
wolfCLU_version();
return 0; return 0;
default: default:
@ -145,6 +132,42 @@ int main(int argc, char** argv)
} }
} }
/* @temporary: implement mode as a flag */
switch (flag) {
case 0:
printf("No mode provided.\n");
ret = 0;
break;
case ENCRYPT:
ret = wolfCLU_setup(argc, argv, 'e');
break;
case DECRYPT:
ret = wolfCLU_setup(argc, argv, 'd');
break;
case BENCHMARK:
ret = wolfCLU_benchSetup(argc, argv);
break;
case HASH:
ret = wolfCLU_hashSetup(argc, argv);
break;
case X509:
ret = wolfCLU_certSetup(argc, argv);
break;
case REQUEST:
ret = wolfCLU_requestSetup(argc, argv);
break;
case GEN_KEY:
ret = wolfCLU_genKeySetup(argc, argv);
break;
}
if (ret != 0) if (ret != 0)
printf("Error returned: %d.\n", ret); printf("Error returned: %d.\n", ret);