• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is part of the openHiTLS project.
3  *
4  * openHiTLS is licensed under the Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *
8  *     http://license.coscl.org.cn/MulanPSL2
9  *
10  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13  * See the Mulan PSL v2 for more details.
14  */
15 /* Derivation of configuration features.
16  * The derivation type (rule) and sequence are as follows:
17  * 1. Parent features derive child features.
18  * 2. Derive the features of dependencies.
19  *    For example, if feature a depends on features b and c, you need to derive features b and c.
20  * 3. Child features derive parent features.
21  *    The high-level interfaces of the crypto module is controlled by the parent feature macro,
22  *    if there is no parent feature, such interfaces will be unavailable.
23  */
24 
25 #ifndef HITLS_CONFIG_LAYER_CRYPTO_H
26 #define HITLS_CONFIG_LAYER_CRYPTO_H
27 
28 #ifdef HITLS_CRYPTO_CODECS
29     #ifndef HITLS_CRYPTO_PROVIDER
30         #define HITLS_CRYPTO_PROVIDER
31     #endif
32 #endif
33 
34 #if defined(HITLS_CRYPTO_CODECSKEY) && defined(HITLS_CRYPTO_PROVIDER)
35     #ifndef HITLS_CRYPTO_CODECS
36         #define HITLS_CRYPTO_CODECS
37     #endif
38 #endif
39 
40 
41 #ifdef HITLS_CRYPTO_CODECSKEY
42     #ifndef HITLS_CRYPTO_KEY_ENCODE
43         #define HITLS_CRYPTO_KEY_ENCODE
44     #endif
45     #ifndef HITLS_CRYPTO_KEY_DECODE
46         #define HITLS_CRYPTO_KEY_DECODE
47     #endif
48     #ifndef HITLS_CRYPTO_KEY_EPKI
49         #define HITLS_CRYPTO_KEY_EPKI
50     #endif
51 #endif
52 
53 #ifdef HITLS_CRYPTO_KEY_EPKI
54     #ifndef HITLS_CRYPTO_PBKDF2
55         #define HITLS_CRYPTO_PBKDF2
56     #endif
57 #endif
58 
59 #if defined(HITLS_CRYPTO_KEY_ENCODE) || defined(HITLS_CRYPTO_KEY_DECODE) || defined(HITLS_CRYPTO_KEY_EPKI)
60     #ifndef HITLS_CRYPTO_CODECSKEY
61         #define HITLS_CRYPTO_CODECSKEY
62     #endif
63     #ifndef HITLS_BSL_ASN1
64         #define HITLS_BSL_ASN1
65     #endif
66     #ifndef HITLS_BSL_OBJ
67         #define HITLS_BSL_OBJ
68     #endif
69 #endif
70 
71 #ifdef HITLS_CRYPTO_PROVIDER
72     #ifndef HITLS_BSL_PARAMS
73         #define HITLS_BSL_PARAMS
74     #endif
75 #endif
76 
77 /* kdf */
78 #ifdef HITLS_CRYPTO_KDF
79     #ifndef HITLS_CRYPTO_PBKDF2
80         #define HITLS_CRYPTO_PBKDF2
81     #endif
82     #ifndef HITLS_CRYPTO_HKDF
83         #define HITLS_CRYPTO_HKDF
84     #endif
85     #ifndef HITLS_CRYPTO_KDFTLS12
86         #define HITLS_CRYPTO_KDFTLS12
87     #endif
88     #ifndef HITLS_CRYPTO_SCRYPT
89         #define HITLS_CRYPTO_SCRYPT
90     #endif
91 #endif
92 
93 #ifdef HITLS_CRYPTO_HPKE
94     #ifndef HITLS_CRYPTO_HKDF
95         #define HITLS_CRYPTO_HKDF
96     #endif
97     #ifndef HITLS_BSL_PARAMS
98         #define HITLS_BSL_PARAMS
99     #endif
100 #endif
101 
102 #ifdef HITLS_CRYPTO_SCRYPT
103     #ifndef HITLS_CRYPTO_SHA256
104         #define HITLS_CRYPTO_SHA256
105     #endif
106     #ifndef HITLS_CRYPTO_PBKDF2
107         #define HITLS_CRYPTO_PBKDF2
108     #endif
109 #endif
110 
111 #if defined(HITLS_CRYPTO_PBKDF2) || defined(HITLS_CRYPTO_HKDF) || defined(HITLS_CRYPTO_KDFTLS12) || \
112     defined(HITLS_CRYPTO_SCRYPT)
113     #ifndef HITLS_CRYPTO_KDF
114             #define HITLS_CRYPTO_KDF
115     #endif
116     #ifndef HITLS_CRYPTO_HMAC
117         #define HITLS_CRYPTO_HMAC
118     #endif
119     #ifndef HITLS_BSL_PARAMS
120         #define HITLS_BSL_PARAMS
121     #endif
122 #endif
123 
124 /* DRBG */
125 #if defined(HITLS_CRYPTO_ENTROPY) && !defined(HITLS_BSL_LIST)
126     #define HITLS_BSL_LIST
127 #endif
128 
129 #if defined(HITLS_CRYPTO_ENTROPY) && !defined(HITLS_CRYPTO_ENTROPY_GETENTROPY) && \
130     !defined(HITLS_CRYPTO_ENTROPY_DEVRANDOM) && !defined(HITLS_CRYPTO_ENTROPY_SYS) && \
131     !defined(HITLS_CRYPTO_ENTROPY_HARDWARE)
132 #define HITLS_CRYPTO_ENTROPY_DEVRANDOM
133 #endif
134 
135 #ifdef HITLS_CRYPTO_DRBG
136     #ifndef HITLS_CRYPTO_DRBG_HASH
137         #define HITLS_CRYPTO_DRBG_HASH
138     #endif
139     #ifndef HITLS_CRYPTO_DRBG_HMAC
140         #define HITLS_CRYPTO_DRBG_HMAC
141     #endif
142     #ifndef HITLS_CRYPTO_DRBG_CTR
143         #define HITLS_CRYPTO_DRBG_CTR
144     #endif
145 #endif
146 
147 #if defined(HITLS_CRYPTO_DRBG_HMAC) && !defined(HITLS_CRYPTO_HMAC)
148     #define HITLS_CRYPTO_HMAC
149 #endif
150 
151 #if defined(HITLS_CRYPTO_DRBG_HASH) || defined(HITLS_CRYPTO_DRBG_HMAC) || defined(HITLS_CRYPTO_DRBG_CTR)
152     #ifndef HITLS_CRYPTO_DRBG
153         #define HITLS_CRYPTO_DRBG
154     #endif
155     #ifndef HITLS_BSL_PARAMS
156         #define HITLS_BSL_PARAMS
157     #endif
158 #endif
159 
160 #if defined(HITLS_CRYPTO_DRBG_GM)
161     #ifndef HITLS_BSL_SAL_TIME
162         #define HITLS_BSL_SAL_TIME
163     #endif
164 #endif
165 /* MAC */
166 #ifdef HITLS_CRYPTO_MAC
167     #ifndef HITLS_CRYPTO_HMAC
168         #define HITLS_CRYPTO_HMAC
169     #endif
170     #ifndef HITLS_CRYPTO_CMAC
171         #define HITLS_CRYPTO_CMAC
172     #endif
173     #ifndef HITLS_CRYPTO_GMAC
174         #define HITLS_CRYPTO_GMAC
175     #endif
176     #ifndef HITLS_CRYPTO_SIPHASH
177         #define HITLS_CRYPTO_SIPHASH
178     #endif
179     #ifndef HITLS_CRYPTO_CBC_MAC
180         #define HITLS_CRYPTO_CBC_MAC
181     #endif
182 #endif
183 
184 #if defined(HITLS_CRYPTO_CBC_MAC) && !defined(HITLS_CRYPTO_SM4)
185     #define HITLS_CRYPTO_SM4
186 #endif
187 
188 #ifdef HITLS_CRYPTO_GMAC
189     #ifndef HITLS_CRYPTO_EAL
190         #define HITLS_CRYPTO_EAL
191     #endif
192     #ifndef HITLS_CRYPTO_AES
193         #define HITLS_CRYPTO_AES
194     #endif
195     #ifndef HITLS_CRYPTO_GCM
196         #define HITLS_CRYPTO_GCM
197     #endif
198 #endif
199 
200 #ifdef HITLS_CRYPTO_CMAC
201     #ifndef HITLS_CRYPTO_CMAC_AES
202         #define HITLS_CRYPTO_CMAC_AES
203     #endif
204     #ifndef HITLS_CRYPTO_CMAC_SM4
205         #define HITLS_CRYPTO_CMAC_SM4
206     #endif
207 #endif
208 #if defined(HITLS_CRYPTO_CMAC_AES) && !defined(HITLS_CRYPTO_AES)
209     #define HITLS_CRYPTO_AES
210 #endif
211 #if defined(HITLS_CRYPTO_CMAC_SM4) && !defined(HITLS_CRYPTO_SM4)
212     #define HITLS_CRYPTO_SM4
213 #endif
214 #if defined(HITLS_CRYPTO_CMAC_AES) || defined(HITLS_CRYPTO_CMAC_SM4)
215     #ifndef HITLS_CRYPTO_CMAC
216         #define HITLS_CRYPTO_CMAC
217     #endif
218 #endif
219 
220 #if defined(HITLS_CRYPTO_HMAC) || defined(HITLS_CRYPTO_CMAC) || defined(HITLS_CRYPTO_GMAC) || \
221     defined(HITLS_CRYPTO_SIPHASH) || defined(HITLS_CRYPTO_CBC_MAC)
222     #ifndef HITLS_CRYPTO_MAC
223         #define HITLS_CRYPTO_MAC
224     #endif
225 #endif
226 
227 /* CIPHER */
228 #ifdef HITLS_CRYPTO_CIPHER
229     #ifndef HITLS_CRYPTO_AES
230         #define HITLS_CRYPTO_AES
231     #endif
232     #ifndef HITLS_CRYPTO_SM4
233         #define HITLS_CRYPTO_SM4
234     #endif
235     #ifndef HITLS_CRYPTO_CHACHA20
236         #define HITLS_CRYPTO_CHACHA20
237     #endif
238 #endif
239 
240 #if defined(HITLS_CRYPTO_CHACHA20) && !defined(HITLS_CRYPTO_CHACHA20POLY1305)
241     #define HITLS_CRYPTO_CHACHA20POLY1305
242 #endif
243 
244 #if defined(HITLS_CRYPTO_AES) || defined(HITLS_CRYPTO_SM4) || defined(HITLS_CRYPTO_CHACHA20)
245     #ifndef HITLS_CRYPTO_CIPHER
246         #define HITLS_CRYPTO_CIPHER
247     #endif
248 #endif
249 
250 /* MODES */
251 #ifdef HITLS_CRYPTO_MODES
252     #ifndef HITLS_CRYPTO_CTR
253         #define HITLS_CRYPTO_CTR
254     #endif
255     #ifndef HITLS_CRYPTO_CBC
256         #define HITLS_CRYPTO_CBC
257     #endif
258     #ifndef HITLS_CRYPTO_ECB
259         #define HITLS_CRYPTO_ECB
260     #endif
261     #ifndef HITLS_CRYPTO_GCM
262         #define HITLS_CRYPTO_GCM
263     #endif
264     #ifndef HITLS_CRYPTO_CCM
265         #define HITLS_CRYPTO_CCM
266     #endif
267     #ifndef HITLS_CRYPTO_XTS
268         #define HITLS_CRYPTO_XTS
269     #endif
270     #ifndef HITLS_CRYPTO_CFB
271         #define HITLS_CRYPTO_CFB
272     #endif
273     #ifndef HITLS_CRYPTO_OFB
274         #define HITLS_CRYPTO_OFB
275     #endif
276     #ifndef HITLS_CRYPTO_CHACHA20POLY1305
277         #define HITLS_CRYPTO_CHACHA20POLY1305
278     #endif
279 #endif
280 
281 #if defined(HITLS_CRYPTO_CTR) || defined(HITLS_CRYPTO_CBC) || defined(HITLS_CRYPTO_ECB) || \
282     defined(HITLS_CRYPTO_GCM) || defined(HITLS_CRYPTO_CCM) || defined(HITLS_CRYPTO_XTS) || \
283     defined(HITLS_CRYPTO_CFB) || defined(HITLS_CRYPTO_OFB) || defined(HITLS_CRYPTO_CHACHA20POLY1305)
284     #ifndef HITLS_CRYPTO_MODES
285         #define HITLS_CRYPTO_MODES
286     #endif
287 #endif
288 
289 /* PKEY */
290 #ifdef HITLS_CRYPTO_PKEY
291     #ifndef HITLS_CRYPTO_ECC
292         #define HITLS_CRYPTO_ECC
293     #endif
294     #ifndef HITLS_CRYPTO_DSA
295         #define HITLS_CRYPTO_DSA
296     #endif
297     #ifndef HITLS_CRYPTO_RSA
298         #define HITLS_CRYPTO_RSA
299     #endif
300     #ifndef HITLS_CRYPTO_DH
301         #define HITLS_CRYPTO_DH
302     #endif
303     #ifndef HITLS_CRYPTO_ECDSA
304         #define HITLS_CRYPTO_ECDSA
305     #endif
306     #ifndef HITLS_CRYPTO_ECDH
307         #define HITLS_CRYPTO_ECDH
308     #endif
309     #ifndef HITLS_CRYPTO_SM2
310         #define HITLS_CRYPTO_SM2
311     #endif
312     #ifndef HITLS_CRYPTO_CURVE25519
313         #define HITLS_CRYPTO_CURVE25519
314     #endif
315     #ifndef HITLS_CRYPTO_MLKEM
316         #define HITLS_CRYPTO_MLKEM
317     #endif
318     #ifndef HITLS_CRYPTO_MLDSA
319         #define HITLS_CRYPTO_MLDSA
320     #endif
321     #ifndef HITLS_CRYPTO_HYBRIDKEM
322         #define HITLS_CRYPTO_HYBRIDKEM
323     #endif
324     #ifndef HITLS_CRYPTO_PAILLIER
325         #define HITLS_CRYPTO_PAILLIER
326     #endif
327     #ifndef HITLS_CRYPTO_ELGAMAL
328         #define HITLS_CRYPTO_ELGAMAL
329     #endif
330     #ifndef HITLS_CRYPTO_SLH_DSA
331         #define HITLS_CRYPTO_SLH_DSA
332     #endif
333 #endif
334 
335 #ifdef HITLS_CRYPTO_RSA
336     #ifndef HITLS_CRYPTO_RSA_SIGN
337         #define HITLS_CRYPTO_RSA_SIGN
338     #endif
339     #ifndef HITLS_CRYPTO_RSA_VERIFY
340         #define HITLS_CRYPTO_RSA_VERIFY
341     #endif
342     #ifndef HITLS_CRYPTO_RSA_ENCRYPT
343         #define HITLS_CRYPTO_RSA_ENCRYPT
344     #endif
345     #ifndef HITLS_CRYPTO_RSA_DECRYPT
346         #define HITLS_CRYPTO_RSA_DECRYPT
347     #endif
348     #ifndef HITLS_CRYPTO_RSA_BLINDING
349         #define HITLS_CRYPTO_RSA_BLINDING
350     #endif
351     #ifndef HITLS_CRYPTO_RSA_GEN
352         #define HITLS_CRYPTO_RSA_GEN
353     #endif
354     #ifndef HITLS_CRYPTO_RSA_PAD
355         #define HITLS_CRYPTO_RSA_PAD
356     #endif
357     #ifndef HITLS_CRYPTO_RSA_BSSA
358         #define HITLS_CRYPTO_RSA_BSSA
359     #endif
360 #endif
361 
362 #ifdef HITLS_CRYPTO_RSA_BSSA
363     #ifndef HITLS_CRYPTO_RSA_EMSA_PSS
364         #define HITLS_CRYPTO_RSA_EMSA_PSS
365     #endif
366     #ifndef HITLS_CRYPTO_RSA_BLINDING
367         #define HITLS_CRYPTO_RSA_BLINDING
368     #endif
369 #endif
370 
371 #ifdef HITLS_CRYPTO_RSA_GEN
372     #ifndef HITLS_CRYPTO_BN_RAND
373         #define HITLS_CRYPTO_BN_RAND
374     #endif
375     #ifndef HITLS_CRYPTO_BN_PRIME
376         #define HITLS_CRYPTO_BN_PRIME
377     #endif
378 #endif
379 
380 #ifdef HITLS_CRYPTO_RSA_BLINDING
381     #ifndef HITLS_CRYPTO_BN_RAND
382         #define HITLS_CRYPTO_BN_RAND
383     #endif
384 #endif
385 
386 #ifdef HITLS_CRYPTO_RSA_PAD
387     #ifndef HITLS_CRYPTO_RSA_EMSA_PSS
388         #define HITLS_CRYPTO_RSA_EMSA_PSS
389     #endif
390     #ifndef HITLS_CRYPTO_RSA_EMSA_PKCSV15
391         #define HITLS_CRYPTO_RSA_EMSA_PKCSV15
392     #endif
393     #ifndef HITLS_CRYPTO_RSAES_OAEP
394         #define HITLS_CRYPTO_RSAES_OAEP
395     #endif
396     #ifndef HITLS_CRYPTO_RSAES_PKCSV15
397         #define HITLS_CRYPTO_RSAES_PKCSV15
398     #endif
399     #ifndef HITLS_CRYPTO_RSAES_PKCSV15_TLS
400         #define HITLS_CRYPTO_RSAES_PKCSV15_TLS
401     #endif
402     #ifndef HITLS_CRYPTO_RSA_NO_PAD
403         #define HITLS_CRYPTO_RSA_NO_PAD
404     #endif
405 #endif
406 
407 #if defined(HITLS_CRYPTO_RSA_EMSA_PSS) || defined(HITLS_CRYPTO_RSA_EMSA_PKCSV15) || \
408     defined(HITLS_CRYPTO_RSAES_OAEP) || defined(HITLS_CRYPTO_RSAES_PKCSV15) || \
409     defined(HITLS_CRYPTO_RSAES_PKCSV15_TLS) || defined(HITLS_CRYPTO_RSA_NO_PAD)
410     #ifndef HITLS_CRYPTO_RSA_PAD
411         #define HITLS_CRYPTO_RSA_PAD
412     #endif
413 #endif
414 
415 #if defined(HITLS_CRYPTO_RSA_SIGN) || defined(HITLS_CRYPTO_RSA_VERIFY) || \
416     defined(HITLS_CRYPTO_RSA_ENCRYPT) || defined(HITLS_CRYPTO_RSA_DECRYPT) || \
417     defined(HITLS_CRYPTO_RSA_BLINDING) || defined(HITLS_CRYPTO_RSA_PAD) || defined(HITLS_CRYPTO_RSA_GEN)
418     #ifndef HITLS_CRYPTO_RSA
419         #define HITLS_CRYPTO_RSA
420     #endif
421 
422     // rsa common dependency
423     #ifndef HITLS_CRYPTO_BN_BASIC
424         #define HITLS_CRYPTO_BN_BASIC
425     #endif
426 #endif
427 
428 #ifdef HITLS_CRYPTO_CURVE25519
429     #ifndef HITLS_CRYPTO_X25519
430         #define HITLS_CRYPTO_X25519
431     #endif
432     #ifndef HITLS_CRYPTO_ED25519
433         #define HITLS_CRYPTO_ED25519
434     #endif
435 #endif
436 
437 #if defined(HITLS_CRYPTO_ED25519) && !defined(HITLS_CRYPTO_SHA512)
438     #define HITLS_CRYPTO_SHA512
439 #endif
440 
441 #if defined(HITLS_CRYPTO_X25519) || defined(HITLS_CRYPTO_ED25519)
442     #ifndef HITLS_CRYPTO_CURVE25519
443         #define HITLS_CRYPTO_CURVE25519
444     #endif
445 #endif
446 
447 #ifdef HITLS_CRYPTO_SM2
448     #ifndef HITLS_CRYPTO_SM2_SIGN
449         #define HITLS_CRYPTO_SM2_SIGN
450     #endif
451     #ifndef HITLS_CRYPTO_SM2_CRYPT
452         #define HITLS_CRYPTO_SM2_CRYPT
453     #endif
454     #ifndef HITLS_CRYPTO_SM2_EXCH
455         #define HITLS_CRYPTO_SM2_EXCH
456     #endif
457 #endif
458 
459 #if defined(HITLS_CRYPTO_SM2_SIGN) || defined(HITLS_CRYPTO_SM2_CRYPT) || defined(HITLS_CRYPTO_SM2_EXCH)
460     #ifndef HITLS_CRYPTO_SM2
461         #define HITLS_CRYPTO_SM2
462     #endif
463 #endif
464 
465 #ifdef HITLS_CRYPTO_SM2
466     #ifndef HITLS_CRYPTO_SM3
467         #define HITLS_CRYPTO_SM3
468     #endif
469     #ifndef HITLS_CRYPTO_CURVE_SM2
470         #define HITLS_CRYPTO_CURVE_SM2
471     #endif
472 #endif
473 
474 #ifdef HITLS_CRYPTO_SLH_DSA
475     #ifndef HITLS_CRYPTO_SHA2
476         #define HITLS_CRYPTO_SHA2
477     #endif
478     #ifndef HITLS_CRYPTO_SHA3
479         #define HITLS_CRYPTO_SHA3
480     #endif
481     #ifndef HITLS_BSL_OBJ
482         #define HITLS_BSL_OBJ
483     #endif
484     #ifndef HITLS_CRYPTO_EAL
485         #define HITLS_CRYPTO_EAL
486     #endif
487     #ifndef HITLS_CRYPTO_HMAC
488         #define HITLS_CRYPTO_HMAC
489     #endif
490     #ifndef HITLS_CRYPTO_SHA256
491         #define HITLS_CRYPTO_SHA256
492     #endif
493     #ifndef HITLS_CRYPTO_SHA512
494         #define HITLS_CRYPTO_SHA512
495     #endif
496 #endif
497 
498 #if defined(HITLS_CRYPTO_MLDSA) || defined(HITLS_CRYPTO_ELGAMAL)
499     #ifndef HITLS_CRYPTO_BN_RAND
500         #define HITLS_CRYPTO_BN_RAND
501     #endif
502     #ifndef HITLS_CRYPTO_BN_PRIME
503         #define HITLS_CRYPTO_BN_PRIME
504     #endif
505 #endif
506 
507 #ifdef HITLS_CRYPTO_HYBRIDKEM
508     #ifndef HITLS_CRYPTO_MLKEM
509         #define HITLS_CRYPTO_MLKEM
510     #endif
511 #endif
512 
513 #ifdef HITLS_CRYPTO_MLKEM
514     #ifndef HITLS_CRYPTO_SHA3
515         #define HITLS_CRYPTO_SHA3
516     #endif
517     #ifndef HITLS_CRYPTO_KEM
518         #define HITLS_CRYPTO_KEM
519     #endif
520 #endif
521 
522 #ifdef HITLS_CRYPTO_MLDSA
523     #ifndef HITLS_CRYPTO_SHA3
524         #define HITLS_CRYPTO_SHA3
525     #endif
526     #ifndef HITLS_BSL_OBJ
527         #define HITLS_BSL_OBJ
528     #endif
529 #endif
530 
531 #ifdef HITLS_CRYPTO_ECC
532     #ifndef HITLS_CRYPTO_CURVE_NISTP224
533         #define HITLS_CRYPTO_CURVE_NISTP224
534     #endif
535     #ifndef HITLS_CRYPTO_CURVE_NISTP256
536         #define HITLS_CRYPTO_CURVE_NISTP256
537     #endif
538     #ifndef HITLS_CRYPTO_CURVE_NISTP384
539         #define HITLS_CRYPTO_CURVE_NISTP384
540     #endif
541     #ifndef HITLS_CRYPTO_CURVE_NISTP521
542         #define HITLS_CRYPTO_CURVE_NISTP521
543     #endif
544     #ifndef HITLS_CRYPTO_CURVE_BP256R1
545         #define HITLS_CRYPTO_CURVE_BP256R1
546     #endif
547     #ifndef HITLS_CRYPTO_CURVE_BP384R1
548         #define HITLS_CRYPTO_CURVE_BP384R1
549     #endif
550     #ifndef HITLS_CRYPTO_CURVE_BP512R1
551         #define HITLS_CRYPTO_CURVE_BP512R1
552     #endif
553     #ifndef HITLS_CRYPTO_CURVE_SM2
554         #define HITLS_CRYPTO_CURVE_SM2
555     #endif
556 #endif
557 
558 #if defined(HITLS_CRYPTO_CURVE_NISTP224) || defined(HITLS_CRYPTO_CURVE_NISTP256) || \
559     defined(HITLS_CRYPTO_CURVE_NISTP384) || defined(HITLS_CRYPTO_CURVE_NISTP521) || \
560     defined(HITLS_CRYPTO_CURVE_BP256R1) || defined(HITLS_CRYPTO_CURVE_BP384R1) || \
561     defined(HITLS_CRYPTO_CURVE_BP512R1) || defined(HITLS_CRYPTO_CURVE_SM2)
562     #ifndef HITLS_CRYPTO_ECC
563         #define HITLS_CRYPTO_ECC
564     #endif
565     #ifndef HITLS_CRYPTO_BN_RAND
566         #define HITLS_CRYPTO_BN_RAND
567     #endif
568 #endif
569 
570 #if defined(HITLS_CRYPTO_NIST_ECC_ACCELERATE) && !defined(HITLS_CRYPTO_ECC)
571     #undef HITLS_CRYPTO_NIST_ECC_ACCELERATE // Avoid turning on unnecessary functions.
572 #endif
573 
574 #if defined(HITLS_CRYPTO_NIST_ECC_ACCELERATE) && defined(__SIZEOF_INT128__) && (__SIZEOF_INT128__ == 16)
575     #define HITLS_CRYPTO_NIST_USE_ACCEL
576 #endif
577 
578 #if defined(HITLS_CRYPTO_DSA) || defined(HITLS_CRYPTO_CURVE25519) || defined(HITLS_CRYPTO_RSA) || \
579     defined(HITLS_CRYPTO_DH) || defined(HITLS_CRYPTO_ECDSA) || defined(HITLS_CRYPTO_ECDH) ||      \
580     defined(HITLS_CRYPTO_SM2) || defined(HITLS_CRYPTO_PAILLIER)|| defined(HITLS_CRYPTO_ELGAMAL) || \
581     defined(HITLS_CRYPTO_MLDSA) || defined(HITLS_CRYPTO_MLKEM) || defined(HITLS_CRYPTO_HYBRIDKEM) || \
582     defined(HITLS_CRYPTO_SLH_DSA)
583     #ifndef HITLS_CRYPTO_PKEY
584         #define HITLS_CRYPTO_PKEY
585     #endif
586     #ifndef HITLS_BSL_PARAMS
587         #define HITLS_BSL_PARAMS
588     #endif
589 #endif
590 
591 /* bn */
592 #ifdef HITLS_CRYPTO_BN
593     #ifndef HITLS_CRYPTO_BN_BASIC
594         #define HITLS_CRYPTO_BN_BASIC
595     #endif
596     #ifndef HITLS_CRYPTO_BN_RAND
597         #define HITLS_CRYPTO_BN_RAND
598     #endif
599     #ifndef HITLS_CRYPTO_EAL_BN
600         #define HITLS_CRYPTO_EAL_BN
601     #endif
602     #ifndef HITLS_CRYPTO_BN_PRIME
603         #define HITLS_CRYPTO_BN_PRIME
604     #endif
605     #ifndef HITLS_CRYPTO_BN_STR_CONV
606         #define HITLS_CRYPTO_BN_STR_CONV
607     #endif
608     #ifndef HITLS_CRYPTO_BN_CB
609         #define HITLS_CRYPTO_BN_CB
610     #endif
611     #ifndef HITLS_CRYPTO_BN_PRIME_RFC3526
612         #define HITLS_CRYPTO_BN_PRIME_RFC3526
613     #endif
614 #endif
615 
616 #if defined(HITLS_CRYPTO_BN_PRIME) && !defined(HITLS_CRYPTO_BN_RAND)
617     #define HITLS_CRYPTO_BN_RAND
618 #endif
619 
620 #if defined(HITLS_CRYPTO_BN_RAND) || defined(HITLS_CRYPTO_EAL_BN) || defined(HITLS_CRYPTO_BN_PRIME) || \
621     defined(HITLS_CRYPTO_BN_STR_CONV) || defined(HITLS_CRYPTO_BN_CB) || defined(HITLS_CRYPTO_BN_PRIME_RFC3526) || \
622     defined(HITLS_CRYPTO_BN_BASIC)
623     #ifndef HITLS_CRYPTO_BN
624         #define HITLS_CRYPTO_BN
625     #endif
626 #endif
627 
628 /* MD */
629 #ifdef HITLS_CRYPTO_MD
630     #ifndef HITLS_CRYPTO_MD5
631         #define HITLS_CRYPTO_MD5
632     #endif
633     #ifndef HITLS_CRYPTO_SM3
634         #define HITLS_CRYPTO_SM3
635     #endif
636     #ifndef HITLS_CRYPTO_SHA1
637         #define HITLS_CRYPTO_SHA1
638     #endif
639     #ifndef HITLS_CRYPTO_SHA2
640         #define HITLS_CRYPTO_SHA2
641     #endif
642     #ifndef HITLS_CRYPTO_SHA3
643         #define HITLS_CRYPTO_SHA3
644     #endif
645 #endif
646 
647 #ifdef HITLS_CRYPTO_SHA2
648     #ifndef HITLS_CRYPTO_SHA224
649         #define HITLS_CRYPTO_SHA224
650     #endif
651     #ifndef HITLS_CRYPTO_SHA256
652         #define HITLS_CRYPTO_SHA256
653     #endif
654     #ifndef HITLS_CRYPTO_SHA384
655         #define HITLS_CRYPTO_SHA384
656     #endif
657     #ifndef HITLS_CRYPTO_SHA512
658         #define HITLS_CRYPTO_SHA512
659     #endif
660 #endif
661 
662 #if defined(HITLS_CRYPTO_SHA224) && !defined(HITLS_CRYPTO_SHA256)
663     #define HITLS_CRYPTO_SHA256
664 #endif
665 #if defined(HITLS_CRYPTO_SHA384) && !defined(HITLS_CRYPTO_SHA512)
666     #define HITLS_CRYPTO_SHA512
667 #endif
668 
669 #if defined(HITLS_CRYPTO_SHA256) || defined(HITLS_CRYPTO_SHA512)
670     #ifndef HITLS_CRYPTO_SHA2
671         #define HITLS_CRYPTO_SHA2
672     #endif
673 #endif
674 
675 #if defined(HITLS_CRYPTO_MD5) || defined(HITLS_CRYPTO_SM3) || defined(HITLS_CRYPTO_SHA1) || \
676     defined(HITLS_CRYPTO_SHA2) || defined(HITLS_CRYPTO_SHA3)
677     #ifndef HITLS_CRYPTO_MD
678         #define HITLS_CRYPTO_MD
679     #endif
680 #endif
681 
682 /* Assembling Macros */
683 #if defined(HITLS_CRYPTO_AES_X8664) || defined(HITLS_CRYPTO_AES_ARMV8)
684 #define HITLS_CRYPTO_AES_ASM
685 #endif
686 
687 #if defined(HITLS_CRYPTO_CHACHA20_X8664) || defined(HITLS_CRYPTO_CHACHA20_ARMV8)
688 #define HITLS_CRYPTO_CHACHA20_ASM
689 #endif
690 
691 #if defined(HITLS_CRYPTO_SM4_X8664) || defined(HITLS_CRYPTO_SM4_ARMV8)
692 #define HITLS_CRYPTO_SM4_ASM
693 #endif
694 
695 #if defined(HITLS_CRYPTO_MODES_X8664)
696 #define HITLS_CRYPTO_CHACHA20POLY1305_X8664
697 #define HITLS_CRYPTO_GCM_X8664
698 #endif
699 
700 #if defined(HITLS_CRYPTO_MODES_ARMV8)
701 #define HITLS_CRYPTO_CHACHA20POLY1305_ARMV8
702 #define HITLS_CRYPTO_GCM_ARMV8
703 #endif
704 
705 #if defined(HITLS_CRYPTO_MODES_X8664) || defined(HITLS_CRYPTO_MODES_ARMV8)
706 #define HITLS_CRYPTO_MODES_ASM
707 #endif
708 
709 #if defined(HITLS_CRYPTO_CHACHA20POLY1305_X8664) || defined(HITLS_CRYPTO_CHACHA20POLY1305_ARMV8)
710 #define HITLS_CRYPTO_CHACHA20POLY1305_ASM
711 #endif
712 
713 #if defined(HITLS_CRYPTO_GCM_X8664) || defined(HITLS_CRYPTO_GCM_ARMV8)
714 #define HITLS_CRYPTO_GCM_ASM
715 #endif
716 
717 #if defined(HITLS_CRYPTO_MD5_X8664)
718 #define HITLS_CRYPTO_MD5_ASM
719 #endif
720 
721 #if defined(HITLS_CRYPTO_SHA1_X8664) || defined(HITLS_CRYPTO_SHA1_ARMV8)
722 #define HITLS_CRYPTO_SHA1_ASM
723 #endif
724 
725 #if defined(HITLS_CRYPTO_SHA224_X8664) || defined(HITLS_CRYPTO_SHA224_ARMV8) || \
726     defined(HITLS_CRYPTO_SHA256_X8664) || defined(HITLS_CRYPTO_SHA256_ARMV8) || \
727     defined(HITLS_CRYPTO_SHA384_X8664) || defined(HITLS_CRYPTO_SHA384_ARMV8) || \
728     defined(HITLS_CRYPTO_SHA512_X8664) || defined(HITLS_CRYPTO_SHA512_ARMV8) || \
729     defined(HITLS_CRYPTO_SHA2_X8664) || defined(HITLS_CRYPTO_SHA2_ARMV8)
730 #define HITLS_CRYPTO_SHA2_ASM
731 #endif
732 
733 #if defined(HITLS_CRYPTO_SM3_X8664) || defined(HITLS_CRYPTO_SM3_ARMV8)
734 #define HITLS_CRYPTO_SM3_ASM
735 #endif
736 
737 #if defined(HITLS_CRYPTO_BN_X8664) || defined(HITLS_CRYPTO_BN_ARMV8)
738 #define HITLS_CRYPTO_BN_ASM
739 #endif
740 
741 #if defined(HITLS_CRYPTO_ECC_X8664)
742 #define HITLS_CRYPTO_CURVE_NISTP256_X8664
743 #define HITLS_CRYPTO_CURVE_SM2_X8664
744 #endif
745 
746 #if defined(HITLS_CRYPTO_ECC_ARMV8)
747 #define HITLS_CRYPTO_CURVE_NISTP256_ARMV8
748 #define HITLS_CRYPTO_CURVE_SM2_ARMV8
749 #endif
750 
751 #if defined(HITLS_CRYPTO_ECC_X8664) || defined(HITLS_CRYPTO_ECC_ARMV8)
752 #define HITLS_CRYPTO_ECC_ASM
753 #endif
754 
755 #if defined(HITLS_CRYPTO_CURVE_NISTP256_X8664) || defined(HITLS_CRYPTO_CURVE_NISTP256_ARMV8)
756 #define HITLS_CRYPTO_CURVE_NISTP256_ASM
757 #endif
758 
759 #if defined(HITLS_CRYPTO_CURVE_NISTP384_X8664) || defined(HITLS_CRYPTO_CURVE_NISTP384_ARMV8)
760 #define HITLS_CRYPTO_CURVE_NISTP384_ASM
761 #endif
762 
763 #if defined(HITLS_CRYPTO_CURVE_SM2_X8664) || defined(HITLS_CRYPTO_CURVE_SM2_ARMV8)
764 #define HITLS_CRYPTO_CURVE_SM2_ASM
765 #endif
766 
767 #if (!defined(HITLS_SIXTY_FOUR_BITS))
768     #if (((defined(HITLS_CRYPTO_CURVE_NISTP224) || defined(HITLS_CRYPTO_CURVE_NISTP521)) && \
769             !defined(HITLS_CRYPTO_NIST_USE_ACCEL)) || \
770         defined(HITLS_CRYPTO_CURVE_NISTP384) || \
771         (defined(HITLS_CRYPTO_CURVE_NISTP256) && !defined(HITLS_CRYPTO_CURVE_NISTP256_ASM) &&  \
772             (!defined(HITLS_CRYPTO_NIST_ECC_ACCELERATE)) && (!defined(HITLS_CRYPTO_NIST_USE_ACCEL))) || \
773         (defined(HITLS_CRYPTO_CURVE_SM2) && !defined(HITLS_CRYPTO_CURVE_SM2_ASM)))
774             #define HITLS_CRYPTO_CURVE_MONT_NIST
775     #endif
776 #endif
777 
778 #if defined(HITLS_CRYPTO_CURVE_BP256R1) || defined(HITLS_CRYPTO_CURVE_BP384R1) || \
779     defined(HITLS_CRYPTO_CURVE_BP512R1)
780         #define HITLS_CRYPTO_CURVE_MONT_PRIME
781 #endif
782 
783 #if defined(HITLS_CRYPTO_CURVE_MONT_PRIME) || defined(HITLS_CRYPTO_CURVE_MONT_NIST)
784 #define HITLS_CRYPTO_CURVE_MONT
785 #endif
786 
787 #endif /* HITLS_CONFIG_LAYER_CRYPTO_H */
788