diff options
Diffstat (limited to 'src/input.c')
| -rw-r--r-- | src/input.c | 129 |
1 files changed, 75 insertions, 54 deletions
diff --git a/src/input.c b/src/input.c index 441fd47..e49eae6 100644 --- a/src/input.c +++ b/src/input.c @@ -7,67 +7,68 @@ /* * *char *prime_prompts[] = {"p:", "a:", "b:"}; - param_t prime_params[] = {PARAM_PRIME, PARAM_INT, PARAM_INT}; + param_t prime_params[] = {PARAM_PRIME, PARAM_INT, PARAM_INT}; - char *binary_prompts[] = {"e1:", "e2:", "e3:", "a:", "b:"}; - param_t binary_params[] = {PARAM_SHORT, PARAM_SHORT, PARAM_SHORT, PARAM_INT, PARAM_INT}; + char *binary_prompts[] = {"e1:", "e2:", "e3:", "a:", "b:"}; + param_t binary_params[] = {PARAM_SHORT, PARAM_SHORT, PARAM_SHORT, PARAM_INT, + PARAM_INT}; - char **prompts; - param_t *params; - size_t length; - if (args.prime_field) { - prompts = prime_prompts; - params = prime_params; - length = 3; - } else { - prompts = binary_prompts; - params = binary_params; - length = 5; - } - GEN field; - GEN domain[length]; + char **prompts; + param_t *params; + size_t length; + if (cfg.prime_field) { + prompts = prime_prompts; + params = prime_params; + length = 3; + } else { + prompts = binary_prompts; + params = binary_params; + length = 5; + } + GEN field; + GEN domain[length]; - if (args.random) { - //random domain, might not define a curve... check disc - if (args.prime_field) { - field = ifield_prime(args.bits); - } else { - field = ifield_binary(args.bits); - } - } else { - for (size_t i = 0; i < length; ++i) { - domain[i] = fread_param(params[i], in, prompts[i], args.bits, in == stdin ? '\n' : ','); - if (equalii(domain[i], gen_m1)) { - fprintf(stderr, "Whoops?"); - return quit(1); - } - } - if (args.prime_field) { - field = field_prime(domain[0]); - } else { - field = field_binary(args.bits, domain[0], domain[1], domain[2]); - } - } - pari_fprintf(out, "%Ps", field_params(field)); + if (cfg.random) { + //random domain, might not define a curve... check disc + if (cfg.prime_field) { + field = ifield_prime(cfg.bits); + } else { + field = ifield_binary(cfg.bits); + } + } else { + for (size_t i = 0; i < length; ++i) { + domain[i] = fread_param(params[i], in, prompts[i], cfg.bits, in == + stdin ? '\n' : ','); + if (equalii(domain[i], gen_m1)) { + fprintf(stderr, "Whoops?"); + return quit(1); + } + } + if (cfg.prime_field) { + field = field_prime(domain[0]); + } else { + field = field_binary(cfg.bits, domain[0], domain[1], domain[2]); + } + } + pari_fprintf(out, "%Ps", field_params(field)); - if (args.prime_field) { - GEN field = prime_field(p); - GEN curve = prime_weierstrass(a, b, field, 0); - } else if (args.binary_field) { - GEN e[3]; - for (size_t i = 0; i < 3; ++i) { - char prompt[] = {'e', (char) ('1' + i), ':', 0}; - e[i] = read_short(prompt, '\n'); - } - GEN a = read_int("a:", args.bits, '\n'); + if (cfg.prime_field) { + GEN field = prime_field(p); + GEN curve = prime_weierstrass(a, b, field, 0); + } else if (cfg.binary_field) { + GEN e[3]; + for (size_t i = 0; i < 3; ++i) { + char prompt[] = {'e', (char) ('1' + i), ':', 0}; + e[i] = read_short(prompt, '\n'); + } + GEN a = read_int("a:", cfg.bits, '\n'); - GEN field = binary_field(args.bits, e[0], e[1], e[2]); - } + GEN field = binary_field(cfg.bits, e[0], e[1], e[2]); + } */ - GEN fread_i(FILE *stream, const char *prompt, long bits, int delim, - GEN (*rand_func)(long)) { + GEN (*rand_func)(long)) { printf("%s ", prompt); char *line = NULL; size_t n = 0; @@ -117,7 +118,8 @@ GEN fread_short(FILE *stream, const char *prompt, int delim) { return fread_i(stream, prompt, 16, delim, NULL); } -GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits, int delim) { +GEN fread_param(param_t param, FILE *stream, const char *prompt, long bits, + int delim) { switch (param) { case PARAM_PRIME: return fread_prime(stream, prompt, bits, delim); @@ -133,3 +135,22 @@ GEN read_param(param_t param, const char *prompt, long bits, int delim) { return fread_param(param, stdin, prompt, bits, delim); } +FILE *input_open(const char *input) { + if (input) { + FILE *in = fopen(input, "r"); + if (!in) { + // fallback to stdin or quit? + in = stdin; + perror("Failed to open input file."); + } + return in; + } else { + return stdin; + } +} + +void input_close(FILE *in) { + if (in != NULL && in != stdout) { + fclose(in); + } +} |
