aboutsummaryrefslogtreecommitdiff
path: root/src/obj
diff options
context:
space:
mode:
authorJ08nY2018-03-28 18:04:06 +0200
committerJ08nY2018-03-28 18:04:06 +0200
commit2f4a68259dec833c77a9598f9c1a5da547e9324d (patch)
tree0e5bb14cfe3fe42ab87f216c3e488862e90e5937 /src/obj
parentbfee3d1ef27c87424b8d5324926593c1d852b91e (diff)
downloadecgen-2f4a68259dec833c77a9598f9c1a5da547e9324d.tar.gz
ecgen-2f4a68259dec833c77a9598f9c1a5da547e9324d.tar.zst
ecgen-2f4a68259dec833c77a9598f9c1a5da547e9324d.zip
Separate subgroup object functions into obj.
Diffstat (limited to 'src/obj')
-rw-r--r--src/obj/curve.c1
-rw-r--r--src/obj/subgroup.c97
-rw-r--r--src/obj/subgroup.h109
3 files changed, 207 insertions, 0 deletions
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