diff --git a/elliptic.h b/elliptic.h index 7b72537..62fd3d6 100644 --- a/elliptic.h +++ b/elliptic.h @@ -1,10 +1,13 @@ #include #include #include +#include + +#define lint long long //define structure of element in finite fields typedef struct fpoint{ - int x,y; + lint x,y; }FPOINT; @@ -22,55 +25,56 @@ typedef struct point{ FPOINT * ZERO, * ONE;//zero element in field POINT * O;//infinte point -FPOINT * newfpoint(int x, int y); +FPOINT * newfpoint(lint x, lint y); -POINT * newpoint(int a, int b, int c, int d); +POINT * newpoint(lint a, lint b, lint c, lint d); CURVE * newcurve(FPOINT * A, FPOINT * B); void freepoint(POINT * a); -int ABS(int a, int p); +lint ABS(lint a, lint p); -int gcdEx(int a, int b, int *x, int *y); +lint gcdEx(lint a, lint b, lint *x, lint *y); -int inver(int a, int p); +lint inver(lint a, lint p); bool equl(FPOINT * a, FPOINT * b); -bool equln(FPOINT * a, FPOINT * b, int p); +bool equln(FPOINT * a, FPOINT * b, lint p); bool pequl(POINT * a, POINT * b); -FPOINT * fneg(FPOINT * a, int p, FPOINT * result); +FPOINT * fneg(FPOINT * a, lint p, FPOINT * result); -FPOINT * fadd(FPOINT * a, FPOINT * b, int p, FPOINT * result); +FPOINT * fadd(FPOINT * a, FPOINT * b, lint p, FPOINT * result); -FPOINT * fminus(FPOINT * a, FPOINT * b, int p, FPOINT * result); +FPOINT * fminus(FPOINT * a, FPOINT * b, lint p, FPOINT * result); -FPOINT * fmulti(FPOINT * a, FPOINT * b, int p, FPOINT * result); +FPOINT * fmulti(FPOINT * a, FPOINT * b, lint p, FPOINT * result); FPOINT * assign(FPOINT * a, FPOINT * b); -FPOINT * fpower(FPOINT * a, int n, int p, FPOINT * result); +FPOINT * fpower(FPOINT * a, lint n, lint p, FPOINT * result); -FPOINT * inverse(FPOINT * a, int p, FPOINT * result); +FPOINT * inverse(FPOINT * a, lint p, FPOINT * result); -FPOINT * fnmulti(FPOINT * a, int b, int p, FPOINT * result); +FPOINT * fnmulti(FPOINT * a, lint b, lint p, FPOINT * result); POINT * passign(POINT * a, POINT * b); -bool testpoint(POINT * p, CURVE * c, int p1); +bool testpoint(POINT * p, CURVE * c, lint p1); void showpoint(POINT * p); -POINT * pneg(POINT * a, int p, POINT * result); +POINT * pneg(POINT * a, lint p, POINT * result); -POINT * add(POINT * p1, POINT * p2, CURVE * c, int p, POINT * result); +POINT * add(POINT * p1, POINT * p2, CURVE * c, lint p, POINT * result); -POINT * minus(POINT * p1, POINT * p2, CURVE * c, int p, POINT * result); - -POINT * ppower(POINT * a, int n, CURVE * c, int p, POINT * result); +POINT * minus(POINT * p1, POINT * p2, CURVE * c, lint p, POINT * result); +POINT * ppower(POINT * a, lint n, CURVE * c, lint p, POINT * result); + +bool millerrabin(lint n, lint r);