15 #ifndef __P25519_F_FIELD_H__ 16 #define __P25519_F_FIELD_H__ 1 18 #include "constant_time.h" 24 #define __DECAF_25519_GF_DEFINED__ 1 25 #define NLIMBS (40/sizeof(word_t)) 29 } __attribute__((aligned(32)))
gf_25519_s, gf_25519_t[1];
31 #define GF_LIT_LIMB_BITS 51 33 #define ZERO gf_25519_ZERO 34 #define ONE gf_25519_ONE 35 #define MODULUS gf_25519_MODULUS 37 #define gf_s gf_25519_s 38 #define gf_eq gf_25519_eq 39 #define gf_lobit gf_25519_lobit 40 #define gf_copy gf_25519_copy 41 #define gf_add gf_25519_add 42 #define gf_sub gf_25519_sub 43 #define gf_add_RAW gf_25519_add_RAW 44 #define gf_sub_RAW gf_25519_sub_RAW 45 #define gf_bias gf_25519_bias 46 #define gf_weak_reduce gf_25519_weak_reduce 47 #define gf_strong_reduce gf_25519_strong_reduce 48 #define gf_mul gf_25519_mul 49 #define gf_sqr gf_25519_sqr 50 #define gf_mulw_unsigned gf_25519_mulw_unsigned 51 #define gf_isr gf_25519_isr 52 #define gf_serialize gf_25519_serialize 53 #define gf_deserialize gf_25519_deserialize 56 #define X_PUBLIC_BYTES SER_BYTES 57 #define X_PRIVATE_BYTES X_PUBLIC_BYTES 58 #define X_PRIVATE_BITS 255 60 #define SQRT_MINUS_ONE P25519_SQRT_MINUS_ONE 62 #define INLINE_UNUSED __inline__ __attribute__((unused,always_inline)) 69 static INLINE_UNUSED
void gf_copy (gf out,
const gf a) { *out = *a; }
70 static INLINE_UNUSED
void gf_add_RAW (gf out,
const gf a,
const gf b);
71 static INLINE_UNUSED
void gf_sub_RAW (gf out,
const gf a,
const gf b);
72 static INLINE_UNUSED
void gf_bias (gf inout,
int amount);
73 static INLINE_UNUSED
void gf_weak_reduce (gf inout);
76 void gf_add (gf out,
const gf a,
const gf b);
77 void gf_sub (gf out,
const gf a,
const gf b);
78 void gf_mul (gf_s *__restrict__ out,
const gf a,
const gf b);
79 void gf_mulw_unsigned (gf_s *__restrict__ out,
const gf a, uint32_t b);
80 void gf_sqr (gf_s *__restrict__ out,
const gf a);
81 mask_t gf_isr(gf a,
const gf x);
82 mask_t
gf_eq (
const gf x,
const gf y);
85 void gf_serialize (uint8_t serial[SER_BYTES],
const gf x);
86 mask_t
gf_deserialize (gf x,
const uint8_t serial[SER_BYTES],uint8_t hi_nmask);
97 extern const gf SQRT_MINUS_ONE;
101 #define LIMBPERM(i) (i) 103 #define LIMB_MASK(i) (((1ull)<<LIMB_PLACE_VALUE(i))-1) 105 static const gf ZERO = {{{0}}}, ONE = {{{ [LIMBPERM(0)] = 1 }}};
mask_t gf_lobit(const gf x)
Return high bit of x = low bit of 2x mod p.
Definition: f_generic.c:47
mask_t gf_deserialize(gf x, const uint8_t serial[SER_BYTES], uint8_t hi_nmask)
Deserialize from wire format; return -1 on success and 0 on failure.
Definition: f_generic.c:55
void gf_add(gf out, const gf a, const gf b)
Add two field elements d = a+b.
Definition: f_generic.c:117
void gf_strong_reduce(gf inout)
Reduce to canonical form.
Definition: f_generic.c:76
void gf_serialize(uint8_t serial[SER_BYTES], const gf x)
Serialize to wire format.
Definition: f_generic.c:27
mask_t gf_eq(const gf x, const gf y)
a^2 x = 1, QNR, or 0 if x=0.
Definition: f_generic.c:123
void gf_sub(gf out, const gf a, const gf b)
Subtract two gf elements d=a-b.
Definition: f_generic.c:110