aboutsummaryrefslogtreecommitdiff
path: root/src/gen
diff options
context:
space:
mode:
authorJ08nY2017-10-19 17:49:19 +0200
committerJ08nY2017-10-19 17:49:19 +0200
commit619805117c469a61deb9da992f9a14439191ca7d (patch)
tree6849db8692f820a24dc66b2e48de90cc27482fe7 /src/gen
parentd01ac5799cf7283de1b26cac07578ca039bd5047 (diff)
downloadecgen-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.c57
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);