14 fp2_t a,
a1,
a3, cube_roots_of_unity[3], r, s, t;
17 fp2_copy(&cube_roots_of_unity[1], *((
fp2_t *)&CUBE_ROOT_OF_UNITY));
18 fp2_sqr(&cube_roots_of_unity[2], cube_roots_of_unity[1]);
23 uint32_t trit_string[input_length];
24 to_trit_string(trit_string, input_path, input_length);
26 for (
i = 0;
i < input_length;
i++) {
27 uint32_t mask = 0x0000000F;
28 for (
j = 0;
j < 5;
j++) {
66 fp2_t r, s, xP_squared, A_times_xP;
69 fp2_add(&r, xP_squared, xP_squared);
72 fp2_mul(&A_times_xP, input_A, input_xP);
73 fp2_add(&s, A_times_xP, A_times_xP);
79 fp2_add(output_a3, xP_squared, A_times_xP);
80 fp2_add(output_a3, *output_a3, s);
81 fp2_mul(output_a3, *output_a3, input_xP);
83 fp2_add(output_a3, *output_a3, *output_a3);
89 fp2_t aux, tmp,
num, den, a1_cube, a3_cube;
93 fp2_mul(&a1_cube, a1_cube, input_a1);
94 fp2_mul(&a3_cube, a3_cube, input_a3);
96 fp2_add(&tmp, input_a3, input_a3);
125 fp2_t A_times_one_third, A_squared, r, s, t, u, v, y, s0, i0, s1, s2;
130 fp_add(EIGHT, THREE, THREE);
131 fp_add(THREE, THREE, EIGHT);
132 fp_add(EIGHT, EIGHT, EIGHT);
133 fp_add(EIGHT, EIGHT, EIGHT);
135 fp_mul(A_times_one_third.
re, input_A.
re, ONE_THIRD);
136 fp_mul(A_times_one_third.
im, input_A.
im, ONE_THIRD);
146 fp2_mul(&r, A_squared, input_A);
162 fp2_add(&v, A_squared, A_squared);
205 fp2_sub(&output[3], u, A_times_one_third);
206 fp2_sub(&output[2], t, A_times_one_third);
207 fp2_sub(&output[1], s, A_times_one_third);
208 fp2_sub(&output[0], r, A_times_one_third);
213 uint8_t bound = 0xF3;
217 while (issmaller((int32_t)bound, (int32_t)(output[
i]))) {
void fp2_sqrt_slow(fp2_t *output, fp2_t input)
void fp2_linear_pass_in(fp2_t *output, const fp2_t *input, uint8_t input_length, uint8_t input_index)
void fp2_half(fp2_t *output, fp2_t input)
void fp2_curt(fp2_t *output, fp2_t input)
void fp2_set_to_one(fp2_t *output)
void randombytes(void *x, size_t l)
void fp_neg(fp_t output, const fp_t input)
void fp_set_to_one(fp_t input_output)
uint64_t fp_t[FIELD_64BITS_WORDS]
void isogeny_walks_from_montgomery_model_3(fp2_t *output_a1, fp2_t *output_a3, fp2_t input_A, fp2_t input_xP)
void isogeny_walks_3(fp2_t *output_a1, fp2_t *output_a3, fp2_t input_a1, fp2_t input_a3, const uint8_t *input_path, size_t input_length)
void isogeny_walks_get_points_3(fp2_t *output, fp2_t input_A)
void isogeny_walks_switch_from_model_3(fp2_t *output_j, fp2_t input_a1, fp2_t input_a3)
void isogeny_walks_sample_trit_string(uint8_t *output)