aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/exhaustive/brainpool.c1
-rw-r--r--src/gen/gens.c1
-rw-r--r--src/math/subgroup.c95
-rw-r--r--src/math/subgroup.h102
-rw-r--r--src/math/twists.c2
-rw-r--r--src/obj/curve.c1
-rw-r--r--src/obj/subgroup.c97
-rw-r--r--src/obj/subgroup.h109
8 files changed, 210 insertions, 198 deletions
diff --git a/src/exhaustive/brainpool.c b/src/exhaustive/brainpool.c
index 085e961..56c095d 100644
--- a/src/exhaustive/brainpool.c
+++ b/src/exhaustive/brainpool.c
@@ -9,6 +9,7 @@
#include "io/output.h"
#include "math/subgroup.h"
#include "obj/point.h"
+#include "obj/subgroup.h"
#include "util/bits.h"
#include "util/str.h"
diff --git a/src/gen/gens.c b/src/gen/gens.c
index edbe98a..d106f7c 100644
--- a/src/gen/gens.c
+++ b/src/gen/gens.c
@@ -6,6 +6,7 @@
#include "exhaustive/arg.h"
#include "math/subgroup.h"
#include "obj/point.h"
+#include "obj/subgroup.h"
static subgroup_t *gens_point(GEN point, const curve_t *curve) {
subgroup_t *sub = subgroup_new();
diff --git a/src/math/subgroup.c b/src/math/subgroup.c
index f0f2e19..eb8ff27 100644
--- a/src/math/subgroup.c
+++ b/src/math/subgroup.c
@@ -3,101 +3,6 @@
* Copyright (C) 2017-2018 J08nY
*/
#include "subgroup.h"
-#include "obj/point.h"
-#include "util/memory.h"
-
-subgroup_t *subgroup_new(void) { return try_calloc(sizeof(subgroup_t)); }
-
-subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst) {
- if (src->generator) dst->generator = point_new_copy(src->generator);
- if (src->points) {
- dst->points = points_new_copy(src->points, src->npoints);
- dst->npoints = src->npoints;
- }
- return dst;
-}
-
-subgroup_t *subgroup_new_copy(const subgroup_t *src) {
- subgroup_t *result = subgroup_new();
- return subgroup_copy(src, result);
-}
-
-subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst) {
- if (src->generator) dst->generator = point_new_clone(src->generator);
- if (src->points) {
- dst->points = points_new_clone(src->points, src->npoints);
- dst->npoints = src->npoints;
- }
- return dst;
-}
-
-subgroup_t *subgroup_new_clone(const subgroup_t *src) {
- subgroup_t *result = subgroup_new();
- return subgroup_clone(src, result);
-}
-
-void subgroup_free(subgroup_t **subgroup) {
- if (*subgroup) {
- if ((*subgroup)->generator) {
- point_free(&(*subgroup)->generator);
- }
- try_free(*subgroup);
- *subgroup = NULL;
- }
-}
-
-void subgroup_free_deep(subgroup_t **subgroup) {
- if (*subgroup) {
- points_free_deep(&(*subgroup)->points, (*subgroup)->npoints);
- subgroup_free(subgroup);
- }
-}
-
-subgroup_t **subgroups_new(size_t num) {
- return try_calloc(num * sizeof(subgroup_t *));
-}
-
-subgroup_t **subgroups_copy(subgroup_t **const src, subgroup_t **dest,
- size_t num) {
- for (size_t i = 0; i < num; ++i) {
- dest[i] = subgroup_new_copy(src[i]);
- }
- return dest;
-}
-
-subgroup_t **subgroups_new_copy(subgroup_t **const src, size_t num) {
- subgroup_t **result = subgroups_new(num);
- return subgroups_copy(src, result, num);
-}
-
-subgroup_t **subgroups_clone(subgroup_t **const src, subgroup_t **dest,
- size_t num) {
- for (size_t i = 0; i < num; ++i) {
- dest[i] = subgroup_new_clone(src[i]);
- }
- return dest;
-}
-
-subgroup_t **subgroups_new_clone(subgroup_t **const src, size_t num) {
- subgroup_t **result = subgroups_new(num);
- return subgroups_clone(src, result, num);
-}
-
-void subgroups_free(subgroup_t ***subgroups) {
- if (*subgroups) {
- try_free(*subgroups);
- *subgroups = NULL;
- }
-}
-
-void subgroups_free_deep(subgroup_t ***subgroups, size_t num) {
- if (*subgroups) {
- for (size_t i = 0; i < num; ++i) {
- subgroup_free(&(*subgroups)[i]);
- }
- subgroups_free(subgroups);
- }
-}
/**
* @brief All prime divisors of a given integer with multiplicity.
diff --git a/src/math/subgroup.h b/src/math/subgroup.h
index 94df006..68657fb 100644
--- a/src/math/subgroup.h
+++ b/src/math/subgroup.h
@@ -12,108 +12,6 @@
#include "misc/types.h"
/**
- * @brief
- * @return
- */
-subgroup_t *subgroup_new(void);
-
-/**
- * @brief
- * @param src
- * @param dst
- * @return
- */
-subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst);
-
-/**
- * @brief
- * @param src
- * @return
- */
-subgroup_t *subgroup_new_copy(const subgroup_t *src);
-
-/**
- * @brief
- * @param src
- * @param dst
- * @return
- */
-subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst);
-
-/**
- * @brief
- * @param src
- * @return
- */
-subgroup_t *subgroup_new_clone(const subgroup_t *src);
-
-/**
- * @brief
- * @param subgroup
- */
-void subgroup_free(subgroup_t **subgroup);
-
-/**
- * @brief
- * @param subgroup
- */
-void subgroup_free_deep(subgroup_t **subgroup);
-
-/**
- * @brief
- * @param num
- * @return
- */
-subgroup_t **subgroups_new(size_t num);
-
-/**
- *
- * @param src
- * @param dest
- * @param num
- * @return
- */
-subgroup_t **subgroups_copy(subgroup_t **src, subgroup_t **dest, size_t num);
-
-/**
- *
- * @param src
- * @param num
- * @return
- */
-subgroup_t **subgroups_new_copy(subgroup_t **src, size_t num);
-
-/**
- *
- * @param src
- * @param dest
- * @param num
- * @return
- */
-subgroup_t **subgroups_clone(subgroup_t **src, subgroup_t **dest, size_t num);
-
-/**
- *
- * @param src
- * @param num
- * @return
- */
-subgroup_t **subgroups_new_clone(subgroup_t **src, size_t num);
-
-/**
- * @brief
- * @param subgroups
- */
-void subgroups_free(subgroup_t ***subgroups);
-
-/**
- * @brief
- * @param subgroups
- * @param num
- */
-void subgroups_free_deep(subgroup_t ***subgroups, size_t num);
-
-/**
* @brief All prime factors of a given integer, without multipliticity.
*
* subgroups_factors(27) = [3]
diff --git a/src/math/twists.c b/src/math/twists.c
index 992b7cf..0d4b14c 100644
--- a/src/math/twists.c
+++ b/src/math/twists.c
@@ -4,7 +4,7 @@
*/
#include "twists.h"
#include "gen/seed.h"
-#include "math/subgroup.h"
+#include "obj/subgroup.h"
void twist_rand_to(curve_t *to, const curve_t *of) {
to->field = gcopy(of->field);
diff --git a/src/obj/curve.c b/src/obj/curve.c
index b052729..8d54f50 100644
--- a/src/obj/curve.c
+++ b/src/obj/curve.c
@@ -3,6 +3,7 @@
#include "gen/seed.h"
#include "math/subgroup.h"
#include "misc/types.h"
+#include "obj/subgroup.h"
#include "util/memory.h"
curve_t *curve_new(void) { return try_calloc(sizeof(curve_t)); }
diff --git a/src/obj/subgroup.c b/src/obj/subgroup.c
new file mode 100644
index 0000000..732e0a9
--- /dev/null
+++ b/src/obj/subgroup.c
@@ -0,0 +1,97 @@
+
+#include "subgroup.h"
+#include "point.h"
+#include "util/memory.h"
+
+subgroup_t *subgroup_new(void) { return try_calloc(sizeof(subgroup_t)); }
+
+subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst) {
+ if (src->generator) dst->generator = point_new_copy(src->generator);
+ if (src->points) {
+ dst->points = points_new_copy(src->points, src->npoints);
+ dst->npoints = src->npoints;
+ }
+ return dst;
+}
+
+subgroup_t *subgroup_new_copy(const subgroup_t *src) {
+ subgroup_t *result = subgroup_new();
+ return subgroup_copy(src, result);
+}
+
+subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst) {
+ if (src->generator) dst->generator = point_new_clone(src->generator);
+ if (src->points) {
+ dst->points = points_new_clone(src->points, src->npoints);
+ dst->npoints = src->npoints;
+ }
+ return dst;
+}
+
+subgroup_t *subgroup_new_clone(const subgroup_t *src) {
+ subgroup_t *result = subgroup_new();
+ return subgroup_clone(src, result);
+}
+
+void subgroup_free(subgroup_t **subgroup) {
+ if (*subgroup) {
+ if ((*subgroup)->generator) {
+ point_free(&(*subgroup)->generator);
+ }
+ try_free(*subgroup);
+ *subgroup = NULL;
+ }
+}
+
+void subgroup_free_deep(subgroup_t **subgroup) {
+ if (*subgroup) {
+ points_free_deep(&(*subgroup)->points, (*subgroup)->npoints);
+ subgroup_free(subgroup);
+ }
+}
+
+subgroup_t **subgroups_new(size_t num) {
+ return try_calloc(num * sizeof(subgroup_t *));
+}
+
+subgroup_t **subgroups_copy(subgroup_t **const src, subgroup_t **dest,
+ size_t num) {
+ for (size_t i = 0; i < num; ++i) {
+ dest[i] = subgroup_new_copy(src[i]);
+ }
+ return dest;
+}
+
+subgroup_t **subgroups_new_copy(subgroup_t **const src, size_t num) {
+ subgroup_t **result = subgroups_new(num);
+ return subgroups_copy(src, result, num);
+}
+
+subgroup_t **subgroups_clone(subgroup_t **const src, subgroup_t **dest,
+ size_t num) {
+ for (size_t i = 0; i < num; ++i) {
+ dest[i] = subgroup_new_clone(src[i]);
+ }
+ return dest;
+}
+
+subgroup_t **subgroups_new_clone(subgroup_t **const src, size_t num) {
+ subgroup_t **result = subgroups_new(num);
+ return subgroups_clone(src, result, num);
+}
+
+void subgroups_free(subgroup_t ***subgroups) {
+ if (*subgroups) {
+ try_free(*subgroups);
+ *subgroups = NULL;
+ }
+}
+
+void subgroups_free_deep(subgroup_t ***subgroups, size_t num) {
+ if (*subgroups) {
+ for (size_t i = 0; i < num; ++i) {
+ subgroup_free(&(*subgroups)[i]);
+ }
+ subgroups_free(subgroups);
+ }
+}
diff --git a/src/obj/subgroup.h b/src/obj/subgroup.h
new file mode 100644
index 0000000..8c56f9c
--- /dev/null
+++ b/src/obj/subgroup.h
@@ -0,0 +1,109 @@
+
+#ifndef ECGEN_OBJ_SUBGROUP_H
+#define ECGEN_OBJ_SUBGROUP_H
+
+#include "misc/types.h"
+
+/**
+ * @brief
+ * @return
+ */
+subgroup_t *subgroup_new(void);
+
+/**
+ * @brief
+ * @param src
+ * @param dst
+ * @return
+ */
+subgroup_t *subgroup_copy(const subgroup_t *src, subgroup_t *dst);
+
+/**
+ * @brief
+ * @param src
+ * @return
+ */
+subgroup_t *subgroup_new_copy(const subgroup_t *src);
+
+/**
+ * @brief
+ * @param src
+ * @param dst
+ * @return
+ */
+subgroup_t *subgroup_clone(const subgroup_t *src, subgroup_t *dst);
+
+/**
+ * @brief
+ * @param src
+ * @return
+ */
+subgroup_t *subgroup_new_clone(const subgroup_t *src);
+
+/**
+ * @brief
+ * @param subgroup
+ */
+void subgroup_free(subgroup_t **subgroup);
+
+/**
+ * @brief
+ * @param subgroup
+ */
+void subgroup_free_deep(subgroup_t **subgroup);
+
+/**
+ * @brief
+ * @param num
+ * @return
+ */
+subgroup_t **subgroups_new(size_t num);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @param num
+ * @return
+ */
+subgroup_t **subgroups_copy(subgroup_t **src, subgroup_t **dest, size_t num);
+
+/**
+ *
+ * @param src
+ * @param num
+ * @return
+ */
+subgroup_t **subgroups_new_copy(subgroup_t **src, size_t num);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @param num
+ * @return
+ */
+subgroup_t **subgroups_clone(subgroup_t **src, subgroup_t **dest, size_t num);
+
+/**
+ *
+ * @param src
+ * @param num
+ * @return
+ */
+subgroup_t **subgroups_new_clone(subgroup_t **src, size_t num);
+
+/**
+ * @brief
+ * @param subgroups
+ */
+void subgroups_free(subgroup_t ***subgroups);
+
+/**
+ * @brief
+ * @param subgroups
+ * @param num
+ */
+void subgroups_free_deep(subgroup_t ***subgroups, size_t num);
+
+#endif // ECGEN_OBJ_SUBGROUP_H