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/gen | |
| parent | d01ac5799cf7283de1b26cac07578ca039bd5047 (diff) | |
| download | ecgen-619805117c469a61deb9da992f9a14439191ca7d.tar.gz ecgen-619805117c469a61deb9da992f9a14439191ca7d.tar.zst ecgen-619805117c469a61deb9da992f9a14439191ca7d.zip | |
Add hex check to cli.
Diffstat (limited to 'src/gen')
| -rw-r--r-- | src/gen/hex.c | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/src/gen/hex.c b/src/gen/hex.c index 2a6fea4..d643bfe 100644 --- a/src/gen/hex.c +++ b/src/gen/hex.c @@ -9,29 +9,24 @@ #include "util/memory.h" static char *hex_points(point_t *points[], size_t len) { - char *x[len]; - char *y[len]; + char *p[len]; for (size_t i = 0; i < len; ++i) { point_t *pt = points[i]; - bits_t *x_bits = bits_from_i(field_elementi(gel(pt->point, 1))); - bits_t *y_bits = bits_from_i(field_elementi(gel(pt->point, 2))); - x[i] = bits_to_hex(x_bits); - y[i] = bits_to_hex(y_bits); - bits_free(&x_bits); - bits_free(&y_bits); + GEN fx = field_elementi(gel(pt->point, 1)); + GEN fy = field_elementi(gel(pt->point, 2)); + p[i] = pari_sprintf("%P0#*x,%P0#*x,", cfg->hex_digits, fx, + cfg->hex_digits, fy); } - size_t total = 0; + size_t total = 1; for (size_t i = 0; i < len; ++i) { - total += strlen(x[i]) + strlen(y[i]); + total += strlen(p[i]); } char *result = try_calloc(total); for (size_t i = 0; i < len; ++i) { - strcat(result, x[i]); - strcat(result, y[i]); - try_free(x[i]); - try_free(y[i]); + strcat(result, p[i]); + pari_free(p[i]); } return result; } @@ -44,36 +39,39 @@ CHECK(hex_check_param) { for (; *p; ++p) *p = (char)tolower(*p); char *params[OFFSET_END] = {NULL}; + bool pari[OFFSET_END] = {false}; if (state >= OFFSET_SEED) { - params[OFFSET_SEED] = bits_to_hex(curve->seed->seed); + if (curve->seed && curve->seed->seed) { + params[OFFSET_SEED] = bits_to_hex(curve->seed->seed); + } } if (state >= OFFSET_FIELD) { if (cfg->field == FIELD_PRIME) { - bits_t *temp = bits_from_i(curve->field); - params[OFFSET_FIELD] = bits_to_hex(temp); - bits_free(&temp); + params[OFFSET_FIELD] = + pari_sprintf("%P0#*x", cfg->hex_digits, curve->field); + pari[OFFSET_FIELD] = true; } else if (cfg->field == FIELD_BINARY) { } } if (state >= OFFSET_A) { - bits_t *temp = bits_from_i(field_elementi(curve->a)); - params[OFFSET_A] = bits_to_hex(temp); - bits_free(&temp); + params[OFFSET_A] = + pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->a)); + pari[OFFSET_A] = true; } if (state >= OFFSET_B) { - bits_t *temp = bits_from_i(field_elementi(curve->b)); - params[OFFSET_B] = bits_to_hex(temp); - bits_free(&temp); + params[OFFSET_B] = + pari_sprintf("%P0#*x", cfg->hex_digits, field_elementi(curve->b)); + pari[OFFSET_B] = true; } if (state >= OFFSET_ORDER) { - bits_t *temp = bits_from_i(curve->order); - params[OFFSET_ORDER] = bits_to_hex(temp); - bits_free(&temp); + params[OFFSET_ORDER] = + pari_sprintf("%P0#*x", cfg->hex_digits, curve->order); + pari[OFFSET_ORDER] = true; } if (state >= OFFSET_GENERATORS) { @@ -91,6 +89,11 @@ CHECK(hex_check_param) { result = 1; break; } + if (pari[i]) { + pari_free(params[i]); + } else { + try_free(params[i]); + } } } try_free(search_hex); |
