tge.h - sick - sign and check files using ed25519
 (HTM) git clone git://z3bra.org/sick
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tge.h (1683B)
       ---
            1 #ifndef GE_H
            2 #define GE_H
            3 
            4 #include "fe.h"
            5 
            6 
            7 /*
            8 ge means group element.
            9 
           10 Here the group is the set of pairs (x,y) of field elements (see fe.h)
           11 satisfying -x^2 + y^2 = 1 + d x^2y^2
           12 where d = -121665/121666.
           13 
           14 Representations:
           15   ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
           16   ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
           17   ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
           18   ge_precomp (Duif): (y+x,y-x,2dxy)
           19 */
           20 
           21 typedef struct {
           22   fe X;
           23   fe Y;
           24   fe Z;
           25 } ge_p2;
           26 
           27 typedef struct {
           28   fe X;
           29   fe Y;
           30   fe Z;
           31   fe T;
           32 } ge_p3;
           33 
           34 typedef struct {
           35   fe X;
           36   fe Y;
           37   fe Z;
           38   fe T;
           39 } ge_p1p1;
           40 
           41 typedef struct {
           42   fe yplusx;
           43   fe yminusx;
           44   fe xy2d;
           45 } ge_precomp;
           46 
           47 typedef struct {
           48   fe YplusX;
           49   fe YminusX;
           50   fe Z;
           51   fe T2d;
           52 } ge_cached;
           53 
           54 void ge_p3_tobytes(unsigned char *s, const ge_p3 *h);
           55 void ge_tobytes(unsigned char *s, const ge_p2 *h);
           56 int ge_frombytes_negate_vartime(ge_p3 *h, const unsigned char *s);
           57 
           58 void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q);
           59 void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q);
           60 void ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b);
           61 void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q);
           62 void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q);
           63 void ge_scalarmult_base(ge_p3 *h, const unsigned char *a);
           64 
           65 void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p);
           66 void ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p);
           67 void ge_p2_0(ge_p2 *h);
           68 void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p);
           69 void ge_p3_0(ge_p3 *h);
           70 void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p);
           71 void ge_p3_to_cached(ge_cached *r, const ge_p3 *p);
           72 void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p);
           73 
           74 #endif