From f9cf8e164012d182c206804a68675f43cbebfd01 Mon Sep 17 00:00:00 2001 From: hoguchi live Date: Sun, 28 Nov 2021 19:13:17 +0100 Subject: [PATCH] Committer: hoguchi live On branch master Initial commit Changes to be committed: new file: EllipticCurves/memory.c new file: EllipticCurves/memory.h new file: EllipticCurves/models.c new file: EllipticCurves/models.h new file: compile.sh new file: main new file: main.c --- CRS.git/EllipticCurves/memory.c | 57 ++++++++++++++++++++++++++++++++ CRS.git/EllipticCurves/memory.h | 14 ++++++++ CRS.git/EllipticCurves/models.c | 8 +++++ CRS.git/EllipticCurves/models.h | 16 +++++++++ CRS.git/compile.sh | 4 +++ CRS.git/main | Bin 0 -> 21832 bytes CRS.git/main.c | 43 ++++++++++++++++++++++++ 7 files changed, 142 insertions(+) create mode 100644 CRS.git/EllipticCurves/memory.c create mode 100644 CRS.git/EllipticCurves/memory.h create mode 100644 CRS.git/EllipticCurves/models.c create mode 100644 CRS.git/EllipticCurves/models.h create mode 100755 CRS.git/compile.sh create mode 100755 CRS.git/main create mode 100644 CRS.git/main.c diff --git a/CRS.git/EllipticCurves/memory.c b/CRS.git/EllipticCurves/memory.c new file mode 100644 index 0000000..c5cbf6d --- /dev/null +++ b/CRS.git/EllipticCurves/memory.c @@ -0,0 +1,57 @@ +#include +#include + +#include "memory.h" +#include "models.h" + +#include +#include +#include + +void SW_init(SW_curve *E, const fq_ctx_t *F) { + + //fmpz_init(E->p); + fq_init(E->a, *F); + fq_init(E->b, *F); +} + +void SW_set(SW_curve *E, const fq_ctx_t *F, const fmpz_t a, const fmpz_t b) { + + fmpz_t p; + long d; + + fmpz_init_set(p, fq_ctx_prime(*F)); + d = fq_ctx_degree(*F); + + E->F = F; + fq_set_fmpz(E->a, a, *F); + fq_set_fmpz(E->b, b, *F); + + fmpz_clear(p); +} + +void SW_print(SW_curve *E) { + + printf("Elliptic curve Y^3 = X^3 + "); + fq_print_pretty(E->a, *(E->F)); + printf("X + "); + fq_print_pretty(E->b, *(E->F)); + printf(" in short Weierstrass form over F_p^d with p = "); + //fmpz_print(E->p); + //printf(" and d = %ld", E->d); +} + +//#define template_weierstrass(a1, a2, a3, a4, a6) const fmpz_t a1, const fmpz_t a2, const fmpz_t a3, const fmpz_t a4, const fmpz_t a6 +//void print_test(template_weierstrass(a1, a2, a3, a4, a6)) { +// printf("\n"); +// fmpz_print(a1); +// printf("\n"); +// fmpz_print(a2); +// printf("\n"); +// fmpz_print(a3); +// printf("\n"); +// fmpz_print(a4); +// printf("\n"); +// fmpz_print(a6); +// printf("\n"); +//} diff --git a/CRS.git/EllipticCurves/memory.h b/CRS.git/EllipticCurves/memory.h new file mode 100644 index 0000000..add7408 --- /dev/null +++ b/CRS.git/EllipticCurves/memory.h @@ -0,0 +1,14 @@ +#ifndef _MEMORY_H_ +#define _MEMORY_H_ + +#include "models.h" + +#include +#include +#include + +void SW_init(SW_curve *, const fq_ctx_t *); +void SW_set(SW_curve *, const fq_ctx_t *, const fmpz_t, const fmpz_t); +void SW_print(SW_curve *); + +#endif diff --git a/CRS.git/EllipticCurves/models.c b/CRS.git/EllipticCurves/models.c new file mode 100644 index 0000000..2570641 --- /dev/null +++ b/CRS.git/EllipticCurves/models.c @@ -0,0 +1,8 @@ +#include +#include + +#include "models.h" + +#include +#include +#include diff --git a/CRS.git/EllipticCurves/models.h b/CRS.git/EllipticCurves/models.h new file mode 100644 index 0000000..5bde354 --- /dev/null +++ b/CRS.git/EllipticCurves/models.h @@ -0,0 +1,16 @@ +#ifndef _MODELS_H_ +#define _MODELS_H_ + +#include +#include +#include + +typedef struct SW_curve{ + + const fq_ctx_t *F; // base field + //fmpz_t p; // characteristic + //slong d; // degree + + fq_t a, b; // curve parameters +} SW_curve; +#endif diff --git a/CRS.git/compile.sh b/CRS.git/compile.sh new file mode 100755 index 0000000..1ba1fa4 --- /dev/null +++ b/CRS.git/compile.sh @@ -0,0 +1,4 @@ +gcc EllipticCurves/memory.c \ + EllipticCurves/models.c \ + main.c \ + -lgmp -lflint -o main && ./main diff --git a/CRS.git/main b/CRS.git/main new file mode 100755 index 0000000000000000000000000000000000000000..35aef742656b1114d7277500356b496c328470b2 GIT binary patch literal 21832 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 +#include + +#include "EllipticCurves/models.h" +#include "EllipticCurves/memory.h" + +#include +#include +#include + +int main() { + + // Elliptic curve parameters + char p_str[] = "0x13"; + slong d = 2; + char a_str[] = "0x1"; + char b_str[] = "0x7"; + + fmpz_t p_fmpz, a_fmpz, b_fmpz; + fmpz_init(p_fmpz); + fmpz_init(a_fmpz); + fmpz_init(b_fmpz); + + fmpz_set_str(p_fmpz, p_str, 0); + fmpz_set_str(a_fmpz, a_str, 0); + fmpz_set_str(b_fmpz, b_str, 0); + + // Finite field context + fq_ctx_t F; + char *Fgen = "g"; + fq_ctx_init(F, p_fmpz, d, Fgen); + + // Base curve + SW_curve E; + SW_init(&E, &F); + SW_set(&E, &F, a_fmpz, b_fmpz); + + // Print base curve + SW_print(&E); + //print_test(a_fmpz, b_fmpz, a_fmpz, a_fmpz, b_fmpz); + + return 0; +}