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, AES-CBC, and SHA-1 */
173#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
174 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
175REQUIRE_OBJECT ( rsa_aes_cbc_sha1 );
176#endif
177
178/* RSA, AES-CBC, and SHA-256 */
179#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
180 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
181REQUIRE_OBJECT ( rsa_aes_cbc_sha256 );
182#endif
183
184/* RSA, AES-GCM, and SHA-256 */
185#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
186 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
187REQUIRE_OBJECT ( rsa_aes_gcm_sha256 );
188#endif
189
190/* RSA, AES-GCM, and SHA-384 */
191#if defined ( CRYPTO_EXCHANGE_PUBKEY ) && defined ( CRYPTO_PUBKEY_RSA ) && \
192 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
193REQUIRE_OBJECT ( rsa_aes_gcm_sha384 );
194#endif
195
196/* DHE, RSA, AES-CBC, and SHA-1 */
197#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
198 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
199REQUIRE_OBJECT ( dhe_rsa_aes_cbc_sha1 );
200#endif
201
202/* DHE, RSA, AES-CBC, and SHA-256 */
203#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
204 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
205REQUIRE_OBJECT ( dhe_rsa_aes_cbc_sha256 );
206#endif
207
208/* DHE, RSA, AES-GCM, and SHA-256 */
209#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
210 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
211REQUIRE_OBJECT ( dhe_rsa_aes_gcm_sha256 );
212#endif
213
214/* DHE, RSA, AES-GCM, and SHA-384 */
215#if defined ( CRYPTO_EXCHANGE_DHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
216 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
217REQUIRE_OBJECT ( dhe_rsa_aes_gcm_sha384 );
218#endif
219
220/* ECDHE, RSA, AES-CBC, and SHA-1 */
221#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
222 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
223REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha1 );
224#endif
225
226/* ECDHE, RSA, AES-CBC, and SHA-256 */
227#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
228 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
229REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha256 );
230#endif
231
232/* ECDHE, RSA, AES-CBC, and SHA-384 */
233#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
234 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA384 )
235REQUIRE_OBJECT ( ecdhe_rsa_aes_cbc_sha384 );
236#endif
237
238/* ECDHE, RSA, AES-GCM, and SHA-256 */
239#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
240 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
241REQUIRE_OBJECT ( ecdhe_rsa_aes_gcm_sha256 );
242#endif
243
244/* ECDHE, RSA, AES-GCM, and SHA-384 */
245#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_RSA ) && \
246 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
247REQUIRE_OBJECT ( ecdhe_rsa_aes_gcm_sha384 );
248#endif
249
250/* ECDSA and SHA-224 */
251#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA224 )
252REQUIRE_OBJECT ( ecdsa_sha224 );
253#endif
254
255/* ECDSA and SHA-256 */
256#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA256 )
257REQUIRE_OBJECT ( ecdsa_sha256 );
258#endif
259
260/* ECDSA and SHA-384 */
261#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA384 )
262REQUIRE_OBJECT ( ecdsa_sha384 );
263#endif
264
265/* ECDSA and SHA-512 */
266#if defined ( CRYPTO_PUBKEY_ECDSA ) && defined ( CRYPTO_DIGEST_SHA512 )
267REQUIRE_OBJECT ( ecdsa_sha512 );
268#endif
269
270/* ECDHE, ECDSA, AES-CBC, and SHA-1 */
271#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
272 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA1 )
273REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha1 );
274#endif
275
276/* ECDHE, ECDSA, AES-CBC, and SHA-256 */
277#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
278 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA256 )
279REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha256 );
280#endif
281
282/* ECDHE, ECDSA, AES-CBC, and SHA-384 */
283#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
284 defined ( CRYPTO_CIPHER_AES_CBC ) && defined ( CRYPTO_DIGEST_SHA384 )
285REQUIRE_OBJECT ( ecdhe_ecdsa_aes_cbc_sha384 );
286#endif
287
288/* ECDHE, ECDSA, AES-GCM, and SHA-256 */
289#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
290 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA256 )
291REQUIRE_OBJECT ( ecdhe_ecdsa_aes_gcm_sha256 );
292#endif
293
294/* ECDHE, ECDSA, AES-GCM, and SHA-384 */
295#if defined ( CRYPTO_EXCHANGE_ECDHE ) && defined ( CRYPTO_PUBKEY_ECDSA ) && \
296 defined ( CRYPTO_CIPHER_AES_GCM ) && defined ( CRYPTO_DIGEST_SHA384 )
297REQUIRE_OBJECT ( ecdhe_ecdsa_aes_gcm_sha384 );
298#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