diff options
| author | J08nY | 2018-03-28 17:40:46 +0200 |
|---|---|---|
| committer | J08nY | 2018-03-28 17:41:08 +0200 |
| commit | bfee3d1ef27c87424b8d5324926593c1d852b91e (patch) | |
| tree | 3fbc4a67aab966b9e3053eb3db6cea4f032b2b88 | |
| parent | 97149b9104569f70dc0eec47e2e0df4d8d05022d (diff) | |
| download | ecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.tar.gz ecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.tar.zst ecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.zip | |
| -rw-r--r-- | src/exhaustive/exhaustive.c | 3 | ||||
| -rw-r--r-- | src/gen/curve.c | 74 | ||||
| -rw-r--r-- | src/gen/curve.h | 44 | ||||
| -rw-r--r-- | src/invalid/invalid.c | 1 | ||||
| -rw-r--r-- | src/invalid/invalid_thread.c | 1 | ||||
| -rw-r--r-- | src/obj/curve.c | 77 | ||||
| -rw-r--r-- | src/obj/curve.h | 53 | ||||
| -rw-r--r-- | test/src/gen/test_curve.c | 1 | ||||
| -rw-r--r-- | test/src/gen/test_point.c | 1 |
9 files changed, 136 insertions, 119 deletions
diff --git a/src/exhaustive/exhaustive.c b/src/exhaustive/exhaustive.c index 53273bc..28d464a 100644 --- a/src/exhaustive/exhaustive.c +++ b/src/exhaustive/exhaustive.c @@ -3,7 +3,6 @@ * Copyright (C) 2017-2018 J08nY */ #include "exhaustive.h" -#include <misc/config.h> #include "anomalous.h" #include "ansi.h" #include "brainpool.h" @@ -18,6 +17,8 @@ #include "gen/point.h" #include "gen/seed.h" #include "io/output.h" +#include "misc/config.h" +#include "obj/curve.h" #include "util/memory.h" #include "util/timeout.h" diff --git a/src/gen/curve.c b/src/gen/curve.c index da4a630..7ea2fb5 100644 --- a/src/gen/curve.c +++ b/src/gen/curve.c @@ -3,81 +3,7 @@ * Copyright (C) 2017-2018 J08nY */ #include "curve.h" -#include "math/subgroup.h" #include "math/twists.h" -#include "seed.h" -#include "util/memory.h" - -curve_t *curve_new(void) { return try_calloc(sizeof(curve_t)); } - -curve_t *curve_copy(const curve_t *src, curve_t *dest) { - if (src->seed) dest->seed = seed_new_copy(src->seed); - if (src->field) dest->field = gcopy(src->field); - if (src->a) dest->a = gcopy(src->a); - if (src->b) dest->b = gcopy(src->b); - if (src->curve) dest->curve = gcopy(src->curve); - if (src->order) dest->order = gcopy(src->order); - if (src->generators) { - dest->generators = subgroups_new_copy(src->generators, src->ngens); - dest->ngens = src->ngens; - } - return dest; -} - -curve_t *curve_new_copy(const curve_t *src) { - curve_t *result = curve_new(); - return curve_copy(src, result); -} - -curve_t *curve_clone(const curve_t *src, curve_t *dest) { - if (src->seed) dest->seed = seed_new_clone(src->seed); - if (src->field) dest->field = gclone(src->field); - if (src->a) dest->a = gclone(src->a); - if (src->b) dest->b = gclone(src->b); - if (src->curve) dest->curve = gclone(src->curve); - if (src->order) dest->order = gclone(src->order); - if (src->generators) { - dest->generators = subgroups_new_clone(src->generators, src->ngens); - dest->ngens = src->ngens; - } - return dest; -} - -curve_t *curve_new_clone(const curve_t *src) { - curve_t *result = curve_new(); - return curve_clone(src, result); -} - -void curve_free(curve_t **curve) { - if (*curve) { - seed_free(&(*curve)->seed); - subgroups_free_deep(&(*curve)->generators, (*curve)->ngens); - - if ((*curve)->curve) { - // TODO, this is possibly dangerous... - obj_free((*curve)->curve); - if (isclone((*curve)->curve)) { - gunclone((*curve)->curve); - } - } - - if ((*curve)->field && isclone((*curve)->field)) { - gunclone((*curve)->field); - } - if ((*curve)->a && isclone((*curve)->a)) { - gunclone((*curve)->a); - } - if ((*curve)->b && isclone((*curve)->b)) { - gunclone((*curve)->b); - } - if ((*curve)->order && isclone((*curve)->order)) { - gunclone((*curve)->order); - } - - try_free(*curve); - *curve = NULL; - } -} GENERATOR(curve_gen_any) { pari_sp ltop = avma; diff --git a/src/gen/curve.h b/src/gen/curve.h index b2158eb..3a34781 100644 --- a/src/gen/curve.h +++ b/src/gen/curve.h @@ -52,48 +52,4 @@ CHECK(curve_check_nonzero); */ UNROLL(curve_unroll); -/** - * Allocates and zeros out a new curve_t object. - * @return new curve - */ -curve_t *curve_new(void); - -/** - * Copies parameters from src curve to dest curve, allocates space for points. - * Otherwise expects everything to be allocated. - * - * @param src source curve - * @param dest destination curve - * @return destination curve - */ -curve_t *curve_copy(const curve_t *src, curve_t *dest); - -/** - * - * @param src - * @return - */ -curve_t *curve_new_copy(const curve_t *src); - -/** - * - * @param src - * @param dest - * @return - */ -curve_t *curve_clone(const curve_t *src, curve_t *dest); - -/** - * - * @param src - * @return - */ -curve_t *curve_new_clone(const curve_t *src); - -/** - * Free a curve_t along with it's seed_t and point_ts. - * @param curve to free - */ -void curve_free(curve_t **curve); - #endif // ECGEN_GEN_CURVE_H diff --git a/src/invalid/invalid.c b/src/invalid/invalid.c index aeda327..6a0f85a 100644 --- a/src/invalid/invalid.c +++ b/src/invalid/invalid.c @@ -13,6 +13,7 @@ #include "gen/order.h" #include "gen/point.h" #include "invalid_thread.h" +#include "obj/curve.h" #include "util/memory.h" static void invalid_original_ginit(gen_f *generators) { diff --git a/src/invalid/invalid_thread.c b/src/invalid/invalid_thread.c index cf0f67c..74f247c 100644 --- a/src/invalid/invalid_thread.c +++ b/src/invalid/invalid_thread.c @@ -7,6 +7,7 @@ #include "gen/curve.h" #include "gen/gens.h" #include "gen/point.h" +#include "obj/curve.h" #include "util/random.h" #include "util/timeout.h" diff --git a/src/obj/curve.c b/src/obj/curve.c new file mode 100644 index 0000000..b052729 --- /dev/null +++ b/src/obj/curve.c @@ -0,0 +1,77 @@ + +#include "curve.h" +#include "gen/seed.h" +#include "math/subgroup.h" +#include "misc/types.h" +#include "util/memory.h" + +curve_t *curve_new(void) { return try_calloc(sizeof(curve_t)); } + +curve_t *curve_copy(const curve_t *src, curve_t *dest) { + if (src->seed) dest->seed = seed_new_copy(src->seed); + if (src->field) dest->field = gcopy(src->field); + if (src->a) dest->a = gcopy(src->a); + if (src->b) dest->b = gcopy(src->b); + if (src->curve) dest->curve = gcopy(src->curve); + if (src->order) dest->order = gcopy(src->order); + if (src->generators) { + dest->generators = subgroups_new_copy(src->generators, src->ngens); + dest->ngens = src->ngens; + } + return dest; +} + +curve_t *curve_new_copy(const curve_t *src) { + curve_t *result = curve_new(); + return curve_copy(src, result); +} + +curve_t *curve_clone(const curve_t *src, curve_t *dest) { + if (src->seed) dest->seed = seed_new_clone(src->seed); + if (src->field) dest->field = gclone(src->field); + if (src->a) dest->a = gclone(src->a); + if (src->b) dest->b = gclone(src->b); + if (src->curve) dest->curve = gclone(src->curve); + if (src->order) dest->order = gclone(src->order); + if (src->generators) { + dest->generators = subgroups_new_clone(src->generators, src->ngens); + dest->ngens = src->ngens; + } + return dest; +} + +curve_t *curve_new_clone(const curve_t *src) { + curve_t *result = curve_new(); + return curve_clone(src, result); +} + +void curve_free(curve_t **curve) { + if (*curve) { + seed_free(&(*curve)->seed); + subgroups_free_deep(&(*curve)->generators, (*curve)->ngens); + + if ((*curve)->curve) { + // TODO, this is possibly dangerous... + obj_free((*curve)->curve); + if (isclone((*curve)->curve)) { + gunclone((*curve)->curve); + } + } + + if ((*curve)->field && isclone((*curve)->field)) { + gunclone((*curve)->field); + } + if ((*curve)->a && isclone((*curve)->a)) { + gunclone((*curve)->a); + } + if ((*curve)->b && isclone((*curve)->b)) { + gunclone((*curve)->b); + } + if ((*curve)->order && isclone((*curve)->order)) { + gunclone((*curve)->order); + } + + try_free(*curve); + *curve = NULL; + } +}
\ No newline at end of file diff --git a/src/obj/curve.h b/src/obj/curve.h new file mode 100644 index 0000000..5d8886b --- /dev/null +++ b/src/obj/curve.h @@ -0,0 +1,53 @@ + +#ifndef ECGEN_OBJ_CURVE_H +#define ECGEN_OBJ_CURVE_H + +#include "misc/types.h" + +/** + * Allocates and zeros out a new curve_t object. + * @return new curve + */ +curve_t *curve_new(void); + +/** + * Copies parameters from src curve to dest curve, allocates space for points. + * Otherwise expects everything to be allocated. + * + * @param src source curve + * @param dest destination curve + * @return destination curve + */ +curve_t *curve_copy(const curve_t *src, curve_t *dest); + +/** + * + * @param src + * @return + */ +curve_t *curve_new_copy(const curve_t *src); + +/** + * + * @param src + * @param dest + * @return + */ +curve_t *curve_clone(const curve_t *src, curve_t *dest); + +/** + * + * @param src + * @return + */ +curve_t *curve_new_clone(const curve_t *src); + +/** + * Free a curve_t along with it's seed_t and point_ts. + * @param curve to free + */ +void curve_free(curve_t **curve); + +#include "misc/types.h" + +#endif // ECGEN_OBJ_CURVE_H diff --git a/test/src/gen/test_curve.c b/test/src/gen/test_curve.c index 3fe4801..cd4bb5a 100644 --- a/test/src/gen/test_curve.c +++ b/test/src/gen/test_curve.c @@ -4,6 +4,7 @@ */ #include <criterion/criterion.h> #include "gen/curve.h" +#include "obj/curve.h" #include "test/default.h" TestSuite(curve, .init = default_setup, .fini = default_teardown); diff --git a/test/src/gen/test_point.c b/test/src/gen/test_point.c index 4bb3cd7..97f5445 100644 --- a/test/src/gen/test_point.c +++ b/test/src/gen/test_point.c @@ -7,6 +7,7 @@ #include "gen/curve.h" #include "gen/point.h" #include "math/subgroup.h" +#include "obj/curve.h" #include "obj/point.h" #include "test/io.h" |
