38 líneas
895 B
C
38 líneas
895 B
C
|
#ifndef FP_H
|
||
|
#define FP_H
|
||
|
|
||
|
#include "u512.h"
|
||
|
|
||
|
/* fp is in the Montgomery domain, so interpreting that
|
||
|
as an integer should never make sense.
|
||
|
enable compiler warnings when mixing up u512 and fp. */
|
||
|
typedef struct fp {
|
||
|
u512 x;
|
||
|
} fp;
|
||
|
|
||
|
extern const fp fp_0;
|
||
|
extern const fp fp_1;
|
||
|
|
||
|
void fp_set(fp *x, uint64_t y);
|
||
|
void fp_cswap(fp *x, fp *y, bool c);
|
||
|
|
||
|
void fp_enc(fp *x, u512 const *y); /* encode to Montgomery representation */
|
||
|
void fp_dec(u512 *x, fp const *y); /* decode from Montgomery representation */
|
||
|
|
||
|
void fp_add2(fp *x, fp const *y);
|
||
|
void fp_sub2(fp *x, fp const *y);
|
||
|
void fp_mul2(fp *x, fp const *y);
|
||
|
|
||
|
void fp_add3(fp *x, fp const *y, fp const *z);
|
||
|
void fp_sub3(fp *x, fp const *y, fp const *z);
|
||
|
void fp_mul3(fp *x, fp const *y, fp const *z);
|
||
|
|
||
|
void fp_sq1(fp *x);
|
||
|
void fp_sq2(fp *x, fp const *y);
|
||
|
void fp_inv(fp *x);
|
||
|
bool fp_issquare(fp const *x);
|
||
|
|
||
|
void fp_random(fp *x);
|
||
|
|
||
|
#endif
|