commit f9cf8e164012d182c206804a68675f43cbebfd01 Author: hoguchi live Date: Sun Nov 28 19:13:17 2021 +0100 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 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 0000000..35aef74 Binary files /dev/null and b/CRS.git/main differ diff --git a/CRS.git/main.c b/CRS.git/main.c new file mode 100644 index 0000000..ac5403b --- /dev/null +++ b/CRS.git/main.c @@ -0,0 +1,43 @@ +#include +#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; +}