30 lines
843 B
C
30 lines
843 B
C
|
|
#ifndef FP2_H
|
||
|
|
#define FP2_H
|
||
|
|
|
||
|
|
#include "fp.h"
|
||
|
|
|
||
|
|
// Structure for representing elements in GF(p^2)
|
||
|
|
typedef struct fp2_t {
|
||
|
|
fp_t re, im;
|
||
|
|
} fp2_t;
|
||
|
|
|
||
|
|
void fp2_set(fp2_t* x, const digit_t val);
|
||
|
|
bool fp2_is_zero(const fp2_t* a);
|
||
|
|
bool fp2_is_equal(const fp2_t* a, const fp2_t* b);
|
||
|
|
void fp2_copy(fp2_t* x, const fp2_t* y);
|
||
|
|
fp2_t fp2_non_residue();
|
||
|
|
void fp2_add(fp2_t* x, const fp2_t* y, const fp2_t* z);
|
||
|
|
void fp2_sub(fp2_t* x, const fp2_t* y, const fp2_t* z);
|
||
|
|
void fp2_neg(fp2_t* x, const fp2_t* y);
|
||
|
|
void fp2_mul(fp2_t* x, const fp2_t* y, const fp2_t* z);
|
||
|
|
void fp2_sqr(fp2_t* x, const fp2_t* y);
|
||
|
|
void fp2_inv(fp2_t* x);
|
||
|
|
bool fp2_is_square(const fp2_t* x);
|
||
|
|
void fp2_frob(fp2_t* x, const fp2_t* y);
|
||
|
|
void fp2_sqrt(fp2_t* x);
|
||
|
|
void fp2_tomont(fp2_t* x, const fp2_t* y);
|
||
|
|
void fp2_frommont(fp2_t* x, const fp2_t* y);
|
||
|
|
int fp2_cmp(fp2_t* x, fp2_t* y);
|
||
|
|
|
||
|
|
#endif
|