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