1 // SPDX-License-Identifier: MIT
2
3 #include <assert.h>
4 #include <stdlib.h>
5 #if defined(_WIN32)
6 #include <string.h>
7 #define strcasecmp _stricmp
8 #else
9 #include <strings.h>
10 #endif
11
12 #include <oqs/oqs.h>
13
OQS_SIG_alg_identifier(size_t i)14 OQS_API const char *OQS_SIG_alg_identifier(size_t i) {
15 // EDIT-WHEN-ADDING-SIG
16 const char *a[OQS_SIG_algs_length] = {
17 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_START
18 OQS_SIG_alg_dilithium_2,
19 OQS_SIG_alg_dilithium_3,
20 OQS_SIG_alg_dilithium_5,
21 OQS_SIG_alg_dilithium_2_aes,
22 OQS_SIG_alg_dilithium_3_aes,
23 OQS_SIG_alg_dilithium_5_aes,
24 OQS_SIG_alg_falcon_512,
25 OQS_SIG_alg_falcon_1024,
26 OQS_SIG_alg_rainbow_I_classic,
27 OQS_SIG_alg_rainbow_I_circumzenithal,
28 OQS_SIG_alg_rainbow_I_compressed,
29 OQS_SIG_alg_rainbow_III_classic,
30 OQS_SIG_alg_rainbow_III_circumzenithal,
31 OQS_SIG_alg_rainbow_III_compressed,
32 OQS_SIG_alg_rainbow_V_classic,
33 OQS_SIG_alg_rainbow_V_circumzenithal,
34 OQS_SIG_alg_rainbow_V_compressed,
35 OQS_SIG_alg_sphincs_haraka_128f_robust,
36 OQS_SIG_alg_sphincs_haraka_128f_simple,
37 OQS_SIG_alg_sphincs_haraka_128s_robust,
38 OQS_SIG_alg_sphincs_haraka_128s_simple,
39 OQS_SIG_alg_sphincs_haraka_192f_robust,
40 OQS_SIG_alg_sphincs_haraka_192f_simple,
41 OQS_SIG_alg_sphincs_haraka_192s_robust,
42 OQS_SIG_alg_sphincs_haraka_192s_simple,
43 OQS_SIG_alg_sphincs_haraka_256f_robust,
44 OQS_SIG_alg_sphincs_haraka_256f_simple,
45 OQS_SIG_alg_sphincs_haraka_256s_robust,
46 OQS_SIG_alg_sphincs_haraka_256s_simple,
47 OQS_SIG_alg_sphincs_sha256_128f_robust,
48 OQS_SIG_alg_sphincs_sha256_128f_simple,
49 OQS_SIG_alg_sphincs_sha256_128s_robust,
50 OQS_SIG_alg_sphincs_sha256_128s_simple,
51 OQS_SIG_alg_sphincs_sha256_192f_robust,
52 OQS_SIG_alg_sphincs_sha256_192f_simple,
53 OQS_SIG_alg_sphincs_sha256_192s_robust,
54 OQS_SIG_alg_sphincs_sha256_192s_simple,
55 OQS_SIG_alg_sphincs_sha256_256f_robust,
56 OQS_SIG_alg_sphincs_sha256_256f_simple,
57 OQS_SIG_alg_sphincs_sha256_256s_robust,
58 OQS_SIG_alg_sphincs_sha256_256s_simple,
59 OQS_SIG_alg_sphincs_shake256_128f_robust,
60 OQS_SIG_alg_sphincs_shake256_128f_simple,
61 OQS_SIG_alg_sphincs_shake256_128s_robust,
62 OQS_SIG_alg_sphincs_shake256_128s_simple,
63 OQS_SIG_alg_sphincs_shake256_192f_robust,
64 OQS_SIG_alg_sphincs_shake256_192f_simple,
65 OQS_SIG_alg_sphincs_shake256_192s_robust,
66 OQS_SIG_alg_sphincs_shake256_192s_simple,
67 OQS_SIG_alg_sphincs_shake256_256f_robust,
68 OQS_SIG_alg_sphincs_shake256_256f_simple,
69 OQS_SIG_alg_sphincs_shake256_256s_robust,
70 OQS_SIG_alg_sphincs_shake256_256s_simple,
71 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_END
72 OQS_SIG_alg_picnic_L1_FS,
73 OQS_SIG_alg_picnic_L1_UR,
74 OQS_SIG_alg_picnic_L1_full,
75 OQS_SIG_alg_picnic_L3_FS,
76 OQS_SIG_alg_picnic_L3_UR,
77 OQS_SIG_alg_picnic_L3_full,
78 OQS_SIG_alg_picnic_L5_FS,
79 OQS_SIG_alg_picnic_L5_UR,
80 OQS_SIG_alg_picnic_L5_full,
81 OQS_SIG_alg_picnic3_L1,
82 OQS_SIG_alg_picnic3_L3,
83 OQS_SIG_alg_picnic3_L5
84 };
85 if (i >= OQS_SIG_algs_length) {
86 return NULL;
87 } else {
88 return a[i];
89 }
90 }
91
OQS_SIG_alg_count()92 OQS_API int OQS_SIG_alg_count() {
93 return OQS_SIG_algs_length;
94 }
95
OQS_SIG_alg_is_enabled(const char * method_name)96 OQS_API int OQS_SIG_alg_is_enabled(const char *method_name) {
97 if (method_name == NULL) {
98 return 0;
99 }
100 if (0) {
101 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ENABLED_CASE_START
102 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2)) {
103 #ifdef OQS_ENABLE_SIG_dilithium_2
104 return 1;
105 #else
106 return 0;
107 #endif
108 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3)) {
109 #ifdef OQS_ENABLE_SIG_dilithium_3
110 return 1;
111 #else
112 return 0;
113 #endif
114 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5)) {
115 #ifdef OQS_ENABLE_SIG_dilithium_5
116 return 1;
117 #else
118 return 0;
119 #endif
120 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2_aes)) {
121 #ifdef OQS_ENABLE_SIG_dilithium_2_aes
122 return 1;
123 #else
124 return 0;
125 #endif
126 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3_aes)) {
127 #ifdef OQS_ENABLE_SIG_dilithium_3_aes
128 return 1;
129 #else
130 return 0;
131 #endif
132 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5_aes)) {
133 #ifdef OQS_ENABLE_SIG_dilithium_5_aes
134 return 1;
135 #else
136 return 0;
137 #endif
138 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_512)) {
139 #ifdef OQS_ENABLE_SIG_falcon_512
140 return 1;
141 #else
142 return 0;
143 #endif
144 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_1024)) {
145 #ifdef OQS_ENABLE_SIG_falcon_1024
146 return 1;
147 #else
148 return 0;
149 #endif
150 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_classic)) {
151 #ifdef OQS_ENABLE_SIG_rainbow_I_classic
152 return 1;
153 #else
154 return 0;
155 #endif
156 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_circumzenithal)) {
157 #ifdef OQS_ENABLE_SIG_rainbow_I_circumzenithal
158 return 1;
159 #else
160 return 0;
161 #endif
162 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_compressed)) {
163 #ifdef OQS_ENABLE_SIG_rainbow_I_compressed
164 return 1;
165 #else
166 return 0;
167 #endif
168 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_classic)) {
169 #ifdef OQS_ENABLE_SIG_rainbow_III_classic
170 return 1;
171 #else
172 return 0;
173 #endif
174 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_circumzenithal)) {
175 #ifdef OQS_ENABLE_SIG_rainbow_III_circumzenithal
176 return 1;
177 #else
178 return 0;
179 #endif
180 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_compressed)) {
181 #ifdef OQS_ENABLE_SIG_rainbow_III_compressed
182 return 1;
183 #else
184 return 0;
185 #endif
186 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_classic)) {
187 #ifdef OQS_ENABLE_SIG_rainbow_V_classic
188 return 1;
189 #else
190 return 0;
191 #endif
192 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_circumzenithal)) {
193 #ifdef OQS_ENABLE_SIG_rainbow_V_circumzenithal
194 return 1;
195 #else
196 return 0;
197 #endif
198 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_compressed)) {
199 #ifdef OQS_ENABLE_SIG_rainbow_V_compressed
200 return 1;
201 #else
202 return 0;
203 #endif
204 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128f_robust)) {
205 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128f_robust
206 return 1;
207 #else
208 return 0;
209 #endif
210 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128f_simple)) {
211 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128f_simple
212 return 1;
213 #else
214 return 0;
215 #endif
216 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128s_robust)) {
217 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128s_robust
218 return 1;
219 #else
220 return 0;
221 #endif
222 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128s_simple)) {
223 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128s_simple
224 return 1;
225 #else
226 return 0;
227 #endif
228 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192f_robust)) {
229 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192f_robust
230 return 1;
231 #else
232 return 0;
233 #endif
234 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192f_simple)) {
235 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192f_simple
236 return 1;
237 #else
238 return 0;
239 #endif
240 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192s_robust)) {
241 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192s_robust
242 return 1;
243 #else
244 return 0;
245 #endif
246 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192s_simple)) {
247 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192s_simple
248 return 1;
249 #else
250 return 0;
251 #endif
252 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256f_robust)) {
253 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256f_robust
254 return 1;
255 #else
256 return 0;
257 #endif
258 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256f_simple)) {
259 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256f_simple
260 return 1;
261 #else
262 return 0;
263 #endif
264 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256s_robust)) {
265 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256s_robust
266 return 1;
267 #else
268 return 0;
269 #endif
270 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256s_simple)) {
271 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256s_simple
272 return 1;
273 #else
274 return 0;
275 #endif
276 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128f_robust)) {
277 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128f_robust
278 return 1;
279 #else
280 return 0;
281 #endif
282 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128f_simple)) {
283 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128f_simple
284 return 1;
285 #else
286 return 0;
287 #endif
288 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128s_robust)) {
289 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128s_robust
290 return 1;
291 #else
292 return 0;
293 #endif
294 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128s_simple)) {
295 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128s_simple
296 return 1;
297 #else
298 return 0;
299 #endif
300 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192f_robust)) {
301 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192f_robust
302 return 1;
303 #else
304 return 0;
305 #endif
306 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192f_simple)) {
307 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192f_simple
308 return 1;
309 #else
310 return 0;
311 #endif
312 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192s_robust)) {
313 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192s_robust
314 return 1;
315 #else
316 return 0;
317 #endif
318 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192s_simple)) {
319 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192s_simple
320 return 1;
321 #else
322 return 0;
323 #endif
324 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256f_robust)) {
325 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256f_robust
326 return 1;
327 #else
328 return 0;
329 #endif
330 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256f_simple)) {
331 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256f_simple
332 return 1;
333 #else
334 return 0;
335 #endif
336 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256s_robust)) {
337 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256s_robust
338 return 1;
339 #else
340 return 0;
341 #endif
342 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256s_simple)) {
343 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256s_simple
344 return 1;
345 #else
346 return 0;
347 #endif
348 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128f_robust)) {
349 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128f_robust
350 return 1;
351 #else
352 return 0;
353 #endif
354 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128f_simple)) {
355 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128f_simple
356 return 1;
357 #else
358 return 0;
359 #endif
360 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128s_robust)) {
361 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128s_robust
362 return 1;
363 #else
364 return 0;
365 #endif
366 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128s_simple)) {
367 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128s_simple
368 return 1;
369 #else
370 return 0;
371 #endif
372 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192f_robust)) {
373 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192f_robust
374 return 1;
375 #else
376 return 0;
377 #endif
378 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192f_simple)) {
379 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192f_simple
380 return 1;
381 #else
382 return 0;
383 #endif
384 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192s_robust)) {
385 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192s_robust
386 return 1;
387 #else
388 return 0;
389 #endif
390 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192s_simple)) {
391 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192s_simple
392 return 1;
393 #else
394 return 0;
395 #endif
396 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256f_robust)) {
397 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256f_robust
398 return 1;
399 #else
400 return 0;
401 #endif
402 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256f_simple)) {
403 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256f_simple
404 return 1;
405 #else
406 return 0;
407 #endif
408 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256s_robust)) {
409 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256s_robust
410 return 1;
411 #else
412 return 0;
413 #endif
414 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256s_simple)) {
415 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256s_simple
416 return 1;
417 #else
418 return 0;
419 #endif
420 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ENABLED_CASE_END
421 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_FS)) {
422 #ifdef OQS_ENABLE_SIG_picnic_L1_FS
423 return 1;
424 #else
425 return 0;
426 #endif
427 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_UR)) {
428 #ifdef OQS_ENABLE_SIG_picnic_L1_UR
429 return 1;
430 #else
431 return 0;
432 #endif
433 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_full)) {
434 #ifdef OQS_ENABLE_SIG_picnic_L1_full
435 return 1;
436 #else
437 return 0;
438 #endif
439 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_FS)) {
440 #ifdef OQS_ENABLE_SIG_picnic_L3_FS
441 return 1;
442 #else
443 return 0;
444 #endif
445 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_UR)) {
446 #ifdef OQS_ENABLE_SIG_picnic_L3_UR
447 return 1;
448 #else
449 return 0;
450 #endif
451 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_full)) {
452 #ifdef OQS_ENABLE_SIG_picnic_L3_full
453 return 1;
454 #else
455 return 0;
456 #endif
457 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_FS)) {
458 #ifdef OQS_ENABLE_SIG_picnic_L5_FS
459 return 1;
460 #else
461 return 0;
462 #endif
463 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_UR)) {
464 #ifdef OQS_ENABLE_SIG_picnic_L5_UR
465 return 1;
466 #else
467 return 0;
468 #endif
469 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_full)) {
470 #ifdef OQS_ENABLE_SIG_picnic_L5_full
471 return 1;
472 #else
473 return 0;
474 #endif
475 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L1)) {
476 #ifdef OQS_ENABLE_SIG_picnic3_L1
477 return 1;
478 #else
479 return 0;
480 #endif
481 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L3)) {
482 #ifdef OQS_ENABLE_SIG_picnic3_L3
483 return 1;
484 #else
485 return 0;
486 #endif
487 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L5)) {
488 #ifdef OQS_ENABLE_SIG_picnic3_L5
489 return 1;
490 #else
491 return 0;
492 #endif
493 // EDIT-WHEN-ADDING-SIG
494 } else {
495 return 0;
496 }
497 }
498
OQS_SIG_new(const char * method_name)499 OQS_API OQS_SIG *OQS_SIG_new(const char *method_name) {
500 if (method_name == NULL) {
501 return NULL;
502 }
503 if (0) {
504 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_START
505 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2)) {
506 #ifdef OQS_ENABLE_SIG_dilithium_2
507 return OQS_SIG_dilithium_2_new();
508 #else
509 return NULL;
510 #endif
511 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3)) {
512 #ifdef OQS_ENABLE_SIG_dilithium_3
513 return OQS_SIG_dilithium_3_new();
514 #else
515 return NULL;
516 #endif
517 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5)) {
518 #ifdef OQS_ENABLE_SIG_dilithium_5
519 return OQS_SIG_dilithium_5_new();
520 #else
521 return NULL;
522 #endif
523 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_2_aes)) {
524 #ifdef OQS_ENABLE_SIG_dilithium_2_aes
525 return OQS_SIG_dilithium_2_aes_new();
526 #else
527 return NULL;
528 #endif
529 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_3_aes)) {
530 #ifdef OQS_ENABLE_SIG_dilithium_3_aes
531 return OQS_SIG_dilithium_3_aes_new();
532 #else
533 return NULL;
534 #endif
535 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_dilithium_5_aes)) {
536 #ifdef OQS_ENABLE_SIG_dilithium_5_aes
537 return OQS_SIG_dilithium_5_aes_new();
538 #else
539 return NULL;
540 #endif
541 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_512)) {
542 #ifdef OQS_ENABLE_SIG_falcon_512
543 return OQS_SIG_falcon_512_new();
544 #else
545 return NULL;
546 #endif
547 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_falcon_1024)) {
548 #ifdef OQS_ENABLE_SIG_falcon_1024
549 return OQS_SIG_falcon_1024_new();
550 #else
551 return NULL;
552 #endif
553 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_classic)) {
554 #ifdef OQS_ENABLE_SIG_rainbow_I_classic
555 return OQS_SIG_rainbow_I_classic_new();
556 #else
557 return NULL;
558 #endif
559 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_circumzenithal)) {
560 #ifdef OQS_ENABLE_SIG_rainbow_I_circumzenithal
561 return OQS_SIG_rainbow_I_circumzenithal_new();
562 #else
563 return NULL;
564 #endif
565 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_I_compressed)) {
566 #ifdef OQS_ENABLE_SIG_rainbow_I_compressed
567 return OQS_SIG_rainbow_I_compressed_new();
568 #else
569 return NULL;
570 #endif
571 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_classic)) {
572 #ifdef OQS_ENABLE_SIG_rainbow_III_classic
573 return OQS_SIG_rainbow_III_classic_new();
574 #else
575 return NULL;
576 #endif
577 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_circumzenithal)) {
578 #ifdef OQS_ENABLE_SIG_rainbow_III_circumzenithal
579 return OQS_SIG_rainbow_III_circumzenithal_new();
580 #else
581 return NULL;
582 #endif
583 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_III_compressed)) {
584 #ifdef OQS_ENABLE_SIG_rainbow_III_compressed
585 return OQS_SIG_rainbow_III_compressed_new();
586 #else
587 return NULL;
588 #endif
589 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_classic)) {
590 #ifdef OQS_ENABLE_SIG_rainbow_V_classic
591 return OQS_SIG_rainbow_V_classic_new();
592 #else
593 return NULL;
594 #endif
595 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_circumzenithal)) {
596 #ifdef OQS_ENABLE_SIG_rainbow_V_circumzenithal
597 return OQS_SIG_rainbow_V_circumzenithal_new();
598 #else
599 return NULL;
600 #endif
601 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_rainbow_V_compressed)) {
602 #ifdef OQS_ENABLE_SIG_rainbow_V_compressed
603 return OQS_SIG_rainbow_V_compressed_new();
604 #else
605 return NULL;
606 #endif
607 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128f_robust)) {
608 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128f_robust
609 return OQS_SIG_sphincs_haraka_128f_robust_new();
610 #else
611 return NULL;
612 #endif
613 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128f_simple)) {
614 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128f_simple
615 return OQS_SIG_sphincs_haraka_128f_simple_new();
616 #else
617 return NULL;
618 #endif
619 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128s_robust)) {
620 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128s_robust
621 return OQS_SIG_sphincs_haraka_128s_robust_new();
622 #else
623 return NULL;
624 #endif
625 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_128s_simple)) {
626 #ifdef OQS_ENABLE_SIG_sphincs_haraka_128s_simple
627 return OQS_SIG_sphincs_haraka_128s_simple_new();
628 #else
629 return NULL;
630 #endif
631 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192f_robust)) {
632 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192f_robust
633 return OQS_SIG_sphincs_haraka_192f_robust_new();
634 #else
635 return NULL;
636 #endif
637 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192f_simple)) {
638 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192f_simple
639 return OQS_SIG_sphincs_haraka_192f_simple_new();
640 #else
641 return NULL;
642 #endif
643 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192s_robust)) {
644 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192s_robust
645 return OQS_SIG_sphincs_haraka_192s_robust_new();
646 #else
647 return NULL;
648 #endif
649 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_192s_simple)) {
650 #ifdef OQS_ENABLE_SIG_sphincs_haraka_192s_simple
651 return OQS_SIG_sphincs_haraka_192s_simple_new();
652 #else
653 return NULL;
654 #endif
655 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256f_robust)) {
656 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256f_robust
657 return OQS_SIG_sphincs_haraka_256f_robust_new();
658 #else
659 return NULL;
660 #endif
661 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256f_simple)) {
662 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256f_simple
663 return OQS_SIG_sphincs_haraka_256f_simple_new();
664 #else
665 return NULL;
666 #endif
667 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256s_robust)) {
668 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256s_robust
669 return OQS_SIG_sphincs_haraka_256s_robust_new();
670 #else
671 return NULL;
672 #endif
673 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_haraka_256s_simple)) {
674 #ifdef OQS_ENABLE_SIG_sphincs_haraka_256s_simple
675 return OQS_SIG_sphincs_haraka_256s_simple_new();
676 #else
677 return NULL;
678 #endif
679 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128f_robust)) {
680 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128f_robust
681 return OQS_SIG_sphincs_sha256_128f_robust_new();
682 #else
683 return NULL;
684 #endif
685 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128f_simple)) {
686 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128f_simple
687 return OQS_SIG_sphincs_sha256_128f_simple_new();
688 #else
689 return NULL;
690 #endif
691 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128s_robust)) {
692 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128s_robust
693 return OQS_SIG_sphincs_sha256_128s_robust_new();
694 #else
695 return NULL;
696 #endif
697 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_128s_simple)) {
698 #ifdef OQS_ENABLE_SIG_sphincs_sha256_128s_simple
699 return OQS_SIG_sphincs_sha256_128s_simple_new();
700 #else
701 return NULL;
702 #endif
703 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192f_robust)) {
704 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192f_robust
705 return OQS_SIG_sphincs_sha256_192f_robust_new();
706 #else
707 return NULL;
708 #endif
709 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192f_simple)) {
710 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192f_simple
711 return OQS_SIG_sphincs_sha256_192f_simple_new();
712 #else
713 return NULL;
714 #endif
715 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192s_robust)) {
716 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192s_robust
717 return OQS_SIG_sphincs_sha256_192s_robust_new();
718 #else
719 return NULL;
720 #endif
721 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_192s_simple)) {
722 #ifdef OQS_ENABLE_SIG_sphincs_sha256_192s_simple
723 return OQS_SIG_sphincs_sha256_192s_simple_new();
724 #else
725 return NULL;
726 #endif
727 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256f_robust)) {
728 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256f_robust
729 return OQS_SIG_sphincs_sha256_256f_robust_new();
730 #else
731 return NULL;
732 #endif
733 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256f_simple)) {
734 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256f_simple
735 return OQS_SIG_sphincs_sha256_256f_simple_new();
736 #else
737 return NULL;
738 #endif
739 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256s_robust)) {
740 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256s_robust
741 return OQS_SIG_sphincs_sha256_256s_robust_new();
742 #else
743 return NULL;
744 #endif
745 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_sha256_256s_simple)) {
746 #ifdef OQS_ENABLE_SIG_sphincs_sha256_256s_simple
747 return OQS_SIG_sphincs_sha256_256s_simple_new();
748 #else
749 return NULL;
750 #endif
751 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128f_robust)) {
752 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128f_robust
753 return OQS_SIG_sphincs_shake256_128f_robust_new();
754 #else
755 return NULL;
756 #endif
757 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128f_simple)) {
758 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128f_simple
759 return OQS_SIG_sphincs_shake256_128f_simple_new();
760 #else
761 return NULL;
762 #endif
763 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128s_robust)) {
764 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128s_robust
765 return OQS_SIG_sphincs_shake256_128s_robust_new();
766 #else
767 return NULL;
768 #endif
769 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_128s_simple)) {
770 #ifdef OQS_ENABLE_SIG_sphincs_shake256_128s_simple
771 return OQS_SIG_sphincs_shake256_128s_simple_new();
772 #else
773 return NULL;
774 #endif
775 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192f_robust)) {
776 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192f_robust
777 return OQS_SIG_sphincs_shake256_192f_robust_new();
778 #else
779 return NULL;
780 #endif
781 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192f_simple)) {
782 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192f_simple
783 return OQS_SIG_sphincs_shake256_192f_simple_new();
784 #else
785 return NULL;
786 #endif
787 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192s_robust)) {
788 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192s_robust
789 return OQS_SIG_sphincs_shake256_192s_robust_new();
790 #else
791 return NULL;
792 #endif
793 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_192s_simple)) {
794 #ifdef OQS_ENABLE_SIG_sphincs_shake256_192s_simple
795 return OQS_SIG_sphincs_shake256_192s_simple_new();
796 #else
797 return NULL;
798 #endif
799 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256f_robust)) {
800 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256f_robust
801 return OQS_SIG_sphincs_shake256_256f_robust_new();
802 #else
803 return NULL;
804 #endif
805 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256f_simple)) {
806 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256f_simple
807 return OQS_SIG_sphincs_shake256_256f_simple_new();
808 #else
809 return NULL;
810 #endif
811 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256s_robust)) {
812 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256s_robust
813 return OQS_SIG_sphincs_shake256_256s_robust_new();
814 #else
815 return NULL;
816 #endif
817 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_sphincs_shake256_256s_simple)) {
818 #ifdef OQS_ENABLE_SIG_sphincs_shake256_256s_simple
819 return OQS_SIG_sphincs_shake256_256s_simple_new();
820 #else
821 return NULL;
822 #endif
823 ///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_NEW_CASE_END
824 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_FS)) {
825 #ifdef OQS_ENABLE_SIG_picnic_L1_FS
826 return OQS_SIG_picnic_L1_FS_new();
827 #else
828 return NULL;
829 #endif
830 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_UR)) {
831 #ifdef OQS_ENABLE_SIG_picnic_L1_UR
832 return OQS_SIG_picnic_L1_UR_new();
833 #else
834 return NULL;
835 #endif
836 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L1_full)) {
837 #ifdef OQS_ENABLE_SIG_picnic_L1_full
838 return OQS_SIG_picnic_L1_full_new();
839 #else
840 return NULL;
841 #endif
842 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_FS)) {
843 #ifdef OQS_ENABLE_SIG_picnic_L3_FS
844 return OQS_SIG_picnic_L3_FS_new();
845 #else
846 return NULL;
847 #endif
848 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_UR)) {
849 #ifdef OQS_ENABLE_SIG_picnic_L3_UR
850 return OQS_SIG_picnic_L3_UR_new();
851 #else
852 return NULL;
853 #endif
854 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L3_full)) {
855 #ifdef OQS_ENABLE_SIG_picnic_L3_full
856 return OQS_SIG_picnic_L3_full_new();
857 #else
858 return NULL;
859 #endif
860 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_FS)) {
861 #ifdef OQS_ENABLE_SIG_picnic_L5_FS
862 return OQS_SIG_picnic_L5_FS_new();
863 #else
864 return NULL;
865 #endif
866 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_UR)) {
867 #ifdef OQS_ENABLE_SIG_picnic_L5_UR
868 return OQS_SIG_picnic_L5_UR_new();
869 #else
870 return NULL;
871 #endif
872 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic_L5_full)) {
873 #ifdef OQS_ENABLE_SIG_picnic_L5_full
874 return OQS_SIG_picnic_L5_full_new();
875 #else
876 return NULL;
877 #endif
878 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L1)) {
879 #ifdef OQS_ENABLE_SIG_picnic3_L1
880 return OQS_SIG_picnic3_L1_new();
881 #else
882 return NULL;
883 #endif
884 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L3)) {
885 #ifdef OQS_ENABLE_SIG_picnic3_L3
886 return OQS_SIG_picnic3_L3_new();
887 #else
888 return NULL;
889 #endif
890 } else if (0 == strcasecmp(method_name, OQS_SIG_alg_picnic3_L5)) {
891 #ifdef OQS_ENABLE_SIG_picnic3_L5
892 return OQS_SIG_picnic3_L5_new();
893 #else
894 return NULL;
895 #endif
896 // EDIT-WHEN-ADDING-SIG
897 } else {
898 return NULL;
899 }
900 }
901
OQS_SIG_keypair(const OQS_SIG * sig,uint8_t * public_key,uint8_t * secret_key)902 OQS_API OQS_STATUS OQS_SIG_keypair(const OQS_SIG *sig, uint8_t *public_key, uint8_t *secret_key) {
903 if (sig == NULL || sig->keypair(public_key, secret_key) != OQS_SUCCESS) {
904 return OQS_ERROR;
905 } else {
906 return OQS_SUCCESS;
907 }
908 }
909
OQS_SIG_sign(const OQS_SIG * sig,uint8_t * signature,size_t * signature_len,const uint8_t * message,size_t message_len,const uint8_t * secret_key)910 OQS_API OQS_STATUS OQS_SIG_sign(const OQS_SIG *sig, uint8_t *signature, size_t *signature_len, const uint8_t *message, size_t message_len, const uint8_t *secret_key) {
911 if (sig == NULL || sig->sign(signature, signature_len, message, message_len, secret_key) != OQS_SUCCESS) {
912 return OQS_ERROR;
913 } else {
914 return OQS_SUCCESS;
915 }
916 }
917
OQS_SIG_verify(const OQS_SIG * sig,const uint8_t * message,size_t message_len,const uint8_t * signature,size_t signature_len,const uint8_t * public_key)918 OQS_API OQS_STATUS OQS_SIG_verify(const OQS_SIG *sig, const uint8_t *message, size_t message_len, const uint8_t *signature, size_t signature_len, const uint8_t *public_key) {
919 if (sig == NULL || sig->verify(message, message_len, signature, signature_len, public_key) != OQS_SUCCESS) {
920 return OQS_ERROR;
921 } else {
922 return OQS_SUCCESS;
923 }
924 }
925
OQS_SIG_free(OQS_SIG * sig)926 OQS_API void OQS_SIG_free(OQS_SIG *sig) {
927 OQS_MEM_insecure_free(sig);
928 }
929