/src/openssl/providers/defltprov.c
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | /*  | 
2  |  |  * Copyright 2019-2025 The OpenSSL Project Authors. All Rights Reserved.  | 
3  |  |  *  | 
4  |  |  * Licensed under the Apache License 2.0 (the "License").  You may not use  | 
5  |  |  * this file except in compliance with the License.  You can obtain a copy  | 
6  |  |  * in the file LICENSE in the source distribution or at  | 
7  |  |  * https://www.openssl.org/source/license.html  | 
8  |  |  */  | 
9  |  |  | 
10  |  | #include <string.h>  | 
11  |  | #include <stdio.h>  | 
12  |  | #include <openssl/opensslconf.h>  | 
13  |  | #include <openssl/core.h>  | 
14  |  | #include <openssl/core_dispatch.h>  | 
15  |  | #include <openssl/core_names.h>  | 
16  |  | #include <openssl/params.h>  | 
17  |  | #include "prov/bio.h"  | 
18  |  | #include "prov/provider_ctx.h"  | 
19  |  | #include "prov/providercommon.h"  | 
20  |  | #include "prov/implementations.h"  | 
21  |  | #include "prov/names.h"  | 
22  |  | #include "prov/provider_util.h"  | 
23  |  | #include "prov/seeding.h"  | 
24  |  | #include "internal/nelem.h"  | 
25  |  |  | 
26  |  | /*  | 
27  |  |  * Forward declarations to ensure that interface functions are correctly  | 
28  |  |  * defined.  | 
29  |  |  */  | 
30  |  | static OSSL_FUNC_provider_gettable_params_fn deflt_gettable_params;  | 
31  |  | static OSSL_FUNC_provider_get_params_fn deflt_get_params;  | 
32  |  | static OSSL_FUNC_provider_query_operation_fn deflt_query;  | 
33  |  |  | 
34  |  | #define ALGC(NAMES, FUNC, CHECK) { { NAMES, "provider=default", FUNC }, CHECK } | 
35  |  | #define ALG(NAMES, FUNC) ALGC(NAMES, FUNC, NULL)  | 
36  |  |  | 
37  |  | /* Functions provided by the core */  | 
38  |  | static OSSL_FUNC_core_gettable_params_fn *c_gettable_params = NULL;  | 
39  |  | static OSSL_FUNC_core_get_params_fn *c_get_params = NULL;  | 
40  |  |  | 
41  |  | /* Parameters we provide to the core */  | 
42  |  | static const OSSL_PARAM deflt_param_types[] = { | 
43  |  |     OSSL_PARAM_DEFN(OSSL_PROV_PARAM_NAME, OSSL_PARAM_UTF8_PTR, NULL, 0),  | 
44  |  |     OSSL_PARAM_DEFN(OSSL_PROV_PARAM_VERSION, OSSL_PARAM_UTF8_PTR, NULL, 0),  | 
45  |  |     OSSL_PARAM_DEFN(OSSL_PROV_PARAM_BUILDINFO, OSSL_PARAM_UTF8_PTR, NULL, 0),  | 
46  |  |     OSSL_PARAM_DEFN(OSSL_PROV_PARAM_STATUS, OSSL_PARAM_INTEGER, NULL, 0),  | 
47  |  |     OSSL_PARAM_END  | 
48  |  | };  | 
49  |  |  | 
50  |  | static const OSSL_PARAM *deflt_gettable_params(void *provctx)  | 
51  | 0  | { | 
52  | 0  |     return deflt_param_types;  | 
53  | 0  | }  | 
54  |  |  | 
55  |  | static int deflt_get_params(void *provctx, OSSL_PARAM params[])  | 
56  | 0  | { | 
57  | 0  |     OSSL_PARAM *p;  | 
58  |  | 
  | 
59  | 0  |     p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME);  | 
60  | 0  |     if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, "OpenSSL Default Provider"))  | 
61  | 0  |         return 0;  | 
62  | 0  |     p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_VERSION);  | 
63  | 0  |     if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_VERSION_STR))  | 
64  | 0  |         return 0;  | 
65  | 0  |     p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_BUILDINFO);  | 
66  | 0  |     if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, OPENSSL_FULL_VERSION_STR))  | 
67  | 0  |         return 0;  | 
68  | 0  |     p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS);  | 
69  | 0  |     if (p != NULL && !OSSL_PARAM_set_int(p, ossl_prov_is_running()))  | 
70  | 0  |         return 0;  | 
71  | 0  |     return 1;  | 
72  | 0  | }  | 
73  |  |  | 
74  |  | /*  | 
75  |  |  * For the algorithm names, we use the following formula for our primary  | 
76  |  |  * names:  | 
77  |  |  *  | 
78  |  |  *     ALGNAME[VERSION?][-SUBNAME[VERSION?]?][-SIZE?][-MODE?]  | 
79  |  |  *  | 
80  |  |  *     VERSION is only present if there are multiple versions of  | 
81  |  |  *     an alg (MD2, MD4, MD5).  It may be omitted if there is only  | 
82  |  |  *     one version (if a subsequent version is released in the future,  | 
83  |  |  *     we can always change the canonical name, and add the old name  | 
84  |  |  *     as an alias).  | 
85  |  |  *  | 
86  |  |  *     SUBNAME may be present where we are combining multiple  | 
87  |  |  *     algorithms together, e.g. MD5-SHA1.  | 
88  |  |  *  | 
89  |  |  *     SIZE is only present if multiple versions of an algorithm exist  | 
90  |  |  *     with different sizes (e.g. AES-128-CBC, AES-256-CBC)  | 
91  |  |  *  | 
92  |  |  *     MODE is only present where applicable.  | 
93  |  |  *  | 
94  |  |  * We add diverse other names where applicable, such as the names that  | 
95  |  |  * NIST uses, or that are used for ASN.1 OBJECT IDENTIFIERs, or names  | 
96  |  |  * we have used historically.  | 
97  |  |  *  | 
98  |  |  * Algorithm names are case insensitive, but we use all caps in our "canonical"  | 
99  |  |  * names for consistency.  | 
100  |  |  */  | 
101  |  | static const OSSL_ALGORITHM deflt_digests[] = { | 
102  |  |     /* Our primary name:NIST name[:our older names] */  | 
103  |  |     { PROV_NAMES_SHA1, "provider=default", ossl_sha1_functions }, | 
104  |  |     { PROV_NAMES_SHA2_224, "provider=default", ossl_sha224_functions }, | 
105  |  |     { PROV_NAMES_SHA2_256, "provider=default", ossl_sha256_functions }, | 
106  |  |     { PROV_NAMES_SHA2_256_192, "provider=default", ossl_sha256_192_functions }, | 
107  |  |     { PROV_NAMES_SHA2_384, "provider=default", ossl_sha384_functions }, | 
108  |  |     { PROV_NAMES_SHA2_512, "provider=default", ossl_sha512_functions }, | 
109  |  |     { PROV_NAMES_SHA2_512_224, "provider=default", ossl_sha512_224_functions }, | 
110  |  |     { PROV_NAMES_SHA2_512_256, "provider=default", ossl_sha512_256_functions }, | 
111  |  |  | 
112  |  |     /* We agree with NIST here, so one name only */  | 
113  |  |     { PROV_NAMES_SHA3_224, "provider=default", ossl_sha3_224_functions }, | 
114  |  |     { PROV_NAMES_SHA3_256, "provider=default", ossl_sha3_256_functions }, | 
115  |  |     { PROV_NAMES_SHA3_384, "provider=default", ossl_sha3_384_functions }, | 
116  |  |     { PROV_NAMES_SHA3_512, "provider=default", ossl_sha3_512_functions }, | 
117  |  |  | 
118  |  |     { PROV_NAMES_KECCAK_224, "provider=default", ossl_keccak_224_functions }, | 
119  |  |     { PROV_NAMES_KECCAK_256, "provider=default", ossl_keccak_256_functions }, | 
120  |  |     { PROV_NAMES_KECCAK_384, "provider=default", ossl_keccak_384_functions }, | 
121  |  |     { PROV_NAMES_KECCAK_512, "provider=default", ossl_keccak_512_functions }, | 
122  |  |  | 
123  |  |     /*  | 
124  |  |      * KECCAK-KMAC-128 and KECCAK-KMAC-256 as hashes are mostly useful for  | 
125  |  |      * the KMAC-128 and KMAC-256.  | 
126  |  |      */  | 
127  |  |     { PROV_NAMES_KECCAK_KMAC_128, "provider=default", | 
128  |  |       ossl_keccak_kmac_128_functions },  | 
129  |  |     { PROV_NAMES_KECCAK_KMAC_256, "provider=default", | 
130  |  |       ossl_keccak_kmac_256_functions },  | 
131  |  |  | 
132  |  |     /* Our primary name:NIST name */  | 
133  |  |     { PROV_NAMES_SHAKE_128, "provider=default", ossl_shake_128_functions }, | 
134  |  |     { PROV_NAMES_SHAKE_256, "provider=default", ossl_shake_256_functions }, | 
135  |  |  | 
136  |  | #ifndef OPENSSL_NO_BLAKE2  | 
137  |  |     /*  | 
138  |  |      * https://blake2.net/ doesn't specify size variants,  | 
139  |  |      * but mentions that Bouncy Castle uses the names  | 
140  |  |      * BLAKE2b-160, BLAKE2b-256, BLAKE2b-384, and BLAKE2b-512  | 
141  |  |      * If we assume that "2b" and "2s" are versions, that pattern  | 
142  |  |      * fits with ours.  We also add our historical names.  | 
143  |  |      */  | 
144  |  |     { PROV_NAMES_BLAKE2S_256, "provider=default", ossl_blake2s256_functions }, | 
145  |  |     { PROV_NAMES_BLAKE2B_512, "provider=default", ossl_blake2b512_functions }, | 
146  |  | #endif /* OPENSSL_NO_BLAKE2 */  | 
147  |  |  | 
148  |  | #ifndef OPENSSL_NO_SM3  | 
149  |  |     { PROV_NAMES_SM3, "provider=default", ossl_sm3_functions }, | 
150  |  | #endif /* OPENSSL_NO_SM3 */  | 
151  |  |  | 
152  |  | #ifndef OPENSSL_NO_MD5  | 
153  |  |     { PROV_NAMES_MD5, "provider=default", ossl_md5_functions }, | 
154  |  |     { PROV_NAMES_MD5_SHA1, "provider=default", ossl_md5_sha1_functions }, | 
155  |  | #endif /* OPENSSL_NO_MD5 */  | 
156  |  |  | 
157  |  | #ifndef OPENSSL_NO_RMD160  | 
158  |  |     { PROV_NAMES_RIPEMD_160, "provider=default", ossl_ripemd160_functions }, | 
159  |  | #endif /* OPENSSL_NO_RMD160 */  | 
160  |  |  | 
161  |  |     { PROV_NAMES_NULL, "provider=default", ossl_nullmd_functions }, | 
162  |  |     { NULL, NULL, NULL } | 
163  |  | };  | 
164  |  |  | 
165  |  | static const OSSL_ALGORITHM_CAPABLE deflt_ciphers[] = { | 
166  |  |     ALG(PROV_NAMES_NULL, ossl_null_functions),  | 
167  |  |     ALG(PROV_NAMES_AES_256_ECB, ossl_aes256ecb_functions),  | 
168  |  |     ALG(PROV_NAMES_AES_192_ECB, ossl_aes192ecb_functions),  | 
169  |  |     ALG(PROV_NAMES_AES_128_ECB, ossl_aes128ecb_functions),  | 
170  |  |     ALG(PROV_NAMES_AES_256_CBC, ossl_aes256cbc_functions),  | 
171  |  |     ALG(PROV_NAMES_AES_192_CBC, ossl_aes192cbc_functions),  | 
172  |  |     ALG(PROV_NAMES_AES_128_CBC, ossl_aes128cbc_functions),  | 
173  |  |     ALG(PROV_NAMES_AES_128_CBC_CTS, ossl_aes128cbc_cts_functions),  | 
174  |  |     ALG(PROV_NAMES_AES_192_CBC_CTS, ossl_aes192cbc_cts_functions),  | 
175  |  |     ALG(PROV_NAMES_AES_256_CBC_CTS, ossl_aes256cbc_cts_functions),  | 
176  |  |     ALG(PROV_NAMES_AES_256_OFB, ossl_aes256ofb_functions),  | 
177  |  |     ALG(PROV_NAMES_AES_192_OFB, ossl_aes192ofb_functions),  | 
178  |  |     ALG(PROV_NAMES_AES_128_OFB, ossl_aes128ofb_functions),  | 
179  |  |     ALG(PROV_NAMES_AES_256_CFB, ossl_aes256cfb_functions),  | 
180  |  |     ALG(PROV_NAMES_AES_192_CFB, ossl_aes192cfb_functions),  | 
181  |  |     ALG(PROV_NAMES_AES_128_CFB, ossl_aes128cfb_functions),  | 
182  |  |     ALG(PROV_NAMES_AES_256_CFB1, ossl_aes256cfb1_functions),  | 
183  |  |     ALG(PROV_NAMES_AES_192_CFB1, ossl_aes192cfb1_functions),  | 
184  |  |     ALG(PROV_NAMES_AES_128_CFB1, ossl_aes128cfb1_functions),  | 
185  |  |     ALG(PROV_NAMES_AES_256_CFB8, ossl_aes256cfb8_functions),  | 
186  |  |     ALG(PROV_NAMES_AES_192_CFB8, ossl_aes192cfb8_functions),  | 
187  |  |     ALG(PROV_NAMES_AES_128_CFB8, ossl_aes128cfb8_functions),  | 
188  |  |     ALG(PROV_NAMES_AES_256_CTR, ossl_aes256ctr_functions),  | 
189  |  |     ALG(PROV_NAMES_AES_192_CTR, ossl_aes192ctr_functions),  | 
190  |  |     ALG(PROV_NAMES_AES_128_CTR, ossl_aes128ctr_functions),  | 
191  |  |     ALG(PROV_NAMES_AES_256_XTS, ossl_aes256xts_functions),  | 
192  |  |     ALG(PROV_NAMES_AES_128_XTS, ossl_aes128xts_functions),  | 
193  |  | #ifndef OPENSSL_NO_OCB  | 
194  |  |     ALG(PROV_NAMES_AES_256_OCB, ossl_aes256ocb_functions),  | 
195  |  |     ALG(PROV_NAMES_AES_192_OCB, ossl_aes192ocb_functions),  | 
196  |  |     ALG(PROV_NAMES_AES_128_OCB, ossl_aes128ocb_functions),  | 
197  |  | #endif /* OPENSSL_NO_OCB */  | 
198  |  | #ifndef OPENSSL_NO_SIV  | 
199  |  |     ALG(PROV_NAMES_AES_128_SIV, ossl_aes128siv_functions),  | 
200  |  |     ALG(PROV_NAMES_AES_192_SIV, ossl_aes192siv_functions),  | 
201  |  |     ALG(PROV_NAMES_AES_256_SIV, ossl_aes256siv_functions),  | 
202  |  |     ALG(PROV_NAMES_AES_128_GCM_SIV, ossl_aes128gcm_siv_functions),  | 
203  |  |     ALG(PROV_NAMES_AES_192_GCM_SIV, ossl_aes192gcm_siv_functions),  | 
204  |  |     ALG(PROV_NAMES_AES_256_GCM_SIV, ossl_aes256gcm_siv_functions),  | 
205  |  | #endif /* OPENSSL_NO_SIV */  | 
206  |  |     ALG(PROV_NAMES_AES_256_GCM, ossl_aes256gcm_functions),  | 
207  |  |     ALG(PROV_NAMES_AES_192_GCM, ossl_aes192gcm_functions),  | 
208  |  |     ALG(PROV_NAMES_AES_128_GCM, ossl_aes128gcm_functions),  | 
209  |  |     ALG(PROV_NAMES_AES_256_CCM, ossl_aes256ccm_functions),  | 
210  |  |     ALG(PROV_NAMES_AES_192_CCM, ossl_aes192ccm_functions),  | 
211  |  |     ALG(PROV_NAMES_AES_128_CCM, ossl_aes128ccm_functions),  | 
212  |  |     ALG(PROV_NAMES_AES_256_WRAP, ossl_aes256wrap_functions),  | 
213  |  |     ALG(PROV_NAMES_AES_192_WRAP, ossl_aes192wrap_functions),  | 
214  |  |     ALG(PROV_NAMES_AES_128_WRAP, ossl_aes128wrap_functions),  | 
215  |  |     ALG(PROV_NAMES_AES_256_WRAP_PAD, ossl_aes256wrappad_functions),  | 
216  |  |     ALG(PROV_NAMES_AES_192_WRAP_PAD, ossl_aes192wrappad_functions),  | 
217  |  |     ALG(PROV_NAMES_AES_128_WRAP_PAD, ossl_aes128wrappad_functions),  | 
218  |  |     ALG(PROV_NAMES_AES_256_WRAP_INV, ossl_aes256wrapinv_functions),  | 
219  |  |     ALG(PROV_NAMES_AES_192_WRAP_INV, ossl_aes192wrapinv_functions),  | 
220  |  |     ALG(PROV_NAMES_AES_128_WRAP_INV, ossl_aes128wrapinv_functions),  | 
221  |  |     ALG(PROV_NAMES_AES_256_WRAP_PAD_INV, ossl_aes256wrappadinv_functions),  | 
222  |  |     ALG(PROV_NAMES_AES_192_WRAP_PAD_INV, ossl_aes192wrappadinv_functions),  | 
223  |  |     ALG(PROV_NAMES_AES_128_WRAP_PAD_INV, ossl_aes128wrappadinv_functions),  | 
224  |  |     ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA1, ossl_aes128cbc_hmac_sha1_functions,  | 
225  |  |          ossl_cipher_capable_aes_cbc_hmac_sha1),  | 
226  |  |     ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA1, ossl_aes256cbc_hmac_sha1_functions,  | 
227  |  |          ossl_cipher_capable_aes_cbc_hmac_sha1),  | 
228  |  |     ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA256, ossl_aes128cbc_hmac_sha256_functions,  | 
229  |  |          ossl_cipher_capable_aes_cbc_hmac_sha256),  | 
230  |  |     ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA256, ossl_aes256cbc_hmac_sha256_functions,  | 
231  |  |          ossl_cipher_capable_aes_cbc_hmac_sha256),  | 
232  |  |     ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA1_ETM, ossl_aes128cbc_hmac_sha1_etm_functions,  | 
233  |  |          ossl_cipher_capable_aes_cbc_hmac_sha1_etm),  | 
234  |  |     ALGC(PROV_NAMES_AES_192_CBC_HMAC_SHA1_ETM, ossl_aes192cbc_hmac_sha1_etm_functions,  | 
235  |  |          ossl_cipher_capable_aes_cbc_hmac_sha1_etm),  | 
236  |  |     ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA1_ETM, ossl_aes256cbc_hmac_sha1_etm_functions,  | 
237  |  |          ossl_cipher_capable_aes_cbc_hmac_sha1_etm),  | 
238  |  |     ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA256_ETM, ossl_aes128cbc_hmac_sha256_etm_functions,  | 
239  |  |          ossl_cipher_capable_aes_cbc_hmac_sha256_etm),  | 
240  |  |     ALGC(PROV_NAMES_AES_192_CBC_HMAC_SHA256_ETM, ossl_aes192cbc_hmac_sha256_etm_functions,  | 
241  |  |          ossl_cipher_capable_aes_cbc_hmac_sha256_etm),  | 
242  |  |     ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA256_ETM, ossl_aes256cbc_hmac_sha256_etm_functions,  | 
243  |  |          ossl_cipher_capable_aes_cbc_hmac_sha256_etm),  | 
244  |  |     ALGC(PROV_NAMES_AES_128_CBC_HMAC_SHA512_ETM, ossl_aes128cbc_hmac_sha512_etm_functions,  | 
245  |  |          ossl_cipher_capable_aes_cbc_hmac_sha512_etm),  | 
246  |  |     ALGC(PROV_NAMES_AES_192_CBC_HMAC_SHA512_ETM, ossl_aes192cbc_hmac_sha512_etm_functions,  | 
247  |  |          ossl_cipher_capable_aes_cbc_hmac_sha512_etm),  | 
248  |  |     ALGC(PROV_NAMES_AES_256_CBC_HMAC_SHA512_ETM, ossl_aes256cbc_hmac_sha512_etm_functions,  | 
249  |  |          ossl_cipher_capable_aes_cbc_hmac_sha512_etm),  | 
250  |  | #ifndef OPENSSL_NO_ARIA  | 
251  |  |     ALG(PROV_NAMES_ARIA_256_GCM, ossl_aria256gcm_functions),  | 
252  |  |     ALG(PROV_NAMES_ARIA_192_GCM, ossl_aria192gcm_functions),  | 
253  |  |     ALG(PROV_NAMES_ARIA_128_GCM, ossl_aria128gcm_functions),  | 
254  |  |     ALG(PROV_NAMES_ARIA_256_CCM, ossl_aria256ccm_functions),  | 
255  |  |     ALG(PROV_NAMES_ARIA_192_CCM, ossl_aria192ccm_functions),  | 
256  |  |     ALG(PROV_NAMES_ARIA_128_CCM, ossl_aria128ccm_functions),  | 
257  |  |     ALG(PROV_NAMES_ARIA_256_ECB, ossl_aria256ecb_functions),  | 
258  |  |     ALG(PROV_NAMES_ARIA_192_ECB, ossl_aria192ecb_functions),  | 
259  |  |     ALG(PROV_NAMES_ARIA_128_ECB, ossl_aria128ecb_functions),  | 
260  |  |     ALG(PROV_NAMES_ARIA_256_CBC, ossl_aria256cbc_functions),  | 
261  |  |     ALG(PROV_NAMES_ARIA_192_CBC, ossl_aria192cbc_functions),  | 
262  |  |     ALG(PROV_NAMES_ARIA_128_CBC, ossl_aria128cbc_functions),  | 
263  |  |     ALG(PROV_NAMES_ARIA_256_OFB, ossl_aria256ofb_functions),  | 
264  |  |     ALG(PROV_NAMES_ARIA_192_OFB, ossl_aria192ofb_functions),  | 
265  |  |     ALG(PROV_NAMES_ARIA_128_OFB, ossl_aria128ofb_functions),  | 
266  |  |     ALG(PROV_NAMES_ARIA_256_CFB, ossl_aria256cfb_functions),  | 
267  |  |     ALG(PROV_NAMES_ARIA_192_CFB, ossl_aria192cfb_functions),  | 
268  |  |     ALG(PROV_NAMES_ARIA_128_CFB, ossl_aria128cfb_functions),  | 
269  |  |     ALG(PROV_NAMES_ARIA_256_CFB1, ossl_aria256cfb1_functions),  | 
270  |  |     ALG(PROV_NAMES_ARIA_192_CFB1, ossl_aria192cfb1_functions),  | 
271  |  |     ALG(PROV_NAMES_ARIA_128_CFB1, ossl_aria128cfb1_functions),  | 
272  |  |     ALG(PROV_NAMES_ARIA_256_CFB8, ossl_aria256cfb8_functions),  | 
273  |  |     ALG(PROV_NAMES_ARIA_192_CFB8, ossl_aria192cfb8_functions),  | 
274  |  |     ALG(PROV_NAMES_ARIA_128_CFB8, ossl_aria128cfb8_functions),  | 
275  |  |     ALG(PROV_NAMES_ARIA_256_CTR, ossl_aria256ctr_functions),  | 
276  |  |     ALG(PROV_NAMES_ARIA_192_CTR, ossl_aria192ctr_functions),  | 
277  |  |     ALG(PROV_NAMES_ARIA_128_CTR, ossl_aria128ctr_functions),  | 
278  |  | #endif /* OPENSSL_NO_ARIA */  | 
279  |  | #ifndef OPENSSL_NO_CAMELLIA  | 
280  |  |     ALG(PROV_NAMES_CAMELLIA_256_ECB, ossl_camellia256ecb_functions),  | 
281  |  |     ALG(PROV_NAMES_CAMELLIA_192_ECB, ossl_camellia192ecb_functions),  | 
282  |  |     ALG(PROV_NAMES_CAMELLIA_128_ECB, ossl_camellia128ecb_functions),  | 
283  |  |     ALG(PROV_NAMES_CAMELLIA_256_CBC, ossl_camellia256cbc_functions),  | 
284  |  |     ALG(PROV_NAMES_CAMELLIA_192_CBC, ossl_camellia192cbc_functions),  | 
285  |  |     ALG(PROV_NAMES_CAMELLIA_128_CBC, ossl_camellia128cbc_functions),  | 
286  |  |     ALG(PROV_NAMES_CAMELLIA_128_CBC_CTS, ossl_camellia128cbc_cts_functions),  | 
287  |  |     ALG(PROV_NAMES_CAMELLIA_192_CBC_CTS, ossl_camellia192cbc_cts_functions),  | 
288  |  |     ALG(PROV_NAMES_CAMELLIA_256_CBC_CTS, ossl_camellia256cbc_cts_functions),  | 
289  |  |     ALG(PROV_NAMES_CAMELLIA_256_OFB, ossl_camellia256ofb_functions),  | 
290  |  |     ALG(PROV_NAMES_CAMELLIA_192_OFB, ossl_camellia192ofb_functions),  | 
291  |  |     ALG(PROV_NAMES_CAMELLIA_128_OFB, ossl_camellia128ofb_functions),  | 
292  |  |     ALG(PROV_NAMES_CAMELLIA_256_CFB, ossl_camellia256cfb_functions),  | 
293  |  |     ALG(PROV_NAMES_CAMELLIA_192_CFB, ossl_camellia192cfb_functions),  | 
294  |  |     ALG(PROV_NAMES_CAMELLIA_128_CFB, ossl_camellia128cfb_functions),  | 
295  |  |     ALG(PROV_NAMES_CAMELLIA_256_CFB1, ossl_camellia256cfb1_functions),  | 
296  |  |     ALG(PROV_NAMES_CAMELLIA_192_CFB1, ossl_camellia192cfb1_functions),  | 
297  |  |     ALG(PROV_NAMES_CAMELLIA_128_CFB1, ossl_camellia128cfb1_functions),  | 
298  |  |     ALG(PROV_NAMES_CAMELLIA_256_CFB8, ossl_camellia256cfb8_functions),  | 
299  |  |     ALG(PROV_NAMES_CAMELLIA_192_CFB8, ossl_camellia192cfb8_functions),  | 
300  |  |     ALG(PROV_NAMES_CAMELLIA_128_CFB8, ossl_camellia128cfb8_functions),  | 
301  |  |     ALG(PROV_NAMES_CAMELLIA_256_CTR, ossl_camellia256ctr_functions),  | 
302  |  |     ALG(PROV_NAMES_CAMELLIA_192_CTR, ossl_camellia192ctr_functions),  | 
303  |  |     ALG(PROV_NAMES_CAMELLIA_128_CTR, ossl_camellia128ctr_functions),  | 
304  |  | #endif /* OPENSSL_NO_CAMELLIA */  | 
305  |  | #ifndef OPENSSL_NO_DES  | 
306  |  |     ALG(PROV_NAMES_DES_EDE3_ECB, ossl_tdes_ede3_ecb_functions),  | 
307  |  |     ALG(PROV_NAMES_DES_EDE3_CBC, ossl_tdes_ede3_cbc_functions),  | 
308  |  |     ALG(PROV_NAMES_DES_EDE3_OFB, ossl_tdes_ede3_ofb_functions),  | 
309  |  |     ALG(PROV_NAMES_DES_EDE3_CFB, ossl_tdes_ede3_cfb_functions),  | 
310  |  |     ALG(PROV_NAMES_DES_EDE3_CFB8, ossl_tdes_ede3_cfb8_functions),  | 
311  |  |     ALG(PROV_NAMES_DES_EDE3_CFB1, ossl_tdes_ede3_cfb1_functions),  | 
312  |  |     ALG(PROV_NAMES_DES3_WRAP, ossl_tdes_wrap_cbc_functions),  | 
313  |  |     ALG(PROV_NAMES_DES_EDE_ECB, ossl_tdes_ede2_ecb_functions),  | 
314  |  |     ALG(PROV_NAMES_DES_EDE_CBC, ossl_tdes_ede2_cbc_functions),  | 
315  |  |     ALG(PROV_NAMES_DES_EDE_OFB, ossl_tdes_ede2_ofb_functions),  | 
316  |  |     ALG(PROV_NAMES_DES_EDE_CFB, ossl_tdes_ede2_cfb_functions),  | 
317  |  | #endif /* OPENSSL_NO_DES */  | 
318  |  | #ifndef OPENSSL_NO_SM4  | 
319  |  |     ALG(PROV_NAMES_SM4_GCM, ossl_sm4128gcm_functions),  | 
320  |  |     ALG(PROV_NAMES_SM4_CCM, ossl_sm4128ccm_functions),  | 
321  |  |     ALG(PROV_NAMES_SM4_ECB, ossl_sm4128ecb_functions),  | 
322  |  |     ALG(PROV_NAMES_SM4_CBC, ossl_sm4128cbc_functions),  | 
323  |  |     ALG(PROV_NAMES_SM4_CTR, ossl_sm4128ctr_functions),  | 
324  |  |     ALG(PROV_NAMES_SM4_OFB, ossl_sm4128ofb128_functions),  | 
325  |  |     ALG(PROV_NAMES_SM4_CFB, ossl_sm4128cfb128_functions),  | 
326  |  |     ALG(PROV_NAMES_SM4_XTS, ossl_sm4128xts_functions),  | 
327  |  | #endif /* OPENSSL_NO_SM4 */  | 
328  |  | #ifndef OPENSSL_NO_CHACHA  | 
329  |  |     ALG(PROV_NAMES_ChaCha20, ossl_chacha20_functions),  | 
330  |  | # ifndef OPENSSL_NO_POLY1305  | 
331  |  |     ALG(PROV_NAMES_ChaCha20_Poly1305, ossl_chacha20_ossl_poly1305_functions),  | 
332  |  | # endif /* OPENSSL_NO_POLY1305 */  | 
333  |  | #endif /* OPENSSL_NO_CHACHA */  | 
334  |  |     { { NULL, NULL, NULL }, NULL } | 
335  |  | };  | 
336  |  | static OSSL_ALGORITHM exported_ciphers[OSSL_NELEM(deflt_ciphers)];  | 
337  |  |  | 
338  |  | static const OSSL_ALGORITHM deflt_macs[] = { | 
339  |  | #ifndef OPENSSL_NO_BLAKE2  | 
340  |  |     { PROV_NAMES_BLAKE2BMAC, "provider=default", ossl_blake2bmac_functions }, | 
341  |  |     { PROV_NAMES_BLAKE2SMAC, "provider=default", ossl_blake2smac_functions }, | 
342  |  | #endif  | 
343  |  | #ifndef OPENSSL_NO_CMAC  | 
344  |  |     { PROV_NAMES_CMAC, "provider=default", ossl_cmac_functions }, | 
345  |  | #endif  | 
346  |  |     { PROV_NAMES_GMAC, "provider=default", ossl_gmac_functions }, | 
347  |  |     { PROV_NAMES_HMAC, "provider=default", ossl_hmac_functions }, | 
348  |  |     { PROV_NAMES_KMAC_128, "provider=default", ossl_kmac128_functions }, | 
349  |  |     { PROV_NAMES_KMAC_256, "provider=default", ossl_kmac256_functions }, | 
350  |  | #ifndef OPENSSL_NO_SIPHASH  | 
351  |  |     { PROV_NAMES_SIPHASH, "provider=default", ossl_siphash_functions }, | 
352  |  | #endif  | 
353  |  | #ifndef OPENSSL_NO_POLY1305  | 
354  |  |     { PROV_NAMES_POLY1305, "provider=default", ossl_poly1305_functions }, | 
355  |  | #endif  | 
356  |  |     { NULL, NULL, NULL } | 
357  |  | };  | 
358  |  |  | 
359  |  | static const OSSL_ALGORITHM deflt_kdfs[] = { | 
360  |  |     { PROV_NAMES_HKDF, "provider=default", ossl_kdf_hkdf_functions }, | 
361  |  |     { PROV_NAMES_TLS1_3_KDF, "provider=default", | 
362  |  |       ossl_kdf_tls1_3_kdf_functions },  | 
363  |  |     { PROV_NAMES_SSKDF, "provider=default", ossl_kdf_sskdf_functions }, | 
364  |  |     { PROV_NAMES_PBKDF2, "provider=default", ossl_kdf_pbkdf2_functions }, | 
365  |  |     { PROV_NAMES_PKCS12KDF, "provider=default", ossl_kdf_pkcs12_functions }, | 
366  |  |     { PROV_NAMES_SSHKDF, "provider=default", ossl_kdf_sshkdf_functions }, | 
367  |  |     { PROV_NAMES_X963KDF, "provider=default", ossl_kdf_x963_kdf_functions }, | 
368  |  |     { PROV_NAMES_TLS1_PRF, "provider=default", ossl_kdf_tls1_prf_functions }, | 
369  |  |     { PROV_NAMES_KBKDF, "provider=default", ossl_kdf_kbkdf_functions }, | 
370  |  |     { PROV_NAMES_X942KDF_ASN1, "provider=default", ossl_kdf_x942_kdf_functions }, | 
371  |  | #ifndef OPENSSL_NO_SCRYPT  | 
372  |  |     { PROV_NAMES_SCRYPT, "provider=default", ossl_kdf_scrypt_functions }, | 
373  |  | #endif  | 
374  |  |     { PROV_NAMES_KRB5KDF, "provider=default", ossl_kdf_krb5kdf_functions }, | 
375  |  |     { PROV_NAMES_HMAC_DRBG_KDF, "provider=default", | 
376  |  |       ossl_kdf_hmac_drbg_functions },  | 
377  |  | #ifndef OPENSSL_NO_ARGON2  | 
378  |  |     { PROV_NAMES_ARGON2I, "provider=default", ossl_kdf_argon2i_functions }, | 
379  |  |     { PROV_NAMES_ARGON2D, "provider=default", ossl_kdf_argon2d_functions }, | 
380  |  |     { PROV_NAMES_ARGON2ID, "provider=default", ossl_kdf_argon2id_functions }, | 
381  |  | #endif  | 
382  |  |     { NULL, NULL, NULL } | 
383  |  | };  | 
384  |  |  | 
385  |  | static const OSSL_ALGORITHM deflt_keyexch[] = { | 
386  |  | #ifndef OPENSSL_NO_DH  | 
387  |  |     { PROV_NAMES_DH, "provider=default", ossl_dh_keyexch_functions }, | 
388  |  | #endif  | 
389  |  | #ifndef OPENSSL_NO_EC  | 
390  |  |     { PROV_NAMES_ECDH, "provider=default", ossl_ecdh_keyexch_functions }, | 
391  |  | # ifndef OPENSSL_NO_ECX  | 
392  |  |     { PROV_NAMES_X25519, "provider=default", ossl_x25519_keyexch_functions }, | 
393  |  |     { PROV_NAMES_X448, "provider=default", ossl_x448_keyexch_functions }, | 
394  |  | # endif  | 
395  |  | #endif  | 
396  |  |     { PROV_NAMES_TLS1_PRF, "provider=default", ossl_kdf_tls1_prf_keyexch_functions }, | 
397  |  |     { PROV_NAMES_HKDF, "provider=default", ossl_kdf_hkdf_keyexch_functions }, | 
398  |  |     { PROV_NAMES_SCRYPT, "provider=default", | 
399  |  |       ossl_kdf_scrypt_keyexch_functions },  | 
400  |  |     { NULL, NULL, NULL } | 
401  |  | };  | 
402  |  |  | 
403  |  | static const OSSL_ALGORITHM deflt_rands[] = { | 
404  |  |     { PROV_NAMES_CTR_DRBG, "provider=default", ossl_drbg_ctr_functions }, | 
405  |  |     { PROV_NAMES_HASH_DRBG, "provider=default", ossl_drbg_hash_functions }, | 
406  |  |     { PROV_NAMES_HMAC_DRBG, "provider=default", ossl_drbg_ossl_hmac_functions }, | 
407  |  |     { PROV_NAMES_SEED_SRC, "provider=default", ossl_seed_src_functions }, | 
408  |  | #ifndef OPENSSL_NO_JITTER  | 
409  |  |     { PROV_NAMES_JITTER, "provider=default", ossl_jitter_functions }, | 
410  |  | #endif  | 
411  |  |     { PROV_NAMES_TEST_RAND, "provider=default", ossl_test_rng_functions }, | 
412  |  |     { NULL, NULL, NULL } | 
413  |  | };  | 
414  |  |  | 
415  |  | static const OSSL_ALGORITHM deflt_signature[] = { | 
416  |  | #ifndef OPENSSL_NO_DSA  | 
417  |  |     { PROV_NAMES_DSA, "provider=default", ossl_dsa_signature_functions }, | 
418  |  |     { PROV_NAMES_DSA_SHA1, "provider=default", ossl_dsa_sha1_signature_functions }, | 
419  |  |     { PROV_NAMES_DSA_SHA224, "provider=default", ossl_dsa_sha224_signature_functions }, | 
420  |  |     { PROV_NAMES_DSA_SHA256, "provider=default", ossl_dsa_sha256_signature_functions }, | 
421  |  |     { PROV_NAMES_DSA_SHA384, "provider=default", ossl_dsa_sha384_signature_functions }, | 
422  |  |     { PROV_NAMES_DSA_SHA512, "provider=default", ossl_dsa_sha512_signature_functions }, | 
423  |  |     { PROV_NAMES_DSA_SHA3_224, "provider=default", ossl_dsa_sha3_224_signature_functions }, | 
424  |  |     { PROV_NAMES_DSA_SHA3_256, "provider=default", ossl_dsa_sha3_256_signature_functions }, | 
425  |  |     { PROV_NAMES_DSA_SHA3_384, "provider=default", ossl_dsa_sha3_384_signature_functions }, | 
426  |  |     { PROV_NAMES_DSA_SHA3_512, "provider=default", ossl_dsa_sha3_512_signature_functions }, | 
427  |  | #endif  | 
428  |  |     { PROV_NAMES_RSA, "provider=default", ossl_rsa_signature_functions }, | 
429  |  | #if !defined(OPENSSL_NO_RMD160) && !defined(FIPS_MODULE)  | 
430  |  |     { PROV_NAMES_RSA_RIPEMD160, "provider=default", ossl_rsa_ripemd160_signature_functions }, | 
431  |  | #endif  | 
432  |  |     { PROV_NAMES_RSA_SHA1, "provider=default", ossl_rsa_sha1_signature_functions }, | 
433  |  |     { PROV_NAMES_RSA_SHA224, "provider=default", ossl_rsa_sha224_signature_functions }, | 
434  |  |     { PROV_NAMES_RSA_SHA256, "provider=default", ossl_rsa_sha256_signature_functions }, | 
435  |  |     { PROV_NAMES_RSA_SHA384, "provider=default", ossl_rsa_sha384_signature_functions }, | 
436  |  |     { PROV_NAMES_RSA_SHA512, "provider=default", ossl_rsa_sha512_signature_functions }, | 
437  |  |     { PROV_NAMES_RSA_SHA512_224, "provider=default", ossl_rsa_sha512_224_signature_functions }, | 
438  |  |     { PROV_NAMES_RSA_SHA512_256, "provider=default", ossl_rsa_sha512_256_signature_functions }, | 
439  |  |     { PROV_NAMES_RSA_SHA3_224, "provider=default", ossl_rsa_sha3_224_signature_functions }, | 
440  |  |     { PROV_NAMES_RSA_SHA3_256, "provider=default", ossl_rsa_sha3_256_signature_functions }, | 
441  |  |     { PROV_NAMES_RSA_SHA3_384, "provider=default", ossl_rsa_sha3_384_signature_functions }, | 
442  |  |     { PROV_NAMES_RSA_SHA3_512, "provider=default", ossl_rsa_sha3_512_signature_functions }, | 
443  |  | #ifndef OPENSSL_NO_SM3  | 
444  |  |     { PROV_NAMES_RSA_SM3, "provider=default", ossl_rsa_sm3_signature_functions }, | 
445  |  | #endif  | 
446  |  | #ifndef OPENSSL_NO_EC  | 
447  |  | # ifndef OPENSSL_NO_ECX  | 
448  |  |     { PROV_NAMES_ED25519, "provider=default", ossl_ed25519_signature_functions }, | 
449  |  |     { PROV_NAMES_ED25519ph, "provider=default", ossl_ed25519ph_signature_functions }, | 
450  |  |     { PROV_NAMES_ED25519ctx, "provider=default", ossl_ed25519ctx_signature_functions }, | 
451  |  |     { PROV_NAMES_ED448, "provider=default", ossl_ed448_signature_functions }, | 
452  |  |     { PROV_NAMES_ED448ph, "provider=default", ossl_ed448ph_signature_functions }, | 
453  |  | # endif  | 
454  |  |     { PROV_NAMES_ECDSA, "provider=default", ossl_ecdsa_signature_functions }, | 
455  |  |     { PROV_NAMES_ECDSA_SHA1, "provider=default", ossl_ecdsa_sha1_signature_functions }, | 
456  |  |     { PROV_NAMES_ECDSA_SHA224, "provider=default", ossl_ecdsa_sha224_signature_functions }, | 
457  |  |     { PROV_NAMES_ECDSA_SHA256, "provider=default", ossl_ecdsa_sha256_signature_functions }, | 
458  |  |     { PROV_NAMES_ECDSA_SHA384, "provider=default", ossl_ecdsa_sha384_signature_functions }, | 
459  |  |     { PROV_NAMES_ECDSA_SHA512, "provider=default", ossl_ecdsa_sha512_signature_functions }, | 
460  |  |     { PROV_NAMES_ECDSA_SHA3_224, "provider=default", ossl_ecdsa_sha3_224_signature_functions }, | 
461  |  |     { PROV_NAMES_ECDSA_SHA3_256, "provider=default", ossl_ecdsa_sha3_256_signature_functions }, | 
462  |  |     { PROV_NAMES_ECDSA_SHA3_384, "provider=default", ossl_ecdsa_sha3_384_signature_functions }, | 
463  |  |     { PROV_NAMES_ECDSA_SHA3_512, "provider=default", ossl_ecdsa_sha3_512_signature_functions }, | 
464  |  | # ifndef OPENSSL_NO_SM2  | 
465  |  |     { PROV_NAMES_SM2, "provider=default", ossl_sm2_signature_functions }, | 
466  |  | # endif  | 
467  |  | #endif  | 
468  |  | #ifndef OPENSSL_NO_ML_DSA  | 
469  |  |     { PROV_NAMES_ML_DSA_44, "provider=default", ossl_ml_dsa_44_signature_functions }, | 
470  |  |     { PROV_NAMES_ML_DSA_65, "provider=default", ossl_ml_dsa_65_signature_functions }, | 
471  |  |     { PROV_NAMES_ML_DSA_87, "provider=default", ossl_ml_dsa_87_signature_functions }, | 
472  |  | #endif  | 
473  |  |     { PROV_NAMES_HMAC, "provider=default", ossl_mac_legacy_hmac_signature_functions }, | 
474  |  |     { PROV_NAMES_SIPHASH, "provider=default", | 
475  |  |       ossl_mac_legacy_siphash_signature_functions },  | 
476  |  | #ifndef OPENSSL_NO_POLY1305  | 
477  |  |     { PROV_NAMES_POLY1305, "provider=default", | 
478  |  |       ossl_mac_legacy_poly1305_signature_functions },  | 
479  |  | #endif  | 
480  |  | #ifndef OPENSSL_NO_CMAC  | 
481  |  |     { PROV_NAMES_CMAC, "provider=default", ossl_mac_legacy_cmac_signature_functions }, | 
482  |  | #endif  | 
483  |  | #ifndef OPENSSL_NO_SLH_DSA  | 
484  |  |     { PROV_NAMES_SLH_DSA_SHA2_128S, "provider=default", | 
485  |  |       ossl_slh_dsa_sha2_128s_signature_functions, PROV_DESCS_SLH_DSA_SHA2_128S },  | 
486  |  |     { PROV_NAMES_SLH_DSA_SHA2_128F, "provider=default", | 
487  |  |       ossl_slh_dsa_sha2_128f_signature_functions, PROV_DESCS_SLH_DSA_SHA2_128F },  | 
488  |  |     { PROV_NAMES_SLH_DSA_SHA2_192S, "provider=default", | 
489  |  |       ossl_slh_dsa_sha2_192s_signature_functions, PROV_DESCS_SLH_DSA_SHA2_192S },  | 
490  |  |     { PROV_NAMES_SLH_DSA_SHA2_192F, "provider=default", | 
491  |  |       ossl_slh_dsa_sha2_192f_signature_functions, PROV_DESCS_SLH_DSA_SHA2_192F },  | 
492  |  |     { PROV_NAMES_SLH_DSA_SHA2_256S, "provider=default", | 
493  |  |       ossl_slh_dsa_sha2_256s_signature_functions, PROV_DESCS_SLH_DSA_SHA2_256S },  | 
494  |  |     { PROV_NAMES_SLH_DSA_SHA2_256F, "provider=default", | 
495  |  |       ossl_slh_dsa_sha2_256f_signature_functions, PROV_DESCS_SLH_DSA_SHA2_256F },  | 
496  |  |     { PROV_NAMES_SLH_DSA_SHAKE_128S, "provider=default", | 
497  |  |       ossl_slh_dsa_shake_128s_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_128S },  | 
498  |  |     { PROV_NAMES_SLH_DSA_SHAKE_128F, "provider=default", | 
499  |  |       ossl_slh_dsa_shake_128f_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_128F },  | 
500  |  |     { PROV_NAMES_SLH_DSA_SHAKE_192S, "provider=default", | 
501  |  |       ossl_slh_dsa_shake_192s_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_192S },  | 
502  |  |     { PROV_NAMES_SLH_DSA_SHAKE_192F, "provider=default", | 
503  |  |       ossl_slh_dsa_shake_192f_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_192F },  | 
504  |  |     { PROV_NAMES_SLH_DSA_SHAKE_256S, "provider=default", | 
505  |  |       ossl_slh_dsa_shake_256s_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_256S },  | 
506  |  |     { PROV_NAMES_SLH_DSA_SHAKE_256F, "provider=default", | 
507  |  |       ossl_slh_dsa_shake_256f_signature_functions, PROV_DESCS_SLH_DSA_SHAKE_256F },  | 
508  |  | #endif /* OPENSSL_NO_SLH_DSA */  | 
509  |  |     { NULL, NULL, NULL } | 
510  |  | };  | 
511  |  |  | 
512  |  | static const OSSL_ALGORITHM deflt_asym_cipher[] = { | 
513  |  |     { PROV_NAMES_RSA, "provider=default", ossl_rsa_asym_cipher_functions }, | 
514  |  | #ifndef OPENSSL_NO_SM2  | 
515  |  |     { PROV_NAMES_SM2, "provider=default", ossl_sm2_asym_cipher_functions }, | 
516  |  | #endif  | 
517  |  |     { NULL, NULL, NULL } | 
518  |  | };  | 
519  |  |  | 
520  |  | static const OSSL_ALGORITHM deflt_asym_kem[] = { | 
521  |  |     { PROV_NAMES_RSA, "provider=default", ossl_rsa_asym_kem_functions }, | 
522  |  | #ifndef OPENSSL_NO_EC  | 
523  |  | # ifndef OPENSSL_NO_ECX  | 
524  |  |     { PROV_NAMES_X25519, "provider=default", ossl_ecx_asym_kem_functions }, | 
525  |  |     { PROV_NAMES_X448, "provider=default", ossl_ecx_asym_kem_functions }, | 
526  |  | # endif  | 
527  |  |     { PROV_NAMES_EC, "provider=default", ossl_ec_asym_kem_functions }, | 
528  |  | #endif  | 
529  |  | #ifndef OPENSSL_NO_ML_KEM  | 
530  |  |     { PROV_NAMES_ML_KEM_512, "provider=default", ossl_ml_kem_asym_kem_functions }, | 
531  |  |     { PROV_NAMES_ML_KEM_768, "provider=default", ossl_ml_kem_asym_kem_functions }, | 
532  |  |     { PROV_NAMES_ML_KEM_1024, "provider=default", ossl_ml_kem_asym_kem_functions }, | 
533  |  | # if !defined(OPENSSL_NO_ECX)  | 
534  |  |     { "X25519MLKEM768", "provider=default", ossl_mlx_kem_asym_kem_functions }, | 
535  |  |     { "X448MLKEM1024", "provider=default", ossl_mlx_kem_asym_kem_functions }, | 
536  |  | # endif  | 
537  |  | # if !defined(OPENSSL_NO_EC)  | 
538  |  |     { "SecP256r1MLKEM768", "provider=default", ossl_mlx_kem_asym_kem_functions }, | 
539  |  |     { "SecP384r1MLKEM1024", "provider=default", ossl_mlx_kem_asym_kem_functions }, | 
540  |  | # endif  | 
541  |  | #endif  | 
542  |  |     { NULL, NULL, NULL } | 
543  |  | };  | 
544  |  |  | 
545  |  | static const OSSL_ALGORITHM deflt_keymgmt[] = { | 
546  |  | #ifndef OPENSSL_NO_DH  | 
547  |  |     { PROV_NAMES_DH, "provider=default", ossl_dh_keymgmt_functions, | 
548  |  |       PROV_DESCS_DH },  | 
549  |  |     { PROV_NAMES_DHX, "provider=default", ossl_dhx_keymgmt_functions, | 
550  |  |       PROV_DESCS_DHX },  | 
551  |  | #endif  | 
552  |  | #ifndef OPENSSL_NO_DSA  | 
553  |  |     { PROV_NAMES_DSA, "provider=default", ossl_dsa_keymgmt_functions, | 
554  |  |       PROV_DESCS_DSA},  | 
555  |  | #endif  | 
556  |  |     { PROV_NAMES_RSA, "provider=default", ossl_rsa_keymgmt_functions, | 
557  |  |       PROV_DESCS_RSA },  | 
558  |  |     { PROV_NAMES_RSA_PSS, "provider=default", ossl_rsapss_keymgmt_functions, | 
559  |  |       PROV_DESCS_RSA_PSS },  | 
560  |  | #ifndef OPENSSL_NO_EC  | 
561  |  |     { PROV_NAMES_EC, "provider=default", ossl_ec_keymgmt_functions, | 
562  |  |       PROV_DESCS_EC },  | 
563  |  | # ifndef OPENSSL_NO_ECX  | 
564  |  |     { PROV_NAMES_X25519, "provider=default", ossl_x25519_keymgmt_functions, | 
565  |  |       PROV_DESCS_X25519 },  | 
566  |  |     { PROV_NAMES_X448, "provider=default", ossl_x448_keymgmt_functions, | 
567  |  |       PROV_DESCS_X448 },  | 
568  |  |     { PROV_NAMES_ED25519, "provider=default", ossl_ed25519_keymgmt_functions, | 
569  |  |       PROV_DESCS_ED25519 },  | 
570  |  |     { PROV_NAMES_ED448, "provider=default", ossl_ed448_keymgmt_functions, | 
571  |  |       PROV_DESCS_ED448 },  | 
572  |  | # endif  | 
573  |  | #endif  | 
574  |  | #ifndef OPENSSL_NO_ML_DSA  | 
575  |  |     { PROV_NAMES_ML_DSA_44, "provider=default", ossl_ml_dsa_44_keymgmt_functions, | 
576  |  |       PROV_DESCS_ML_DSA_44 },  | 
577  |  |     { PROV_NAMES_ML_DSA_65, "provider=default", ossl_ml_dsa_65_keymgmt_functions, | 
578  |  |       PROV_DESCS_ML_DSA_65 },  | 
579  |  |     { PROV_NAMES_ML_DSA_87, "provider=default", ossl_ml_dsa_87_keymgmt_functions, | 
580  |  |       PROV_DESCS_ML_DSA_87 },  | 
581  |  | #endif /* OPENSSL_NO_ML_DSA */  | 
582  |  |     { PROV_NAMES_TLS1_PRF, "provider=default", ossl_kdf_keymgmt_functions, | 
583  |  |       PROV_DESCS_TLS1_PRF_SIGN },  | 
584  |  |     { PROV_NAMES_HKDF, "provider=default", ossl_kdf_keymgmt_functions, | 
585  |  |       PROV_DESCS_HKDF_SIGN },  | 
586  |  |     { PROV_NAMES_SCRYPT, "provider=default", ossl_kdf_keymgmt_functions, | 
587  |  |       PROV_DESCS_SCRYPT_SIGN },  | 
588  |  |     { PROV_NAMES_HMAC, "provider=default", ossl_mac_legacy_keymgmt_functions, | 
589  |  |       PROV_DESCS_HMAC_SIGN },  | 
590  |  |     { PROV_NAMES_SIPHASH, "provider=default", ossl_mac_legacy_keymgmt_functions, | 
591  |  |       PROV_DESCS_SIPHASH_SIGN },  | 
592  |  | #ifndef OPENSSL_NO_POLY1305  | 
593  |  |     { PROV_NAMES_POLY1305, "provider=default", ossl_mac_legacy_keymgmt_functions, | 
594  |  |       PROV_DESCS_POLY1305_SIGN },  | 
595  |  | #endif  | 
596  |  | #ifndef OPENSSL_NO_CMAC  | 
597  |  |     { PROV_NAMES_CMAC, "provider=default", ossl_cmac_legacy_keymgmt_functions, | 
598  |  |       PROV_DESCS_CMAC_SIGN },  | 
599  |  | #endif  | 
600  |  | #ifndef OPENSSL_NO_SM2  | 
601  |  |     { PROV_NAMES_SM2, "provider=default", ossl_sm2_keymgmt_functions, | 
602  |  |       PROV_DESCS_SM2 },  | 
603  |  | #endif  | 
604  |  | #ifndef OPENSSL_NO_ML_KEM  | 
605  |  |     { PROV_NAMES_ML_KEM_512, "provider=default", ossl_ml_kem_512_keymgmt_functions, | 
606  |  |       PROV_DESCS_ML_KEM_512 },  | 
607  |  |     { PROV_NAMES_ML_KEM_768, "provider=default", ossl_ml_kem_768_keymgmt_functions, | 
608  |  |       PROV_DESCS_ML_KEM_768 },  | 
609  |  |     { PROV_NAMES_ML_KEM_1024, "provider=default", ossl_ml_kem_1024_keymgmt_functions, | 
610  |  |       PROV_DESCS_ML_KEM_1024 },  | 
611  |  | # if !defined(OPENSSL_NO_ECX)  | 
612  |  |     { PROV_NAMES_X25519MLKEM768, "provider=default", ossl_mlx_x25519_kem_kmgmt_functions, | 
613  |  |       PROV_DESCS_X25519MLKEM768 },  | 
614  |  |     { PROV_NAMES_X448MLKEM1024, "provider=default", ossl_mlx_x448_kem_kmgmt_functions, | 
615  |  |       PROV_DESCS_X448MLKEM1024 },  | 
616  |  | # endif  | 
617  |  | # if !defined(OPENSSL_NO_EC)  | 
618  |  |     { PROV_NAMES_SecP256r1MLKEM768, "provider=default", ossl_mlx_p256_kem_kmgmt_functions, | 
619  |  |       PROV_DESCS_SecP256r1MLKEM768 },  | 
620  |  |     { PROV_NAMES_SecP384r1MLKEM1024, "provider=default", ossl_mlx_p384_kem_kmgmt_functions, | 
621  |  |       PROV_DESCS_SecP384r1MLKEM1024 },  | 
622  |  | # endif  | 
623  |  | #endif  | 
624  |  | #ifndef OPENSSL_NO_SLH_DSA  | 
625  |  |     { PROV_NAMES_SLH_DSA_SHA2_128S, "provider=default", ossl_slh_dsa_sha2_128s_keymgmt_functions, | 
626  |  |       PROV_DESCS_SLH_DSA_SHA2_128S },  | 
627  |  |     { PROV_NAMES_SLH_DSA_SHA2_128F, "provider=default", ossl_slh_dsa_sha2_128f_keymgmt_functions, | 
628  |  |       PROV_DESCS_SLH_DSA_SHA2_128F },  | 
629  |  |     { PROV_NAMES_SLH_DSA_SHA2_192S, "provider=default", ossl_slh_dsa_sha2_192s_keymgmt_functions, | 
630  |  |       PROV_DESCS_SLH_DSA_SHA2_192S },  | 
631  |  |     { PROV_NAMES_SLH_DSA_SHA2_192F, "provider=default", ossl_slh_dsa_sha2_192f_keymgmt_functions, | 
632  |  |       PROV_DESCS_SLH_DSA_SHA2_192F },  | 
633  |  |     { PROV_NAMES_SLH_DSA_SHA2_256S, "provider=default", ossl_slh_dsa_sha2_256s_keymgmt_functions, | 
634  |  |       PROV_DESCS_SLH_DSA_SHA2_256S },  | 
635  |  |     { PROV_NAMES_SLH_DSA_SHA2_256F, "provider=default", ossl_slh_dsa_sha2_256f_keymgmt_functions, | 
636  |  |       PROV_DESCS_SLH_DSA_SHA2_256F },  | 
637  |  |     { PROV_NAMES_SLH_DSA_SHAKE_128S, "provider=default", ossl_slh_dsa_shake_128s_keymgmt_functions, | 
638  |  |       PROV_DESCS_SLH_DSA_SHAKE_128S },  | 
639  |  |     { PROV_NAMES_SLH_DSA_SHAKE_128F, "provider=default", ossl_slh_dsa_shake_128f_keymgmt_functions, | 
640  |  |       PROV_DESCS_SLH_DSA_SHAKE_128F },  | 
641  |  |     { PROV_NAMES_SLH_DSA_SHAKE_192S, "provider=default", ossl_slh_dsa_shake_192s_keymgmt_functions, | 
642  |  |       PROV_DESCS_SLH_DSA_SHAKE_192S },  | 
643  |  |     { PROV_NAMES_SLH_DSA_SHAKE_192F, "provider=default", ossl_slh_dsa_shake_192f_keymgmt_functions, | 
644  |  |       PROV_DESCS_SLH_DSA_SHAKE_192F },  | 
645  |  |     { PROV_NAMES_SLH_DSA_SHAKE_256S, "provider=default", ossl_slh_dsa_shake_256s_keymgmt_functions, | 
646  |  |       PROV_DESCS_SLH_DSA_SHAKE_256S },  | 
647  |  |     { PROV_NAMES_SLH_DSA_SHAKE_256F, "provider=default", ossl_slh_dsa_shake_256f_keymgmt_functions, | 
648  |  |       PROV_DESCS_SLH_DSA_SHAKE_256F },  | 
649  |  | #endif /* OPENSSL_NO_SLH_DSA */  | 
650  |  |     { NULL, NULL, NULL } | 
651  |  | };  | 
652  |  |  | 
653  |  | static const OSSL_ALGORITHM deflt_skeymgmt[] = { | 
654  |  |     { PROV_NAMES_AES, "provider=default", ossl_aes_skeymgmt_functions, | 
655  |  |       PROV_DESCS_AES },  | 
656  |  |     { PROV_NAMES_GENERIC, "provider=default", ossl_generic_skeymgmt_functions, | 
657  |  |       PROV_DESCS_GENERIC },  | 
658  |  |     { NULL, NULL, NULL } | 
659  |  | };  | 
660  |  |  | 
661  |  | static const OSSL_ALGORITHM deflt_encoder[] = { | 
662  |  | #define ENCODER_PROVIDER "default"  | 
663  |  | #include "encoders.inc"  | 
664  |  |     { NULL, NULL, NULL } | 
665  |  | #undef ENCODER_PROVIDER  | 
666  |  | };  | 
667  |  |  | 
668  |  | static const OSSL_ALGORITHM deflt_decoder[] = { | 
669  |  | #define DECODER_PROVIDER "default"  | 
670  |  | #include "decoders.inc"  | 
671  |  |     { NULL, NULL, NULL } | 
672  |  | #undef DECODER_PROVIDER  | 
673  |  | };  | 
674  |  |  | 
675  |  | static const OSSL_ALGORITHM deflt_store[] = { | 
676  |  | #define STORE(name, _fips, func_table)                           \  | 
677  |  |     { name, "provider=default,fips=" _fips, (func_table) }, | 
678  |  |  | 
679  |  | #include "stores.inc"  | 
680  |  |     { NULL, NULL, NULL } | 
681  |  | #undef STORE  | 
682  |  | };  | 
683  |  |  | 
684  |  | static const OSSL_ALGORITHM *deflt_query(void *provctx, int operation_id,  | 
685  |  |                                          int *no_cache)  | 
686  | 0  | { | 
687  | 0  |     *no_cache = 0;  | 
688  | 0  |     switch (operation_id) { | 
689  | 0  |     case OSSL_OP_DIGEST:  | 
690  | 0  |         return deflt_digests;  | 
691  | 0  |     case OSSL_OP_CIPHER:  | 
692  | 0  |         return exported_ciphers;  | 
693  | 0  |     case OSSL_OP_MAC:  | 
694  | 0  |         return deflt_macs;  | 
695  | 0  |     case OSSL_OP_KDF:  | 
696  | 0  |         return deflt_kdfs;  | 
697  | 0  |     case OSSL_OP_RAND:  | 
698  | 0  |         return deflt_rands;  | 
699  | 0  |     case OSSL_OP_KEYMGMT:  | 
700  | 0  |         return deflt_keymgmt;  | 
701  | 0  |     case OSSL_OP_KEYEXCH:  | 
702  | 0  |         return deflt_keyexch;  | 
703  | 0  |     case OSSL_OP_SIGNATURE:  | 
704  | 0  |         return deflt_signature;  | 
705  | 0  |     case OSSL_OP_ASYM_CIPHER:  | 
706  | 0  |         return deflt_asym_cipher;  | 
707  | 0  |     case OSSL_OP_KEM:  | 
708  | 0  |         return deflt_asym_kem;  | 
709  | 0  |     case OSSL_OP_ENCODER:  | 
710  | 0  |         return deflt_encoder;  | 
711  | 0  |     case OSSL_OP_DECODER:  | 
712  | 0  |         return deflt_decoder;  | 
713  | 0  |     case OSSL_OP_STORE:  | 
714  | 0  |         return deflt_store;  | 
715  | 0  |     case OSSL_OP_SKEYMGMT:  | 
716  | 0  |         return deflt_skeymgmt;  | 
717  | 0  |     }  | 
718  | 0  |     return NULL;  | 
719  | 0  | }  | 
720  |  |  | 
721  |  |  | 
722  |  | static void deflt_teardown(void *provctx)  | 
723  | 0  | { | 
724  | 0  |     BIO_meth_free(ossl_prov_ctx_get0_core_bio_method(provctx));  | 
725  | 0  |     ossl_prov_ctx_free(provctx);  | 
726  | 0  | }  | 
727  |  |  | 
728  |  | /* Functions we provide to the core */  | 
729  |  | static const OSSL_DISPATCH deflt_dispatch_table[] = { | 
730  |  |     { OSSL_FUNC_PROVIDER_TEARDOWN, (void (*)(void))deflt_teardown }, | 
731  |  |     { OSSL_FUNC_PROVIDER_GETTABLE_PARAMS, (void (*)(void))deflt_gettable_params }, | 
732  |  |     { OSSL_FUNC_PROVIDER_GET_PARAMS, (void (*)(void))deflt_get_params }, | 
733  |  |     { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (void (*)(void))deflt_query }, | 
734  |  |     { OSSL_FUNC_PROVIDER_GET_CAPABILITIES, | 
735  |  |       (void (*)(void))ossl_prov_get_capabilities },  | 
736  |  |     OSSL_DISPATCH_END  | 
737  |  | };  | 
738  |  |  | 
739  |  | OSSL_provider_init_fn ossl_default_provider_init;  | 
740  |  |  | 
741  |  | int ossl_default_provider_init(const OSSL_CORE_HANDLE *handle,  | 
742  |  |                                const OSSL_DISPATCH *in,  | 
743  |  |                                const OSSL_DISPATCH **out,  | 
744  |  |                                void **provctx)  | 
745  | 0  | { | 
746  | 0  |     OSSL_FUNC_core_get_libctx_fn *c_get_libctx = NULL;  | 
747  | 0  |     BIO_METHOD *corebiometh;  | 
748  |  | 
  | 
749  | 0  |     if (!ossl_prov_bio_from_dispatch(in)  | 
750  | 0  |             || !ossl_prov_seeding_from_dispatch(in))  | 
751  | 0  |         return 0;  | 
752  | 0  |     for (; in->function_id != 0; in++) { | 
753  | 0  |         switch (in->function_id) { | 
754  | 0  |         case OSSL_FUNC_CORE_GETTABLE_PARAMS:  | 
755  | 0  |             c_gettable_params = OSSL_FUNC_core_gettable_params(in);  | 
756  | 0  |             break;  | 
757  | 0  |         case OSSL_FUNC_CORE_GET_PARAMS:  | 
758  | 0  |             c_get_params = OSSL_FUNC_core_get_params(in);  | 
759  | 0  |             break;  | 
760  | 0  |         case OSSL_FUNC_CORE_GET_LIBCTX:  | 
761  | 0  |             c_get_libctx = OSSL_FUNC_core_get_libctx(in);  | 
762  | 0  |             break;  | 
763  | 0  |         default:  | 
764  |  |             /* Just ignore anything we don't understand */  | 
765  | 0  |             break;  | 
766  | 0  |         }  | 
767  | 0  |     }  | 
768  |  |  | 
769  | 0  |     if (c_get_libctx == NULL)  | 
770  | 0  |         return 0;  | 
771  |  |  | 
772  |  |     /*  | 
773  |  |      * We want to make sure that all calls from this provider that requires  | 
774  |  |      * a library context use the same context as the one used to call our  | 
775  |  |      * functions.  We do that by passing it along in the provider context.  | 
776  |  |      *  | 
777  |  |      * This only works for built-in providers.  Most providers should  | 
778  |  |      * create their own library context.  | 
779  |  |      */  | 
780  | 0  |     if ((*provctx = ossl_prov_ctx_new()) == NULL  | 
781  | 0  |             || (corebiometh = ossl_bio_prov_init_bio_method()) == NULL) { | 
782  | 0  |         ossl_prov_ctx_free(*provctx);  | 
783  | 0  |         *provctx = NULL;  | 
784  | 0  |         return 0;  | 
785  | 0  |     }  | 
786  | 0  |     ossl_prov_ctx_set0_libctx(*provctx,  | 
787  | 0  |                                        (OSSL_LIB_CTX *)c_get_libctx(handle));  | 
788  | 0  |     ossl_prov_ctx_set0_handle(*provctx, handle);  | 
789  | 0  |     ossl_prov_ctx_set0_core_bio_method(*provctx, corebiometh);  | 
790  | 0  |     ossl_prov_ctx_set0_core_get_params(*provctx, c_get_params);  | 
791  |  | 
  | 
792  | 0  |     *out = deflt_dispatch_table;  | 
793  | 0  |     ossl_prov_cache_exported_algorithms(deflt_ciphers, exported_ciphers);  | 
794  |  | 
  | 
795  | 0  |     return 1;  | 
796  | 0  | }  |