iPXE
config_crypto.c
Go to the documentation of this file.
1/*
2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License as
4 * published by the Free Software Foundation; either version 2 of the
5 * License, or (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful, but
8 * WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 * General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15 * 02110-1301, USA.
16 *
17 * You can also choose to distribute this program under the terms of
18 * the Unmodified Binary Distribution Licence (as given in the file
19 * COPYING.UBDL), provided that you have satisfied its requirements.
20 */
21
22FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
23FILE_SECBOOT ( PERMITTED );
24
25#include <config/crypto.h>
26
27/** @file
28 *
29 * Cryptographic configuration
30 *
31 * Cryptographic configuration is slightly messy since we need to drag
32 * in objects based on combinations of build options.
33 */
34
36
37/* RSA */
38#if defined ( CRYPTO_PUBKEY_RSA )
39REQUIRE_OBJECT ( oid_rsa );
40#endif
41
42/* MD4 */
43#if defined ( CRYPTO_DIGEST_MD4 )
45#endif
46
47/* MD5 */
48#if defined ( CRYPTO_DIGEST_MD5 )
50#endif
51
52/* SHA-1 */
53#if defined ( CRYPTO_DIGEST_SHA1 )
55#endif
56
57/* SHA-224 */
58#if defined ( CRYPTO_DIGEST_SHA224 )
60#endif
61
62/* SHA-256 */
63#if defined ( CRYPTO_DIGEST_SHA256 )
65#endif
66
67/* SHA-384 */
68#if defined ( CRYPTO_DIGEST_SHA384 )
70#endif
71
72/* SHA-512 */
73#if defined ( CRYPTO_DIGEST_SHA512 )
75#endif
76
77/* SHA-512/224 */
78#if defined ( CRYPTO_DIGEST_SHA512_224 )
80#endif
81
82/* SHA-512/256 */
83#if defined ( CRYPTO_DIGEST_SHA512_256 )
85#endif
86
87/* X25519 */
88#if defined ( CRYPTO_CURVE_X25519 )
90#endif
91
92/* P-256 */
93#if defined ( CRYPTO_CURVE_P256 )
94REQUIRE_OBJECT ( oid_p256 );
95#endif
96
97/* P-384 */
98#if defined ( CRYPTO_CURVE_P384 )
99REQUIRE_OBJECT ( oid_p384 );
100#endif
101
102/* FFDHE2048 */
103#if defined ( CRYPTO_GROUP_FFDHE2048 )
104REQUIRE_OBJECT ( kex_ffdhe2048 );
105#endif
106
107/* FFDHE3072 */
108#if defined ( CRYPTO_GROUP_FFDHE3072 )
109REQUIRE_OBJECT ( kex_ffdhe3072 );
110#endif
111
112/* FFDHE4096 */
113#if defined ( CRYPTO_GROUP_FFDHE4096 )
114REQUIRE_OBJECT ( kex_ffdhe4096 );
115#endif
116
117/* MODP2048 */
118#if defined ( CRYPTO_GROUP_MODP2048 )
119REQUIRE_OBJECT ( kex_modp2048 );
120#endif
121
122/* MODP3072 */
123#if defined ( CRYPTO_GROUP_MODP3072 )
124REQUIRE_OBJECT ( kex_modp3072 );
125#endif
126
127/* MODP4096 */
128#if defined ( CRYPTO_GROUP_MODP4096 )
129REQUIRE_OBJECT ( kex_modp4096 );
130#endif
131
132/* AES-CBC */
133#if defined ( CRYPTO_CIPHER_AES_CBC )
134REQUIRE_OBJECT ( oid_aes_cbc );
135#endif
136
137/* AES-GCM */
138#if defined ( CRYPTO_CIPHER_AES_GCM )
139REQUIRE_OBJECT ( oid_aes_gcm );
140#endif
141
142/* RSA and MD5 */
143#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_MD5 )
144REQUIRE_OBJECT ( rsa_md5 );
145#endif
146
147/* RSA and SHA-1 */
148#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA1 )
149REQUIRE_OBJECT ( rsa_sha1 );
150#endif
151
152/* RSA and SHA-224 */
153#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA224 )
154REQUIRE_OBJECT ( rsa_sha224 );
155#endif
156
157/* RSA and SHA-256 */
158#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA256 )
159REQUIRE_OBJECT ( rsa_sha256 );
160#endif
161
162/* RSA and SHA-384 */
163#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA384 )
164REQUIRE_OBJECT ( rsa_sha384 );
165#endif
166
167/* RSA and SHA-512 */
168#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA512 )
169REQUIRE_OBJECT ( rsa_sha512 );
170#endif
171
172/* RSA and SHA-512/224 */
173#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA512_224 )
174REQUIRE_OBJECT ( rsa_sha512_224 );
175#endif
176
177/* RSA and SHA-512/256 */
178#if defined ( CRYPTO_PUBKEY_RSA ) && defined ( CRYPTO_DIGEST_SHA512_256 )
179REQUIRE_OBJECT ( rsa_sha512_256 );
180#endif
181
182/* RSA, AES-CBC, and SHA-1 */
183#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
184 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
185REQUIRE_OBJECT ( rsa_aes_cbc_sha1 );
186#endif
187
188/* RSA, AES-CBC, and SHA-256 */
189#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
190 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
191REQUIRE_OBJECT ( rsa_aes_cbc_sha256 );
192#endif
193
194/* RSA, AES-GCM, and SHA-256 */
195#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
196 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
197REQUIRE_OBJECT ( rsa_aes_gcm_sha256 );
198#endif
199
200/* RSA, AES-GCM, and SHA-384 */
201#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
202 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
203REQUIRE_OBJECT ( rsa_aes_gcm_sha384 );
204#endif
205
206/* DHE, RSA, AES-CBC, and SHA-1 */
207#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
208 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
209REQUIRE_OBJECT ( dhe_rsa_aes_cbc_sha1 );
210#endif
211
212/* DHE, RSA, AES-CBC, and SHA-256 */
213#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
214 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
215REQUIRE_OBJECT ( dhe_rsa_aes_cbc_sha256 );
216#endif
217
218/* DHE, RSA, AES-GCM, and SHA-256 */
219#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
220 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
221REQUIRE_OBJECT ( dhe_rsa_aes_gcm_sha256 );
222#endif
223
224/* DHE, RSA, AES-GCM, and SHA-384 */
225#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
226 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
227REQUIRE_OBJECT ( dhe_rsa_aes_gcm_sha384 );
228#endif
229
230/* ECDHE, RSA, AES-CBC, and SHA-1 */
231#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
232 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
233REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha1 );
234#endif
235
236/* ECDHE, RSA, AES-CBC, and SHA-256 */
237#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
238 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
239REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha256 );
240#endif
241
242/* ECDHE, RSA, AES-CBC, and SHA-384 */
243#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
244 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA384 )
245REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha384 );
246#endif
247
248/* ECDHE, RSA, AES-GCM, and SHA-256 */
249#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
250 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
251REQUIRE_OBJECT ( ecdhe_rsa_aes_gcm_sha256 );
252#endif
253
254/* ECDHE, RSA, AES-GCM, and SHA-384 */
255#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
256 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
257REQUIRE_OBJECT ( ecdhe_rsa_aes_gcm_sha384 );
258#endif
259
260/* ECDSA and SHA-224 */
261#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA224 )
262REQUIRE_OBJECT ( ecdsa_sha224 );
263#endif
264
265/* ECDSA and SHA-256 */
266#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA256 )
267REQUIRE_OBJECT ( ecdsa_sha256 );
268#endif
269
270/* ECDSA and SHA-384 */
271#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA384 )
272REQUIRE_OBJECT ( ecdsa_sha384 );
273#endif
274
275/* ECDSA and SHA-512 */
276#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA512 )
277REQUIRE_OBJECT ( ecdsa_sha512 );
278#endif
279
280/* ECDHE, ECDSA, AES-CBC, and SHA-1 */
281#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
282 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
283REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha1 );
284#endif
285
286/* ECDHE, ECDSA, AES-CBC, and SHA-256 */
287#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
288 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
289REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha256 );
290#endif
291
292/* ECDHE, ECDSA, AES-CBC, and SHA-384 */
293#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
294 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA384 )
295REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha384 );
296#endif
297
298/* ECDHE, ECDSA, AES-GCM, and SHA-256 */
299#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
300 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
301REQUIRE_OBJECT ( ecdhe_ecdsa_aes_gcm_sha256 );
302#endif
303
304/* ECDHE, ECDSA, AES-GCM, and SHA-384 */
305#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
306 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
307REQUIRE_OBJECT ( ecdhe_ecdsa_aes_gcm_sha384 );
308#endif
Cryptographic configuration.
PROVIDE_REQUIRING_SYMBOL()
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:921
#define REQUIRE_OBJECT(object)
Require an object.
Definition compiler.h:227
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:951
static uint8_t oid_md4[]
"md4" object identifier
Definition oid_md4.c:31
static uint8_t oid_md5[]
"md5" object identifier
Definition oid_md5.c:31
static uint8_t oid_sha1[]
"sha1" object identifier
Definition oid_sha1.c:31
static uint8_t oid_sha224[]
"sha224" object identifier
Definition oid_sha224.c:31
static uint8_t oid_sha256[]
"sha256" object identifier
Definition oid_sha256.c:31
static uint8_t oid_sha384[]
"sha384" object identifier
Definition oid_sha384.c:31
static uint8_t oid_sha512[]
"sha512" object identifier
Definition oid_sha512.c:31
static uint8_t oid_sha512_224[]
"sha512_224" object identifier
static uint8_t oid_sha512_256[]
"sha512_256" object identifier
static uint8_t oid_x25519[]
"x25519" object identifier
Definition oid_x25519.c:33