aboutsummaryrefslogtreecommitdiff
path: root/src/math/subgroup.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/subgroup.h')
-rw-r--r--src/math/subgroup.h139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/math/subgroup.h b/src/math/subgroup.h
new file mode 100644
index 0000000..ad36826
--- /dev/null
+++ b/src/math/subgroup.h
@@ -0,0 +1,139 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017-2018 J08nY
+ */
+/**
+ * @file subgroup.h
+ */
+#ifndef ECGEN_SUBGROUPS_H
+#define ECGEN_SUBGROUPS_H
+
+#include <pari/pari.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);
+
+/**
+ * @brief All prime factors of a given integer, without multipliticity.
+ *
+ * subgroups_factors(27) = [3]
+ * @param order
+ * @return a t_VEC of prime factors.
+ */
+GEN subgroups_prime(GEN order);
+
+/**
+ * @brief All nonprime subgroup orders of a given integer.
+ * @param order
+ * @return a t_VEC of nonprime factors.
+ */
+GEN subgroups_nonprime(GEN order);
+
+/**
+ * @brief All all subgroup orders of a given integer.
+ * @param order
+ * @return a t_VEC of all factors.
+ */
+GEN subgroups_all(GEN order);
+
+#endif // ECGEN_SUBGROUPS_H