Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
ctidh.c File Reference
#include <time.h>
#include <secsidh/secsidh.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "cycle.h"
#include "fp-counters.h"
#include "primes.h"
#include "ctidh.h"
#include "ctidh_api.h"
#include "fp/fp2.h"
Include dependency graph for ctidh.c:

Go to the source code of this file.

Macros

#define cprintf(...)
#define CPASTER(x, y)
#define CEVALUATOR(x, y)
#define CONSTNAMESPACE(name)
#define SK_SIZE   CONSTNAMESPACE(SK_SIZE)
#define PK_SIZE   CONSTNAMESPACE(PK_SIZE)
#define SS_SIZE   CONSTNAMESPACE(SS_SIZE)
#define pk_size   FNAMESPACE(pk_size)
#define sk_size   FNAMESPACE(sk_size)
#define ss_size   FNAMESPACE(ss_size)
#define FPASTER(x, y)
#define FEVALUATOR(x, y)
#define FNAMESPACE(name)
#define keygen   FNAMESPACE(keygen)
#define derive   FNAMESPACE(derive)

Functions

int main (int argc, char *argv[])

Macro Definition Documentation

◆ CEVALUATOR

#define CEVALUATOR ( x,
y )
Value:
CPASTER(x, y)
#define CPASTER(x, y)
Definition checkct.c:21

Definition at line 24 of file ctidh.c.

◆ CONSTNAMESPACE

#define CONSTNAMESPACE ( name)
Value:
#define CEVALUATOR(x, y)
Definition checkct.c:22
#define BITS
Definition csidh.c:21

Definition at line 25 of file ctidh.c.

◆ CPASTER

#define CPASTER ( x,
y )
Value:
SECSIDH_CTIDH##x##_##y

Definition at line 23 of file ctidh.c.

◆ cprintf

#define cprintf ( ...)

Definition at line 20 of file ctidh.c.

Referenced by main().

◆ derive

#define derive   FNAMESPACE(derive)

Definition at line 39 of file ctidh.c.

Referenced by main().

◆ FEVALUATOR

#define FEVALUATOR ( x,
y )
Value:
FPASTER(x, y)
#define FPASTER(x, y)
Definition checkct.c:32

Definition at line 35 of file ctidh.c.

◆ FNAMESPACE

#define FNAMESPACE ( name)
Value:
#define FEVALUATOR(x, y)
Definition checkct.c:33

Definition at line 36 of file ctidh.c.

◆ FPASTER

#define FPASTER ( x,
y )
Value:
secsidh_CTIDH##x##_##y

Definition at line 34 of file ctidh.c.

◆ keygen

#define keygen   FNAMESPACE(keygen)

Definition at line 38 of file ctidh.c.

Referenced by main().

◆ PK_SIZE

#define PK_SIZE   CONSTNAMESPACE(PK_SIZE)

Definition at line 27 of file ctidh.c.

◆ pk_size

#define pk_size   FNAMESPACE(pk_size)

Definition at line 30 of file ctidh.c.

◆ SK_SIZE

#define SK_SIZE   CONSTNAMESPACE(SK_SIZE)

Definition at line 26 of file ctidh.c.

◆ sk_size

#define sk_size   FNAMESPACE(sk_size)

Definition at line 31 of file ctidh.c.

◆ SS_SIZE

#define SS_SIZE   CONSTNAMESPACE(SS_SIZE)

Definition at line 28 of file ctidh.c.

◆ ss_size

#define ss_size   FNAMESPACE(ss_size)

Definition at line 32 of file ctidh.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 59 of file ctidh.c.

60{
61#if !defined(_M1_) && !defined(_M2_) && !defined(_M3_) && !defined(_M4_) && !defined(_M5_)
62 printf("\nNOT using radical 3-isogenies (original dCTIDH).\n\n");
63#else
64 printf("\nUsing 2^%ld radical 3-isogenies.\n\n", batch_start[0] - 1);
65#endif
66 if (argc == 3)
67 {
68 if (strcmp(argv[1], "-bact") == 0)
69 {
70 run_benchmark_action(atoi(argv[2]), 10);
71 }
72 else if (strcmp(argv[1], "-bkey") == 0)
73 {
74 run_benchmark_keygen(atoi(argv[2]), 10);
75 }
76 else if (strcmp(argv[1], "-bkey") == 0)
77 {
78 run_benchmark_fp(atoi(argv[2]));
79 }
80 else
81 {
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]);
83 }
84 return 0;
85 }
86 else if (argc == 2)
87 {
88
89 if (strcmp(argv[1], "-fp2test") == 0)
90 {
91 printf("Starting fp^2 test ...\n");
92 fflush(stdout);
93 fp2_test();
94 printf("All tests passed!\n");
95 return 0;
96 }
97 else
98 {
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]);
100 }
101 }
102
103 ticks cc0, cc1; // for measuringthe clock cycles
104 // printf("PK_SIZE = %d and pk_size = %d\n", (int)PK_SIZE, (int)pk_size);
105 // printf("SK_SIZE = %d and sk_size = %d\n", (int)SK_SIZE, (int)sk_size);
106 // printf("SS_SIZE = %d and ss_size = %d\n", (int)SS_SIZE, (int)ss_size);
107 // assert(PK_SIZE == pk_size);
108 // assert(SK_SIZE == sk_size);
109 // assert(SS_SIZE == ss_size);
110
111 //------------------------------------------------------
112 // Key generation
113 printf("\033[0;33m// --------------\033[0m\n");
114 printf("\033[0;33m// Key generation\033[0m\n");
115
116 printf("sizeof private key = %lu \n", sizeof(private_key));
117 printf("sizeof public key = %lu \n", sizeof(public_key));
118
119 // ----------
120 // Alice
121 printf("\n\033[0;35m// Alice\033[0m\n");
122 // uint8_t a[sizeof(private_key)] = {0}, A[sizeof(public_key)] = {0}, ss_a[sizeof(public_key)];
123 uint8_t a[SK_SIZE] = {0}, A[PK_SIZE] = {0}, ss_a[SS_SIZE];
124 cc0 = getticks();
125 keygen(A, a);
126 cc1 = getticks();
127 ss_print(a, "sk_a", SK_SIZE);
128 ss_print(A, "pk_a", PK_SIZE);
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);
131 // ----------
132 // Bob
133 printf("\n\033[0;34m// Bob\033[0m\n");
134 uint8_t b[SK_SIZE], B[PK_SIZE], ss_b[SS_SIZE];
135 cc0 = getticks();
136 keygen(B, b);
137 cc1 = getticks();
138 ss_print(b, "sk_b", SK_SIZE);
139 ss_print(B, "pk_b", PK_SIZE);
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);
142
143 fflush(stdout);
144 //------------------------------------------------------
145 // Secret sharing derivation
146 printf("\n\033[0;33m// -------------------------\033[0m\n");
147 printf("\033[0;33m// Secret sharing generation\033[0m\n");
148
149 // ----------------
150 // Alice
151 printf("\n\033[0;35m// Alice\033[0m\n");
152 cc0 = getticks();
153 assert(derive(ss_a, B, a) == 0);
154 cc1 = getticks();
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);
159
160 fflush(stdout);
161 // ----------------
162 // Bob
163 printf("\n\033[0;34m// Bob\033[0m\n");
164 cc0 = getticks();
165 assert(derive(ss_b, A, b) == 0);
166 cc1 = getticks();
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);
171 fflush(stdout);
172 // =============================
173 // Verifying same secret sharing
174 assert(dumb_fp_isequal(ss_a, ss_b, SS_SIZE));
175
176 //------------------------------------------------------
177 printf("\n\033[0;32m// Successfully secret sharing computation!\033[0m\n");
178 return 0;
179}
#define SK_SIZE
Definition checkct.c:24
#define PK_SIZE
Definition checkct.c:25
#define SS_SIZE
Definition checkct.c:26
assert(var1 eq var2)
#define derive
Definition ctidh.c:39
#define keygen
Definition ctidh.c:38
#define cprintf(...)
Definition ctidh.c:20
A
Definition tests.py:29
#define batch_start
Definition primes.h:55
f a
Definition to_model.m:12

References a, assert(), batch_start, cprintf, derive, fp2_test, keygen, PK_SIZE, SK_SIZE, and SS_SIZE.

Here is the call graph for this function: