aboutsummaryrefslogtreecommitdiff
path: root/src/gen/point.h
diff options
context:
space:
mode:
authorJ08nY2017-05-31 23:07:35 +0200
committerJ08nY2017-05-31 23:07:35 +0200
commit637702cb14fe7133f3cffe58eaaca4186d67fc43 (patch)
treebdbb50a3fd8cae28a1c767d3fe20a3c0c752cab9 /src/gen/point.h
parentba8c1f2bc424205cbb167b3c65ce184912c6173a (diff)
downloadecgen-637702cb14fe7133f3cffe58eaaca4186d67fc43.tar.gz
ecgen-637702cb14fe7133f3cffe58eaaca4186d67fc43.tar.zst
ecgen-637702cb14fe7133f3cffe58eaaca4186d67fc43.zip
Diffstat (limited to 'src/gen/point.h')
-rw-r--r--src/gen/point.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/src/gen/point.h b/src/gen/point.h
new file mode 100644
index 0000000..1a0b348
--- /dev/null
+++ b/src/gen/point.h
@@ -0,0 +1,180 @@
+/*
+ * ecgen, tool for generating Elliptic curve domain parameters
+ * Copyright (C) 2017 J08nY
+ */
+/**
+ * @file point.h
+ */
+#ifndef ECGEN_POINT_H
+#define ECGEN_POINT_H
+
+#include "types.h"
+
+/**
+ *
+ * @return
+ */
+point_t *point_new(void);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @return
+ */
+point_t *point_copy(const point_t *src, point_t *dest);
+
+/**
+ *
+ * @param src
+ * @return
+ */
+point_t *point_new_copy(const point_t *src);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @return
+ */
+point_t *point_clone(const point_t *src, point_t *dest);
+
+/**
+ *
+ * @param src
+ * @return
+ */
+point_t *point_new_clone(const point_t *src);
+
+/**
+ *
+ * @param point
+ */
+void point_free(point_t **point);
+
+/**
+ *
+ * @param num
+ * @return
+ */
+point_t **points_new(size_t num);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @param num
+ * @return
+ */
+point_t **points_copy(point_t **const src, point_t **dest, size_t num);
+
+/**
+ *
+ * @param src
+ * @param num
+ * @return
+ */
+point_t **points_new_copy(point_t **const src, size_t num);
+
+/**
+ *
+ * @param src
+ * @param dest
+ * @param num
+ * @return
+ */
+point_t **points_clone(point_t **const src, point_t **dest, size_t num);
+
+/**
+ *
+ * @param src
+ * @param num
+ * @return
+ */
+point_t **points_new_clone(point_t **const src, size_t num);
+
+/**
+ *
+ * @param point
+ */
+void points_free(point_t ***point);
+
+/**
+ *
+ * @param points
+ * @param npoints
+ */
+void points_free_deep(point_t ***points, size_t npoints);
+
+/**
+ * GENERATOR(gen_t)
+ *
+ * @param curve A curve_t being generated
+ * @param cfg An application config
+ * @param args unused
+ * @return state diff
+ */
+GENERATOR(point_gen_random);
+
+/**
+ * GENERATOR(gen_t)
+ *
+ * @param curve A curve_t being generated
+ * @param cfg An application config
+ * @param args size_t number of points to generate
+ * @return state diff
+ */
+GENERATOR(points_gen_random);
+
+/**
+ * GENERATOR(gen_t)
+ * Generates prime order points using trial division.
+ *
+ * Assumes the primes divide curve order, thus that points with all
+ * prime orders specified exist.
+ *
+ * @param curve A curve_t being generated
+ * @param cfg An application config
+ * @param args pari_ulong array of primes length nargs
+ * @return state diff
+ */
+GENERATOR(points_gen_trial);
+
+/**
+ * GENERATOR(gen_t)
+ *
+ * Cauchy:
+ * Let G be a finite group and p be a prime. If p divides the order of G, then
+ * G has an element of order p.
+ *
+ * @param curve A curve_t being generated
+ * @param cfg An application config
+ * @param args unused
+ * @return state diff
+ */
+GENERATOR(points_gen_prime);
+
+/**
+ * GENERATOR(gen_t)
+ *
+ * Generates points on all subgroups of the curve. Prime and non-prime order.
+ *
+ * @param curve A curve_t being generated
+ * @param cfg An application config
+ * @param args unused
+ * @return state diff
+ */
+GENERATOR(points_gen_allgroups);
+
+/**
+ * UNROLL(unroll_t)
+ *
+ * @param curve
+ * @param cfg
+ * @param from
+ * @param to
+ * @return
+ */
+UNROLL(points_unroll);
+
+#endif // ECGEN_POINT_H