diff options
| author | J08nY | 2017-08-31 00:24:02 +0200 |
|---|---|---|
| committer | J08nY | 2017-08-31 00:24:02 +0200 |
| commit | c51e20507c43df26311043ac7d86f24a2646d1e5 (patch) | |
| tree | 63312e045dfd04a2a58ce09c5c027d4bbdb8011e | |
| parent | d0f496ae3f0a014ad74f83ad5208b1b5bd9a42f1 (diff) | |
| download | ecgen-c51e20507c43df26311043ac7d86f24a2646d1e5.tar.gz ecgen-c51e20507c43df26311043ac7d86f24a2646d1e5.tar.zst ecgen-c51e20507c43df26311043ac7d86f24a2646d1e5.zip | |
| -rw-r--r-- | src/gen/seed.c | 37 | ||||
| -rw-r--r-- | test/src/gen/test_seed.c | 56 |
2 files changed, 71 insertions, 22 deletions
diff --git a/src/gen/seed.c b/src/gen/seed.c index 49a33ff..5b26718 100644 --- a/src/gen/seed.c +++ b/src/gen/seed.c @@ -4,7 +4,6 @@ */ #include "seed.h" -#include <io/config.h> #include "io/output.h" #include "util/memory.h" @@ -57,6 +56,7 @@ static GEN seed_stoi(const char *cstr) { } GEN i = strtoi(seed_str); + try_free(seed_str); return gerepilecopy(ltop, i); } @@ -72,6 +72,18 @@ static char *seed_itos(GEN seed) { return seed_str; } +static char *seed_strip(const char *cstr) { + size_t seed_len = strlen(cstr); + char *seed_str = try_malloc(seed_len + 1); + char *prefix = strstr(cstr, "0x"); + if (prefix != NULL) { + strcpy(seed_str, cstr + 2); + } else { + strcpy(seed_str, cstr); + } + return seed_str; +} + GENERATOR(seed_gen_random) { curve->seed = seed_new(); curve->seed->seed = random_int(160); @@ -83,13 +95,8 @@ GENERATOR(seed_gen_random) { GENERATOR(seed_gen_argument) { curve->seed = seed_new(); curve->seed->seed = seed_stoi(cfg->seed); - - size_t seed_len = strlen(cfg->seed); - char *seed = try_malloc(seed_len + 1); - strcpy(seed, cfg->seed); - - curve->seed->raw = seed; - curve->seed->raw_len = seed_len; + curve->seed->raw = seed_strip(cfg->seed); + curve->seed->raw_len = strlen(curve->seed->raw); return 1; } @@ -99,20 +106,14 @@ GENERATOR(seed_gen_input) { GEN str = input_string("seed:"); const char *cstr = GSTR(str); if (strlen(cstr) < 20) { - fprintf(err, "SEED must be at least 160 bits(20 characters).\n"); + fprintf(err, "SEED must be at least 160 bits(20 hex characters).\n"); avma = ltop; return 0; } - GEN seed = seed_stoi(cstr); curve->seed = seed_new(); - curve->seed->seed = gerepilecopy(ltop, seed); - - size_t seed_len = strlen(cstr); - char *seed_str = try_malloc(seed_len + 1); - strcpy(seed_str, cfg->seed); - - curve->seed->raw = seed_str; - curve->seed->raw_len = seed_len; + curve->seed->seed = seed_stoi(cstr); + curve->seed->raw = seed_strip(cstr); + curve->seed->raw_len = strlen(curve->seed->raw); return 1; } diff --git a/test/src/gen/test_seed.c b/test/src/gen/test_seed.c index 28c24d3..b4da7e0 100644 --- a/test/src/gen/test_seed.c +++ b/test/src/gen/test_seed.c @@ -7,8 +7,22 @@ #include "gen/seed.h" #include "gen/types.h" #include "test/default.h" +#include "test/input.h" +#include "test/output.h" -TestSuite(seed, .init = default_setup, .fini = default_teardown); +void seed_suite_setup(void) { + default_setup(); + input_setup(); + output_setup(); +} + +void seed_suite_teardown(void) { + default_teardown(); + input_teardown(); + output_teardown(); +} + +TestSuite(seed, .init = seed_suite_setup, .fini = seed_suite_teardown); Test(seed, test_seed_random) { curve_t curve = {}; @@ -17,7 +31,7 @@ Test(seed, test_seed_random) { cr_assert_eq(ret, 1, ); cr_assert_not_null(curve.seed, ); - cr_assert_str_eq(pari_sprintf("%Px", curve.seed->seed), curve.seed->raw, ); + cr_assert_str_eq(curve.seed->raw, pari_sprintf("%Px", curve.seed->seed), ); cr_assert_eq(strlen(curve.seed->raw), curve.seed->raw_len, ); } @@ -30,8 +44,42 @@ Test(seed, test_seed_argument) { cr_assert_eq(ret, 1, ); cr_assert_not_null(curve.seed, ); cr_assert_str_eq(curve.seed->raw, seed, ); - cr_assert_str_eq(pari_sprintf("%Px", curve.seed->seed), curve.seed->raw, ); + cr_assert_str_eq(curve.seed->raw, pari_sprintf("%Px", curve.seed->seed), ); + cr_assert_eq(strlen(curve.seed->raw), curve.seed->raw_len, ); +} + +Test(seed, test_seed_argument_hex) { + curve_t curve = {}; + char *seed = "0xabcdefabcdefabcdefab"; + config_t cfg = {.seed = seed}; + int ret = seed_gen_argument(&curve, &cfg, NULL); + + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.seed, ); + cr_assert_str_eq(curve.seed->raw, pari_sprintf("%Px", curve.seed->seed), ); + cr_assert_eq(strlen(curve.seed->raw), curve.seed->raw_len, ); +} + +Test(seed, test_seed_input) { + curve_t curve = {}; + char *seed = "abcdefabcdefabcdefab"; + config_t cfg = {}; + fprintf(write_in, "%s\n", seed); + int ret = seed_gen_input(&curve, &cfg, NULL); + + cr_assert_eq(ret, 1, ); + cr_assert_not_null(curve.seed, ); + cr_assert_str_eq(curve.seed->raw, seed, ); + cr_assert_str_eq(curve.seed->raw, pari_sprintf("%Px", curve.seed->seed), ); cr_assert_eq(strlen(curve.seed->raw), curve.seed->raw_len, ); } -Test(seed, test_seed_input) {}
\ No newline at end of file +Test(seed, test_seed_input_short) { + curve_t curve = {}; + char *seed = "abcdef"; + config_t cfg = {}; + fprintf(write_in, "%s\n", seed); + int ret = seed_gen_input(&curve, &cfg, NULL); + + cr_assert_eq(ret, 0, ); +}
\ No newline at end of file |
