diff options
| author | J08nY | 2017-10-19 17:49:19 +0200 |
|---|---|---|
| committer | J08nY | 2017-10-19 17:49:19 +0200 |
| commit | 619805117c469a61deb9da992f9a14439191ca7d (patch) | |
| tree | 6849db8692f820a24dc66b2e48de90cc27482fe7 /src/io/cli.c | |
| parent | d01ac5799cf7283de1b26cac07578ca039bd5047 (diff) | |
| download | ecgen-619805117c469a61deb9da992f9a14439191ca7d.tar.gz ecgen-619805117c469a61deb9da992f9a14439191ca7d.tar.zst ecgen-619805117c469a61deb9da992f9a14439191ca7d.zip | |
Diffstat (limited to 'src/io/cli.c')
| -rw-r--r-- | src/io/cli.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/io/cli.c b/src/io/cli.c index 2aa2998..3c3dccd 100644 --- a/src/io/cli.c +++ b/src/io/cli.c @@ -35,7 +35,10 @@ enum opt_keys { OPT_THREADS, OPT_TSTACK, OPT_TIMEOUT, - OPT_ANOMALOUS + OPT_ANOMALOUS, + OPT_GPGEN, + OPT_GPCHECK, + OPT_HEXCHECK }; // clang-format off @@ -56,6 +59,9 @@ struct argp_option cli_options[] = { {"cofactor", OPT_COFACTOR, "BOUND", 0, "Generate a curve with cofactor up to BOUND.", 3}, {"koblitz", OPT_KOBLITZ, "A", OPTION_ARG_OPTIONAL,"Generate a Koblitz curve (a in {0, 1}, b = 1).", 3}, {"unique", OPT_UNIQUE, 0, 0, "Generate a curve with only one generator.", 3}, + {"gp-gen", OPT_GPGEN, "FUNC", 0, "Generate a curve param using a GP function. **NOT IMPLEMENTED**", 3}, + {"gp-check", OPT_GPCHECK, "FUNC", 0, "Check a generated curve param using a GP function. **NOT IMPLEMENTED**", 3}, + {"hex-check", OPT_HEXCHECK, "HEX", 0, "Check a generated curve param hex expansion for the HEX string.", 3}, {"points", OPT_POINTS, "TYPE", 0, "Generate points of given type (random/prime/all/nonprime/none).", 3}, {"count", OPT_COUNT, "COUNT", 0, "Generate multiple curves.", 3}, @@ -249,6 +255,31 @@ error_t cli_parse(int key, char *arg, struct argp_state *state) { case OPT_UNIQUE: cfg->unique = true; break; + case OPT_GPGEN: + cfg->gp_gens[cfg->gp_gens_size++] = arg; + break; + case OPT_GPCHECK: + cfg->gp_checks[cfg->gp_checks_size++] = arg; + break; + case OPT_HEXCHECK: { + char *str_start = arg; + if (strlen(arg) > 2) { + if (arg[0] == '0' && (arg[1] == 'x' || arg[1] == 'X')) { + str_start = arg + 2; + } + } + char *p = str_start; + while (*p != 0) { + char c = *p++; + if (!isxdigit(c)) { + argp_failure( + state, 1, 0, + "Hex check argument contains non hex char '%c'", c); + } + } + cfg->hex_check = str_start; + break; + } case OPT_POINTS: { char *num_end; long amount = strtol(arg, &num_end, 10); |
