diff options
| author | J08nY | 2018-03-28 18:04:06 +0200 |
|---|---|---|
| committer | J08nY | 2018-03-28 18:04:06 +0200 |
| commit | 2f4a68259dec833c77a9598f9c1a5da547e9324d (patch) | |
| tree | 0e5bb14cfe3fe42ab87f216c3e488862e90e5937 /src/obj | |
| parent | bfee3d1ef27c87424b8d5324926593c1d852b91e (diff) | |
| download | ecgen-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.c | 1 | ||||
| -rw-r--r-- | src/obj/subgroup.c | 97 | ||||
| -rw-r--r-- | src/obj/subgroup.h | 109 |
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 |
