aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2018-03-28 17:40:46 +0200
committerJ08nY2018-03-28 17:41:08 +0200
commitbfee3d1ef27c87424b8d5324926593c1d852b91e (patch)
tree3fbc4a67aab966b9e3053eb3db6cea4f032b2b88
parent97149b9104569f70dc0eec47e2e0df4d8d05022d (diff)
downloadecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.tar.gz
ecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.tar.zst
ecgen-bfee3d1ef27c87424b8d5324926593c1d852b91e.zip
-rw-r--r--src/exhaustive/exhaustive.c3
-rw-r--r--src/gen/curve.c74
-rw-r--r--src/gen/curve.h44
-rw-r--r--src/invalid/invalid.c1
-rw-r--r--src/invalid/invalid_thread.c1
-rw-r--r--src/obj/curve.c77
-rw-r--r--src/obj/curve.h53
-rw-r--r--test/src/gen/test_curve.c1
-rw-r--r--test/src/gen/test_point.c1
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"