4#include <secsidh/secsidh.h>
17#if GLOBAL_COUNTERS != 0
18#define cprintf(...) printf(__VA_ARGS__)
23#define CPASTER(x, y) SECSIDH_CTIDH##x##_##y
24#define CEVALUATOR(x, y) CPASTER(x, y)
25#define CONSTNAMESPACE(name) CEVALUATOR(BITS, name)
26#define SK_SIZE CONSTNAMESPACE(SK_SIZE)
27#define PK_SIZE CONSTNAMESPACE(PK_SIZE)
28#define SS_SIZE CONSTNAMESPACE(SS_SIZE)
30#define pk_size FNAMESPACE(pk_size)
31#define sk_size FNAMESPACE(sk_size)
32#define ss_size FNAMESPACE(ss_size)
34#define FPASTER(x, y) secsidh_CTIDH##x##_##y
35#define FEVALUATOR(x, y) FPASTER(x, y)
36#define FNAMESPACE(name) FEVALUATOR(BITS, name)
38#define keygen FNAMESPACE(keygen)
39#define derive FNAMESPACE(derive)
41static void ss_print(
const uint8_t *ss,
char *c,
size_t size)
43 printf(
"%s := 0x", c);
45 for (
i = size - 1;
i > -1;
i--)
46 printf(
"%02" PRIX8
"", ss[
i]);
50static int dumb_fp_isequal(
const uint8_t *
a,
const uint8_t *b,
size_t size)
52 return memcmp(
a, b, size) == 0;
55static int run_benchmark_action(int64_t target, int64_t KEYS);
56static int run_benchmark_keygen(int64_t target, int64_t KEYS);
57static int run_benchmark_fp(
long long target);
59int main(
int argc,
char *argv[])
61#if !defined(_M1_) && !defined(_M2_) && !defined(_M3_) && !defined(_M4_) && !defined(_M5_)
62 printf(
"\nNOT using radical 3-isogenies (original dCTIDH).\n\n");
64 printf(
"\nUsing 2^%ld radical 3-isogenies.\n\n",
batch_start[0] - 1);
68 if (strcmp(argv[1],
"-bact") == 0)
70 run_benchmark_action(atoi(argv[2]), 10);
72 else if (strcmp(argv[1],
"-bkey") == 0)
74 run_benchmark_keygen(atoi(argv[2]), 10);
76 else if (strcmp(argv[1],
"-bkey") == 0)
78 run_benchmark_fp(atoi(argv[2]));
82 printf(
"usage: \t%s\t\t\t\t// for a quick test\n\t%s -bact [number of runs]\t//run benchmark for the action\n\t%s -bfp [number of runs]\t//run benchmark for fp_mul", argv[0], argv[0], argv[0]);
89 if (strcmp(argv[1],
"-fp2test") == 0)
91 printf(
"Starting fp^2 test ...\n");
94 printf(
"All tests passed!\n");
99 printf(
"usage: \t%s\t\t\t\t// for a quick test\n\t%s -bact [number of runs]\t//run benchmark for the action\n\t%s -bfp [number of runs]\t//run benchmark for fp_mul", argv[0], argv[0], argv[0]);
113 printf(
"\033[0;33m// --------------\033[0m\n");
114 printf(
"\033[0;33m// Key generation\033[0m\n");
116 printf(
"sizeof private key = %lu \n",
sizeof(
private_key));
117 printf(
"sizeof public key = %lu \n",
sizeof(
public_key));
121 printf(
"\n\033[0;35m// Alice\033[0m\n");
129 cprintf(
"Running-time (millions): %2.03lfM + %2.03lfS + %2.03lfa = \033[1;35m%2.03lfM\033[0m\n", (1.0 * fpmul) / 1000000.0, (1.0 * fpsqr) / 1000000.0, (1.0 * fpadd) / 1000000.0, (1.0 * (fpmul + fpsqr)) / 1000000.0);
130 printf(
"Clock cycles (millions): \033[1;35m%7.03lf\033[0m\n", (1.0 * (cc1 - cc0)) / 1000000.0);
133 printf(
"\n\033[0;34m// Bob\033[0m\n");
140 cprintf(
"Running-time (millions): %2.03lfM + %2.03lfS + %2.03lfa = \033[1;34m%2.03lfM\033[0m\n", (1.0 * fpmul) / 1000000.0, (1.0 * fpsqr) / 1000000.0, (1.0 * fpadd) / 1000000.0, (1.0 * (fpmul + fpsqr)) / 1000000.0);
141 printf(
"Clock cycles (millions): \033[1;34m%7.03lf\033[0m\n", (1.0 * (cc1 - cc0)) / 1000000.0);
146 printf(
"\n\033[0;33m// -------------------------\033[0m\n");
147 printf(
"\033[0;33m// Secret sharing generation\033[0m\n");
151 printf(
"\n\033[0;35m// Alice\033[0m\n");
155 ss_print(ss_a,
"ss_a",
SS_SIZE);
156 cprintf(
"Running-time (millions) [without validation]: %2.03lfM + %2.03lfS + %2.03lfa = \033[1;35m%2.03lfM\033[0m\n",
157 (1.0 * fpmul) / 1000000.0, (1.0 * fpsqr) / 1000000.0, (1.0 * fpadd) / 1000000.0, (1.0 * (fpmul + fpsqr)) / 1000000.0);
158 printf(
"Clock cycles (millions) [including validation]: \033[1;35m%7.03lf\033[0m\n", (1.0 * (cc1 - cc0)) / 1000000.0);
163 printf(
"\n\033[0;34m// Bob\033[0m\n");
167 ss_print(ss_b,
"ss_b",
SS_SIZE);
168 cprintf(
"Running-time (millions) [without validation]: %2.03lfM + %2.03lfS + %2.03lfa = \033[1;34m%ld\033[0m\n",
169 (1.0 * fpmul) / 1000000.0, (1.0 * fpsqr) / 1000000.0, (1.0 * fpadd) / 1000000.0, (fpmul + fpsqr));
170 printf(
"Clock cycles (millions) [including validation]: \033[1;34m%7.03lf\033[0m\n", (1.0 * (cc1 - cc0)) / 1000000.0);
177 printf(
"\n\033[0;32m// Successfully secret sharing computation!\033[0m\n");
181static int run_benchmark_action(int64_t target, int64_t KEYS)
184 for (
long long loop = 0; loop !=
target; ++loop)
199 for (
long long key = 0; key < KEYS; ++key)
201 fpmul = fpsqr = fpadd = 0;
202 long long cycles = getticks();
204 cycles = getticks() - cycles;
205 printf(
"%lld %lld validate \t\t mulsq %7ld sq %7ld addsub %7ld cycles %12lld\n", loop, key, fpmul, fpsqr, fpadd, cycles);
208 fpmul = fpsqr = fpadd = 0;
211 cycles = getticks() - cycles;
212 printf(
"%lld %lld action \t\t mulsq %7ld sq %7ld addsub %7ld cycles %12lld\n", loop, key, fpmul, fpsqr, fpadd, cycles);
229static int run_benchmark_keygen(int64_t target, int64_t KEYS)
232 for (
long long loop = 0; loop !=
target; ++loop)
247 for (
long long key = 0; key < KEYS; ++key)
249 fpmul = fpsqr = fpadd = 0;
250 long long cycles = getticks();
252 cycles = getticks() - cycles;
253 printf(
"%lld %lld validate \t\t mulsq %7ld sq %7ld addsub %7ld cycles %12lld\n", loop, key, fpmul, fpsqr, fpadd, cycles);
256 fpmul = fpsqr = fpadd = 0;
260 cycles = getticks() - cycles;
261 printf(
"%lld %lld action \t\t mulsq %7ld sq %7ld addsub %7ld cycles %12lld\n", loop, key, fpmul, fpsqr, fpadd, cycles);
278static int run_benchmark_fp(
long long target)
281 for (
long long loop = 0; loop !=
target; ++loop)
283 fpmul = fpsqr = fpadd = 0;
288 long long cycles = getticks();
291 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
292 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
293 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
294 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
295 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
296 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
297 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
298 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
299 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
300 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
302 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
303 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
304 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
305 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
306 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
307 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
308 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
309 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
310 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
311 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
313 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
314 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
315 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
316 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
317 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
318 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
319 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
320 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
321 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
322 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
324 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
325 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
326 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
327 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
328 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
329 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
330 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
331 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
332 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
333 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
335 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
336 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
337 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
338 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
339 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
340 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
341 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
342 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
343 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
344 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
346 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
347 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
348 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
349 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
350 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
351 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
352 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
353 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
354 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
355 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
357 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
358 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
359 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
360 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
361 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
362 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
363 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
364 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
365 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
366 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
368 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
369 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
370 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
371 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
372 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
373 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
374 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
375 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
376 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
377 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
379 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
380 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
381 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
382 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
383 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
384 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
385 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
386 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
387 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
388 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
390 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
391 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&
a);
392 fp_mul3(&c, (
const fp *)&b, (
const fp *)&c);
393 fp_mul3(&b, (
const fp *)&
a, (
const fp *)&c);
394 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
395 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
396 fp_mul3(&c, (
const fp *)&
a, (
const fp *)&
a);
397 fp_mul3(&
a, (
const fp *)&b, (
const fp *)&c);
398 fp_mul3(&c, (
const fp *)&b, (
const fp *)&
a);
399 fp_mul3(&b, (
const fp *)&c, (
const fp *)&b);
401 cycles = getticks() - cycles;
408 printf(
"mul = %lld\n", total / (target * 100));
413 for (
long long loop = 0; loop !=
target; ++loop)
415 fpmul = fpsqr = fpadd = 0;
421 long long cycles = getticks();
423 fp_sq2(&c, (
const fp *)&b);
424 fp_sq2(&b, (
const fp *)&
a);
425 fp_sq2(&c, (
const fp *)&b);
426 fp_sq2(&b, (
const fp *)&
a);
427 fp_sq2(&c, (
const fp *)&b);
428 fp_sq2(&
a, (
const fp *)&b);
429 fp_sq2(&c, (
const fp *)&
a);
430 fp_sq2(&
a, (
const fp *)&b);
431 fp_sq2(&c, (
const fp *)&b);
432 fp_sq2(&b, (
const fp *)&c);
434 fp_sq2(&c, (
const fp *)&b);
435 fp_sq2(&b, (
const fp *)&
a);
436 fp_sq2(&c, (
const fp *)&b);
437 fp_sq2(&b, (
const fp *)&
a);
438 fp_sq2(&c, (
const fp *)&b);
439 fp_sq2(&
a, (
const fp *)&b);
440 fp_sq2(&c, (
const fp *)&
a);
441 fp_sq2(&
a, (
const fp *)&b);
442 fp_sq2(&c, (
const fp *)&b);
443 fp_sq2(&b, (
const fp *)&c);
445 fp_sq2(&c, (
const fp *)&b);
446 fp_sq2(&b, (
const fp *)&
a);
447 fp_sq2(&c, (
const fp *)&b);
448 fp_sq2(&b, (
const fp *)&
a);
449 fp_sq2(&c, (
const fp *)&b);
450 fp_sq2(&
a, (
const fp *)&b);
451 fp_sq2(&c, (
const fp *)&
a);
452 fp_sq2(&
a, (
const fp *)&b);
453 fp_sq2(&c, (
const fp *)&b);
454 fp_sq2(&b, (
const fp *)&c);
456 fp_sq2(&c, (
const fp *)&b);
457 fp_sq2(&b, (
const fp *)&
a);
458 fp_sq2(&c, (
const fp *)&b);
459 fp_sq2(&b, (
const fp *)&
a);
460 fp_sq2(&c, (
const fp *)&b);
461 fp_sq2(&
a, (
const fp *)&b);
462 fp_sq2(&c, (
const fp *)&
a);
463 fp_sq2(&
a, (
const fp *)&b);
464 fp_sq2(&c, (
const fp *)&b);
465 fp_sq2(&b, (
const fp *)&c);
467 fp_sq2(&c, (
const fp *)&b);
468 fp_sq2(&b, (
const fp *)&
a);
469 fp_sq2(&c, (
const fp *)&b);
470 fp_sq2(&b, (
const fp *)&
a);
471 fp_sq2(&c, (
const fp *)&b);
472 fp_sq2(&
a, (
const fp *)&b);
473 fp_sq2(&c, (
const fp *)&
a);
474 fp_sq2(&
a, (
const fp *)&b);
475 fp_sq2(&c, (
const fp *)&b);
476 fp_sq2(&b, (
const fp *)&c);
478 fp_sq2(&c, (
const fp *)&b);
479 fp_sq2(&b, (
const fp *)&
a);
480 fp_sq2(&c, (
const fp *)&b);
481 fp_sq2(&b, (
const fp *)&
a);
482 fp_sq2(&c, (
const fp *)&b);
483 fp_sq2(&
a, (
const fp *)&b);
484 fp_sq2(&c, (
const fp *)&
a);
485 fp_sq2(&
a, (
const fp *)&b);
486 fp_sq2(&c, (
const fp *)&b);
487 fp_sq2(&b, (
const fp *)&c);
489 fp_sq2(&c, (
const fp *)&b);
490 fp_sq2(&b, (
const fp *)&
a);
491 fp_sq2(&c, (
const fp *)&b);
492 fp_sq2(&b, (
const fp *)&
a);
493 fp_sq2(&c, (
const fp *)&b);
494 fp_sq2(&
a, (
const fp *)&b);
495 fp_sq2(&c, (
const fp *)&
a);
496 fp_sq2(&
a, (
const fp *)&b);
497 fp_sq2(&c, (
const fp *)&b);
498 fp_sq2(&b, (
const fp *)&c);
500 fp_sq2(&c, (
const fp *)&b);
501 fp_sq2(&b, (
const fp *)&
a);
502 fp_sq2(&c, (
const fp *)&b);
503 fp_sq2(&b, (
const fp *)&
a);
504 fp_sq2(&c, (
const fp *)&b);
505 fp_sq2(&
a, (
const fp *)&b);
506 fp_sq2(&c, (
const fp *)&
a);
507 fp_sq2(&
a, (
const fp *)&b);
508 fp_sq2(&c, (
const fp *)&b);
509 fp_sq2(&b, (
const fp *)&c);
511 fp_sq2(&c, (
const fp *)&b);
512 fp_sq2(&b, (
const fp *)&
a);
513 fp_sq2(&c, (
const fp *)&b);
514 fp_sq2(&b, (
const fp *)&
a);
515 fp_sq2(&c, (
const fp *)&b);
516 fp_sq2(&
a, (
const fp *)&b);
517 fp_sq2(&c, (
const fp *)&
a);
518 fp_sq2(&
a, (
const fp *)&b);
519 fp_sq2(&c, (
const fp *)&b);
520 fp_sq2(&b, (
const fp *)&c);
522 fp_sq2(&c, (
const fp *)&b);
523 fp_sq2(&b, (
const fp *)&
a);
524 fp_sq2(&c, (
const fp *)&b);
525 fp_sq2(&b, (
const fp *)&
a);
526 fp_sq2(&c, (
const fp *)&b);
527 fp_sq2(&
a, (
const fp *)&b);
528 fp_sq2(&c, (
const fp *)&
a);
529 fp_sq2(&
a, (
const fp *)&b);
530 fp_sq2(&c, (
const fp *)&b);
531 fp_sq2(&b, (
const fp *)&c);
533 cycles = getticks() - cycles;
540 printf(
"sqr = %lld\n", total / (target * 100));
545 for (
long long loop = 0; loop !=
target; ++loop)
547 fpmul = fpsqr = fpadd = 0;
552 long long cycles = getticks();
555 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
556 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
557 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
558 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
559 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
560 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
561 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
562 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
563 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
564 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
566 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
567 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
568 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
569 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
570 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
571 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
572 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
573 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
574 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
575 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
577 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
578 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
579 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
580 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
581 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
582 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
583 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
584 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
585 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
586 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
588 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
589 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
590 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
591 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
592 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
593 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
594 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
595 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
596 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
597 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
599 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
600 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
601 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
602 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
603 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
604 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
605 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
606 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
607 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
608 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
610 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
611 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
612 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
613 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
614 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
615 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
616 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
617 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
618 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
619 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
621 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
622 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
623 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
624 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
625 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
626 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
627 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
628 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
629 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
630 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
632 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
633 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
634 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
635 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
636 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
637 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
638 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
639 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
640 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
641 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
643 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
644 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
645 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
646 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
647 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
648 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
649 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
650 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
651 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
652 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
654 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
655 fp_add3(&b, (
const fp *)&
a, (
const fp *)&
a);
656 fp_add3(&c, (
const fp *)&b, (
const fp *)&c);
657 fp_add3(&b, (
const fp *)&
a, (
const fp *)&c);
658 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
659 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
660 fp_add3(&c, (
const fp *)&
a, (
const fp *)&
a);
661 fp_add3(&
a, (
const fp *)&b, (
const fp *)&c);
662 fp_add3(&c, (
const fp *)&b, (
const fp *)&
a);
663 fp_add3(&b, (
const fp *)&c, (
const fp *)&b);
665 cycles = getticks() - cycles;
672 printf(
"add = %lld\n", total / (target * 100));
#define fulltorsion_points
uint64_t fp[NUMBER_OF_WORDS]