3#include "isogeny_walks.h"
14 RANDOM_FP2_ELEMENT(&
a);
21 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
28 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
35 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
42 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
49 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
56 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
63 assert_memory_equal(
sizeof(
fp2_t), &b, &c);
71 fp2_t j1, j0, j_invariant;
92 strcpy(file_name,
"TEST-");
94 strcat(file_name,
"-deg2.log");
96 FILE *fptr = fopen(file_name,
"a");
98 printf(
"Could not open file");
102 file_print_bytes(fptr,
"// PATH (Hexadecimal): ", path,
BIT_LENGTH_PATH / 8);
103 fprintf(fptr,
"// j-invariant (from 287496 to j0):\n");
104 fprintf(fptr,
"// Re := 0x");
106 fprintf(fptr,
"%016lX", j0.
re[pos]);
108 fprintf(fptr,
";\n// Im := 0x");
110 fprintf(fptr,
"%016lX", j0.
im[pos]);
112 fprintf(fptr,
";\n");
113 fprintf(fptr,
"// j-invariant (from 287496 to j1):\n");
114 fprintf(fptr,
"// Re := 0x");
116 fprintf(fptr,
"%016lX", j1.
re[pos]);
118 fprintf(fptr,
";\n// Im := 0x");
120 fprintf(fptr,
"%016lX", j1.
im[pos]);
122 fprintf(fptr,
";\n");
123 fprintf(fptr,
"clear;\np := 0x");
125 fprintf(fptr,
"%016lX", FIELD_CHARACTERISTIC[pos]);
128 fprintf(fptr,
";\n");
129 fprintf(fptr,
"fp := GF(p);\n");
130 fprintf(fptr,
"_<x> := PolynomialRing(fp);\n");
131 fprintf(fptr,
"fp2<i>:= ext<fp | x^2 + 1>;\n");
135 fprintf(fptr,
"Re := 0x");
137 fprintf(fptr,
"%016lX", temp.
re[pos]);
139 fprintf(fptr,
";\nIm := 0x");
141 fprintf(fptr,
"%016lX", temp.
im[pos]);
143 fprintf(fptr,
";\n");
144 fprintf(fptr,
"assert(IsZero(Random(EllipticCurveFromjInvariant(fp2![Re, Im])) * (p + 1)) or IsZero(Random(EllipticCurveFromjInvariant(fp2![Re, Im])) * (p - 1)));\n\n");
152 int32_t value_equality, expected_value = 0x00000000;
157 uint8_t bound = 0xF3;
159 value_equality = issmaller((int32_t)bound, (int32_t)(path[
i]));
160 assert_memory_equal(
sizeof(uint8_t), &value_equality, &expected_value);
176 fp2_t xP_squared, A_times_xP, temporal, auxiliar, six;
182 for(
int i = 0;
i < 4;
i++) {
184 fp2_add(&temporal, xP_squared, xP_squared);
185 fp2_add(&temporal, temporal, xP_squared);
188 fp2_add(&auxiliar, A_times_xP, A_times_xP);
189 fp2_add(&auxiliar, auxiliar, auxiliar);
191 fp2_add(&temporal, temporal, auxiliar);
192 fp2_add(&temporal, temporal, six);
193 fp2_mul(&temporal, xP_squared, temporal);
194 fp2_sub(&temporal, temporal, t);
196 assert_memory_equal(
sizeof(
fp2_t), &temporal, &zero);
220 strcpy(file_name,
"TEST-");
222 strcat(file_name,
"-deg3.log");
224 FILE *fptr = fopen(file_name,
"a");
226 printf(
"Could not open file");
230 file_print_bytes(fptr,
"// PATH (Hexadecimal): ", path,
TRITLENGTH_PATH / 5);
231 fprintf(fptr,
"// PATH (TRIT string): ");
233 fprintf(fptr,
"%05X", trit_string[
i]);
235 fprintf(fptr,
"\n// Montgomery Curve Coefficient (A): 6\n");
236 fprintf(fptr,
"// x-coordinate point (xP): First root deterministically chosen\n");
237 fprintf(fptr,
"clear;\np := 0x");
239 fprintf(fptr,
"%016lX", FIELD_CHARACTERISTIC[pos]);
241 fprintf(fptr,
";\n");
242 fprintf(fptr,
"fp := GF(p);\n");
243 fprintf(fptr,
"_<x> := PolynomialRing(fp);\n");
244 fprintf(fptr,
"fp2<i>:= ext<fp | x^2 + 1>;\n");
248 fprintf(fptr,
"Re := 0x");
250 fprintf(fptr,
"%016lX", temp.
re[pos]);
252 fprintf(fptr,
";\nIm := 0x");
254 fprintf(fptr,
"%016lX", temp.
im[pos]);
256 fprintf(fptr,
";\n");
257 fprintf(fptr,
"assert(IsZero(Random(EllipticCurveFromjInvariant(fp2![Re, Im])) * (p + 1)) or IsZero(Random(EllipticCurveFromjInvariant(fp2![Re, Im])) * (p - 1)));\n\n");
264static void print_fp(
const fp_t input,
char* s){
267 printf(
"%s = 0x", s);
269 printf(
"%016lX", aux[
i]);
278 fp_t input = {6, 0, 0, 0};
283 for(
int value = 0; value < 128; value++) {
287 for(
int value = 0; value < 128; value++) {
291 assert_memory_equal(
sizeof(
fp_t), &input, &A);
void fp2_set_to_zero(fp2_t *output)
void fp2_from_mont(fp2_t *output, fp2_t input)
void fp2_to_mont(fp2_t *output, fp2_t input)
void fp2_set_to_one(fp2_t *output)
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 fp2_mul_by_2532192(fp2_t *output, fp2_t input)
void isogeny_walks_2_slow(fp2_t *j0, fp2_t *j1, fp2_t input_prev, fp2_t input, const uint8_t *input_path, size_t input_length)
void fp2_mul_by_1488(fp2_t *output, fp2_t input)
void isogeny_walks_switch_from_model_3(fp2_t *output_j, fp2_t input_a1, fp2_t input_a3)
void isogeny_walks_2(fp2_t *output, fp2_t input_prev, fp2_t input, const uint8_t *input_path, size_t input_length)
void isogeny_walks_sample_trit_string(uint8_t *output)
void fp2_mul_by_645205500(fp2_t *output, fp2_t input)
void isogeny_walks_3_fp(fp_t output_A, const fp_t input_A, int input_length)
void fp2_mul_by_8748000000(fp2_t *output, fp2_t input)
void fp2_mul_by_324000(fp2_t *output, fp2_t input)
void fp2_mul_by_2976(fp2_t *output, fp2_t input)
void fp2_mul_by_162000(fp2_t *output, fp2_t input)
void fp_to_mont(fp_t output, const fp_t input)
void fp_from_mont(fp_t output, const fp_t input)
uint64_t fp_t[FIELD_64BITS_WORDS]
#define FIELD_64BITS_WORDS
MunitTest test_isogeny_walks[]
#define RANDOM_BIT_STRING(out)
#define RANDOM_TRIT_STRING(out)
#define TEST_CASE(test_func)