22 fp_t z0, z1, z2, z3, tmp;
28 fp_sub(output->re, z2, z3);
29 fp_sub(output->im, tmp, z2);
30 fp_sub(output->im, output->im, z3);
38 fp_mul(output->re, z1, z2);
71 temp = input & (input_a->
re[
i] ^ input_b->
re[
i]);
72 input_a->
re[
i] = temp ^ input_a->
re[
i];
73 input_b->
re[
i] = temp ^ input_b->
re[
i];
74 temp = input & (input_a->
im[
i] ^ input_b->
im[
i]);
75 input_a->
im[
i] = temp ^ input_a->
im[
i];
76 input_b->
im[
i] = temp ^ input_b->
im[
i];
87 temp = input_mask & (output->re[
i] ^ input.
re[
i]);
88 output->re[
i] = temp ^ output->re[
i];
89 temp = input_mask & (output->im[
i] ^ input.
im[
i]);
90 output->im[
i] = temp ^ output->im[
i];
96 fp_t N0, N1, S1, S2, zero = {0};
103 fp_mul(output->im, S1, S2);
163 for(
i = 0;
i < input_length;
i++) {
164 int64_t mask = (int64_t)input_index - (int64_t)
i;
165 fp2_cset(output, input[
i], ~((mask >> 63) | (-mask >> 63)));
174 for(
i = 0;
i < input_length;
i++) {
175 int64_t mask = (int64_t)input_index - (int64_t)
i;
176 fp2_cset(&output[
i], input, ~((mask >> 63) | (-mask >> 63)));
185 for(
i = 0;
i < input_length;
i++) {
188 return (uint8_t)index;
204 fp2_t tmp_list[input_length], inv, tmp;
206 fp2_copy(&tmp_list[0], input_list[0]);
207 for(
i = 1;
i < input_length;
i++) {
fp2_mul(&tmp_list[
i], tmp_list[
i - 1], input_list[
i]); }
208 fp2_inv(&inv, tmp_list[input_length - 1]);
209 for(
i = (input_length - 1);
i > 0;
i--) {
210 fp2_mul(&tmp, inv, tmp_list[
i - 1]);
217#ifndef SSEC_KONG_ET_AL_S_ALGORITHM
222 fp2_t input_1, alpha, ALPHA, alpha_conjugated, input_0, minus_one, x0, temp, choose_from[3];
226 fp2_neg(&minus_one, minus_one);
236 for (
j = 0;
j < 64;
j++, k++) {
237 if ((flag & SQUARE_ROOT_EXPONENT_34[
i]) != 0) {
fp2_mul(&input_1, temp, input_1);}
247 fp2_mul(&input_0, alpha_conjugated, alpha);
258 fp2_sub(&ALPHA, alpha, minus_one);
265 for (
j = 0;
j < 64;
j++, k++) {
266 if ((flag & SQUARE_ROOT_EXPONENT_12[
i]) != 0) {
fp2_mul(&choose_from[0], temp, choose_from[0]);}
271 fp2_mul(&choose_from[0], choose_from[0], x0);
290 fp2_t a_double, b, b_square, c, r, temp, s[2], u;
295 fp2_add(&a_double, input, input);
300 for (
j = 0;
j < 64;
j++, k++) {
301 if ((flag & SQUARE_ROOT_EXPONENT_916[
i]) != 0) {
fp2_mul(&b, temp, b);}
307 fp2_mul(&c, a_double, b_square);
334 fp_t delta, x0, t0, x1, t1, temp;
347 for (
int j = 0;
j < 64;
j++) {
348 if ((flag & SQUARE_ROOT_EXPONENT_14[
i]) != 0)
349 fp_mul(delta, temp, delta);
365 for (
int j = 0;
j < 64;
j++) {
366 if ((flag & SQUARE_ROOT_EXPONENT_34[
i]) != 0)
409 for (
j = 0;
j < 64;
j++, k++) {
410 if ((flag & CUBE_ROOT_EXPONENT[
i]) != 0) {
fp2_mul(&aux, temp, aux);}
void fp2_to_bytes(uint8_t *output, fp2_t input)
void fp2_sqrt_slow(fp2_t *output, fp2_t input)
uint8_t fp2_is_equal(fp2_t input_a, fp2_t input_b)
void fp2_linear_pass_out(fp2_t *output, fp2_t input, uint8_t input_length, uint8_t input_index)
void fp2_conj(fp2_t *output, fp2_t input)
void fp2_batchinv(fp2_t *output_list, const fp2_t *input_list, uint8_t input_length)
void fp2_linear_pass_in(fp2_t *output, const fp2_t *input, uint8_t input_length, uint8_t input_index)
void fp2_set_to_zero(fp2_t *output)
void fp2_cset(fp2_t *output, fp2_t input, uint64_t input_mask)
int64_t fp2_is_zero(fp2_t input)
void fp2_sqrt_fast(fp2_t *output, fp2_t input)
void fp2_half(fp2_t *output, fp2_t input)
void fp2_from_mont(fp2_t *output, fp2_t input)
void fp2_to_mont(fp2_t *output, fp2_t input)
void fp2_curt(fp2_t *output, fp2_t input)
uint8_t fp2_is_square(fp2_t input)
uint8_t fp2_locate_zero(const fp2_t *input, uint8_t input_length)
void fp2_cswap(fp2_t *input_a, fp2_t *input_b, uint64_t input)
void fp2_element_from_bytes(fp2_t *output, const uint8_t *input)
void fp2_set_to_one(fp2_t *output)
int64_t fp_is_zero(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_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)
uint8_t fp_is_square(const fp_t input)
uint64_t fp_t[FIELD_64BITS_WORDS]
#define FIELD_64BITS_WORDS
#define CUBE_ROOT_EXPONENT_BITS
#define SQUARE_ROOT_EXPONENT_BITS
void constant_time_conditional_mov(uint8_t *output, const uint8_t *input, uint64_t input_length, uint8_t input_selector)