11 fp_sub(output, zero, input);
15 fp_copy(input_output, MONTGOMERY_CONSTANT_ONE);
20 memset(input_output, 0,
sizeof(
fp_t));
25 memcpy(output, input,
sizeof(
fp_t));
34 temp = input_mask & (output[
i] ^ input[
i]);
35 output[
i] = temp ^ output[
i];
45 temp = input & (input_a[
i] ^ input_b[
i]);
46 input_a[
i] = temp ^ input_a[
i];
47 input_b[
i] = temp ^ input_b[
i];
73 for (
j = 0;
j < 64;
j++, k++) {
74 if ((flag & FIELD_INVERSION_EXPONENT[
i]) != 0)
89 mask = 0 - (uint64_t) (input[0] & 1);
100 fp_mul(output, input, (uint64_t *) &MONTGOMERY_CONSTANT_R_SQUARED);
107 fp_mul(output, input, one);
118 return ~(((int64_t)output >> 63) | (-(int64_t)output >> 63));
129 uint8_t *ta = (uint8_t *) &input_a[
i];
130 uint8_t *tb = (uint8_t *) &input_b[
i];
131 t = (ta[0] ^ tb[0]) | (ta[1] ^ tb[1]) | (ta[2] ^ tb[2]) | (ta[3] ^ tb[3]) |
132 (ta[4] ^ tb[4]) | (ta[5] ^ tb[5]) | (ta[6] ^ tb[6]) | (ta[7] ^ tb[7]);
139 return (uint8_t) (1 - r);
157 for (
j = 0;
j < 64;
j++) {
158 if ((flag & SQUARE_ROOT_EXPONENT_12[
i]) != 0)
159 fp_mul(input_1, temp, input_1);
165 return fp_is_equal(input_1, MONTGOMERY_CONSTANT_ONE);
177 for (
j = 0;
j < 64;
j++) {
178 if ((flag & SQUARE_ROOT_EXPONENT_34[
i]) != 0)
179 fp_mul(input_1, temp, input_1);
184 fp_mul(output, input_1, input);
187#ifdef SSEC_CUBE_ROOT_OVER_FP
198 for (
j = 0;
j < 64;
j++) {
199 if ((flag & CUBE_ROOT_EXPONENT_213[
i]) != 0)
200 fp_mul(input_1, temp, input_1);
void randombytes(void *x, size_t l)
int64_t fp_is_zero(const fp_t input)
void fp_sample(fp_t output)
void fp_curt(fp_t output, const fp_t input)
void fp_to_mont(fp_t output, const fp_t input)
void fp_neg(fp_t output, const fp_t input)
uint8_t fp_is_equal(const fp_t input_a, const fp_t input_b)
void fp_set_to_zero(fp_t input_output)
void fp_cset(fp_t output, const fp_t input, uint64_t input_mask)
void fp_half(fp_t output, const fp_t input)
void fp_from_mont(fp_t output, const fp_t input)
void fp_set_to_one(fp_t input_output)
void fp_sqrt(fp_t output, const fp_t input)
uint8_t fp_is_smaller(const fp_t input1, const fp_t input2)
uint8_t fp_is_square(const fp_t input)
uint64_t fp_t[FIELD_64BITS_WORDS]
#define FIELD_64BITS_WORDS
#define MASK_FIELD_ELEMENT
void multiprecision_shift_to_right(uint64_t *input_a_output_shifted_a, uint64_t input_words_length)
uint8_t multiprecision_is_smaller(const uint64_t *input_a, const uint64_t *input_b, uint64_t input_length)
#define addition_with_carry_u64(output, output_carry, input_carry, input_a, input_b)