Committer: hoguchi live <steaky@woto.localdomain>

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
This commit is contained in:
hoguchi live 2021-11-28 19:13:17 +01:00
commit f9cf8e1640
7 changed files with 142 additions and 0 deletions

View File

@ -0,0 +1,57 @@
#include <stdio.h>
#include <stdlib.h>
#include "memory.h"
#include "models.h"
#include <gmp.h>
#include <flint/fmpz.h>
#include <flint/fq.h>
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");
//}

View File

@ -0,0 +1,14 @@
#ifndef _MEMORY_H_
#define _MEMORY_H_
#include "models.h"
#include <gmp.h>
#include <flint/fmpz.h>
#include <flint/fq.h>
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

View File

@ -0,0 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
#include "models.h"
#include <gmp.h>
#include <flint/fmpz.h>
#include <flint/fq.h>

View File

@ -0,0 +1,16 @@
#ifndef _MODELS_H_
#define _MODELS_H_
#include <gmp.h>
#include <flint/fmpz.h>
#include <flint/fq.h>
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

4
CRS.git/compile.sh Executable file
View File

@ -0,0 +1,4 @@
gcc EllipticCurves/memory.c \
EllipticCurves/models.c \
main.c \
-lgmp -lflint -o main && ./main

BIN
CRS.git/main Executable file

Binary file not shown.

43
CRS.git/main.c Normal file
View File

@ -0,0 +1,43 @@
#include <stdio.h>
#include <stdlib.h>
#include "EllipticCurves/models.h"
#include "EllipticCurves/memory.h"
#include <gmp.h>
#include <flint/fmpz.h>
#include <flint/fq.h>
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;
}