1 /**
2  *  Copyright Notice:
3  *  Copyright 2021-2022 DMTF. All rights reserved.
4  *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5  **/
6 
7 #ifndef SPDM_LIB_CONFIG_H
8 #define SPDM_LIB_CONFIG_H
9 
10 /* Enables assertions and debug printing. When `LIBSPDM_DEBUG_ENABLE` is defined it overrides or
11  * sets the values of `LIBSPDM_DEBUG_PRINT_ENABLE`, `LIBSPDM_DEBUG_ASSERT_ENABLE`, and
12  * `LIBSPDM_BLOCK_ENABLE` to the value of `LIBSPDM_DEBUG_ENABLE`.
13  *
14  * Note that if this file is used with CMake and `DTARGET=Release` is defined, then all debugging
15  * is disabled.
16  */
17 #ifndef LIBSPDM_DEBUG_ENABLE
18 #define LIBSPDM_DEBUG_ENABLE 1
19 #endif
20 
21 /* The SPDM specification allows a Responder to return up to 256 version entries in the `VERSION`
22  * response to the Requester, including duplicate entries. For a Requester this value specifies the
23  * maximum number of entries that libspdm will tolerate in a `VERSION` response before returning an
24  * error. A similiar macro, `SPDM_MAX_VERSION_COUNT`, exists for the Responder. However this macro
25  * is not meant to be configured by the Integrator.
26  */
27 #ifndef LIBSPDM_MAX_VERSION_COUNT
28 #define LIBSPDM_MAX_VERSION_COUNT 5
29 #endif
30 
31 /* This value specifies the maximum size, in bytes, of the `PSK_EXCHANGE.RequesterContext` and,
32  * if supported by the Responder, `PSK_EXCHANGE_RSP.ResponderContext` fields. The fields are
33  * typically random or monotonically increasing numbers.
34  */
35 #ifndef LIBSPDM_PSK_CONTEXT_LENGTH
36 #define LIBSPDM_PSK_CONTEXT_LENGTH LIBSPDM_MAX_HASH_SIZE
37 #endif
38 /* This value specifies the maximum size, in bytes, of the `PSK_EXCHANGE.PSKHint` field.*/
39 #ifndef LIBSPDM_PSK_MAX_HINT_LENGTH
40 #define LIBSPDM_PSK_MAX_HINT_LENGTH 16
41 #endif
42 
43 /* libspdm allows an Integrator to specify multiple root certificates as trust anchors when
44  * verifying certificate chains from an endpoint. This value specifies the maximum number of root
45  * certificates that libspdm can support.
46  */
47 #ifndef LIBSPDM_MAX_ROOT_CERT_SUPPORT
48 #define LIBSPDM_MAX_ROOT_CERT_SUPPORT 10
49 #endif
50 
51 /* If the Responder supports it a Requester is allowed to establish multiple secure sessions with
52  * the Responder. This value specifies the maximum number of sessions libspdm can support.
53  */
54 #ifndef LIBSPDM_MAX_SESSION_COUNT
55 #define LIBSPDM_MAX_SESSION_COUNT 4
56 #endif
57 /* This value specifies the maximum size, in bytes, of a certificate chain that can be stored in a
58  * libspdm context.
59  */
60 #ifndef LIBSPDM_MAX_CERT_CHAIN_SIZE
61 #define LIBSPDM_MAX_CERT_CHAIN_SIZE 0x1000
62 #endif
63 #ifndef LIBSPDM_MAX_MEASUREMENT_RECORD_SIZE
64 #define LIBSPDM_MAX_MEASUREMENT_RECORD_SIZE 0x1000
65 #endif
66 /* Partial certificates can be retrieved from a Requester or Responder and through multiple messages
67  * the complete certificate chain can be constructed. This value specifies the maximum size,
68  * in bytes, of a partial certificate that can be sent or received.
69  */
70 #ifndef LIBSPDM_MAX_CERT_CHAIN_BLOCK_LEN
71 #define LIBSPDM_MAX_CERT_CHAIN_BLOCK_LEN 1024
72 #endif
73 
74 #ifndef LIBSPDM_MAX_MESSAGE_BUFFER_SIZE
75 #define LIBSPDM_MAX_MESSAGE_BUFFER_SIZE 0x1200
76 #endif
77 #ifndef LIBSPDM_MAX_MESSAGE_SMALL_BUFFER_SIZE
78 #define LIBSPDM_MAX_MESSAGE_SMALL_BUFFER_SIZE 0x100  /* to hold message_a before negotiate*/
79 #endif
80 #ifndef LIBSPDM_MAX_MESSAGE_MEDIUM_BUFFER_SIZE
81 #define LIBSPDM_MAX_MESSAGE_MEDIUM_BUFFER_SIZE 0x300 /* to hold message_k before finished_key is ready*/
82 #endif
83 
84 /* If the Responder replies with a Busy `ERROR` response to a request then the Requester is free to
85  * retry sending the request. This value specifies the maximum number of times libspdm will retry
86  * sending the request before returning an error. If its value is 0 then libspdm will not send any
87  * retry requests.
88  */
89 #ifndef LIBSPDM_MAX_REQUEST_RETRY_TIMES
90 #define LIBSPDM_MAX_REQUEST_RETRY_TIMES 3
91 #endif
92 #ifndef LIBSPDM_MAX_SESSION_STATE_CALLBACK_NUM
93 #define LIBSPDM_MAX_SESSION_STATE_CALLBACK_NUM 4
94 #endif
95 #ifndef LIBSPDM_MAX_CONNECTION_STATE_CALLBACK_NUM
96 #define LIBSPDM_MAX_CONNECTION_STATE_CALLBACK_NUM 4
97 #endif
98 #ifndef LIBSPDM_MAX_KEY_UPDATE_CALLBACK_NUM
99 #define LIBSPDM_MAX_KEY_UPDATE_CALLBACK_NUM 4
100 #endif
101 
102 #ifndef LIBSPDM_MAX_CSR_SIZE
103 #define LIBSPDM_MAX_CSR_SIZE 0x1000
104 #endif
105 
106 /* To ensure integrity in communication between the Requester and the Responder libspdm calculates
107  * cryptographic digests and signatures over multiple requests and responses. This value specifies
108  * whether libspdm will use a running calculation over the transcript, where requests and responses
109  * are discarded as they are cryptographically consumed, or whether libspdm will buffer the entire
110  * transcript before calculating the digest or signature.
111  */
112 #ifndef LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
113 #define LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT 0
114 #endif
115 
116 
117 /* Cryptography Configuration
118  * In each category, at least one should be selected.
119  * NOTE: Not all combination can be supported. E.g. Don't mix NIST algo with SMx.*/
120 
121 #ifndef LIBSPDM_RSA_SSA_SUPPORT
122 #define LIBSPDM_RSA_SSA_SUPPORT 1
123 #endif
124 #ifndef LIBSPDM_RSA_PSS_SUPPORT
125 #define LIBSPDM_RSA_PSS_SUPPORT 1
126 #endif
127 #ifndef LIBSPDM_ECDSA_SUPPORT
128 #define LIBSPDM_ECDSA_SUPPORT 1
129 #endif
130 #ifndef LIBSPDM_SM2_DSA_SUPPORT
131 #define LIBSPDM_SM2_DSA_SUPPORT 1
132 #endif
133 #ifndef LIBSPDM_EDDSA_ED25519_SUPPORT
134 #define LIBSPDM_EDDSA_ED25519_SUPPORT 1
135 #endif
136 #ifndef LIBSPDM_EDDSA_ED448_SUPPORT
137 #define LIBSPDM_EDDSA_ED448_SUPPORT 1
138 #endif
139 
140 #ifndef LIBSPDM_FFDHE_SUPPORT
141 #define LIBSPDM_FFDHE_SUPPORT 1
142 #endif
143 #ifndef LIBSPDM_ECDHE_SUPPORT
144 #define LIBSPDM_ECDHE_SUPPORT 1
145 #endif
146 #ifndef LIBSPDM_SM2_KEY_EXCHANGE_SUPPORT
147 #define LIBSPDM_SM2_KEY_EXCHANGE_SUPPORT 1
148 #endif
149 
150 #ifndef LIBSPDM_AEAD_GCM_SUPPORT
151 #define LIBSPDM_AEAD_GCM_SUPPORT 1
152 #endif
153 #ifndef LIBSPDM_AEAD_CHACHA20_POLY1305_SUPPORT
154 #define LIBSPDM_AEAD_CHACHA20_POLY1305_SUPPORT 1
155 #endif
156 #ifndef LIBSPDM_AEAD_SM4_SUPPORT
157 #define LIBSPDM_AEAD_SM4_SUPPORT 1
158 #endif
159 
160 #ifndef LIBSPDM_SHA256_SUPPORT
161 #define LIBSPDM_SHA256_SUPPORT 1
162 #endif
163 #ifndef LIBSPDM_SHA384_SUPPORT
164 #define LIBSPDM_SHA384_SUPPORT 1
165 #endif
166 #ifndef LIBSPDM_SHA512_SUPPORT
167 #define LIBSPDM_SHA512_SUPPORT 1
168 #endif
169 #ifndef LIBSPDM_SHA3_256_SUPPORT
170 #define LIBSPDM_SHA3_256_SUPPORT 1
171 #endif
172 #ifndef LIBSPDM_SHA3_384_SUPPORT
173 #define LIBSPDM_SHA3_384_SUPPORT 1
174 #endif
175 #ifndef LIBSPDM_SHA3_512_SUPPORT
176 #define LIBSPDM_SHA3_512_SUPPORT 1
177 #endif
178 #ifndef LIBSPDM_SM3_256_SUPPORT
179 #define LIBSPDM_SM3_256_SUPPORT 1
180 #endif
181 
182 /* Code space optimization for Optional request/response messages.*/
183 
184 /* Consumers of libspdm may wish to not fully implement all of the optional
185  * SPDM request/response messages. Therefore we have provided these
186  * SPDM_ENABLE_CAPABILITY_***_CAP compile time switches as an optimization
187  * disable the code (#if 0) related to said optional capability, thereby
188  * reducing the code space used in the image.*/
189 
190 /* A single switch may enable/disable a single capability or group of related
191  * capabilities.*/
192 
193 /* LIBSPDM_ENABLE_CAPABILITY_CERT_CAP - Enable/Disable single CERT capability.
194  * LIBSPDM_ENABLE_CAPABILITY_CHAL_CAP - Enable/Disable single CHAL capability.
195  * LIBSPDM_ENABLE_CAPABILTIY_MEAS_CAP - Enable/Disables multiple MEAS capabilities:
196  *                                  (MEAS_CAP_NO_SIG, MEAS_CAP_SIG, MEAS_FRESH_CAP)*/
197 
198 /* LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP - Enable/Disable single Key Exchange capability.
199  * LIBSPDM_ENABLE_CAPABILITY_PSK_EX_CAP - Enable/Disable PSK_EX and PSK_FINISH.*/
200 
201 /* LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP - Enable/Disable mutual authentication.
202 * LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP    - Enable/Disable encapsulated message.*/
203 
204 /* LIBSPDM_ENABLE_CAPABILITY_GET_CSR_CAP - Enable/Disable get csr capability.
205  * LIBSPDM_ENABLE_CAPABILITY_SET_CERTIFICATE_CAP - Enable/Disable set certificate capability. */
206 
207 #ifndef LIBSPDM_ENABLE_CAPABILITY_CERT_CAP
208 #define LIBSPDM_ENABLE_CAPABILITY_CERT_CAP 1
209 #endif
210 
211 #ifndef LIBSPDM_ENABLE_CAPABILITY_CHAL_CAP
212 #define LIBSPDM_ENABLE_CAPABILITY_CHAL_CAP 1
213 #endif
214 
215 #ifndef LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP
216 #define LIBSPDM_ENABLE_CAPABILITY_MEAS_CAP 1
217 #endif
218 
219 #ifndef LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP
220 #define LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP 1
221 #endif
222 
223 #ifndef LIBSPDM_ENABLE_CAPABILITY_PSK_EX_CAP
224 #define LIBSPDM_ENABLE_CAPABILITY_PSK_EX_CAP 1
225 #endif
226 
227 #ifndef LIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP
228 #define LIBSPDM_ENABLE_CAPABILITY_HBEAT_CAP 1
229 #endif
230 
231 #ifndef LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP
232 #define LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP 1
233 #endif
234 
235 #ifndef LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP
236 #define LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP 1
237 #endif
238 
239 #ifndef LIBSPDM_ENABLE_CAPABILITY_GET_CSR_CAP
240 #define LIBSPDM_ENABLE_CAPABILITY_GET_CSR_CAP 1
241 #endif
242 
243 #ifndef LIBSPDM_ENABLE_CAPABILITY_SET_CERTIFICATE_CAP
244 #define LIBSPDM_ENABLE_CAPABILITY_SET_CERTIFICATE_CAP 1
245 #endif
246 
247 #ifndef LIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP
248 #define LIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP 1
249 #endif
250 
251 /*
252  * MinDataTransferSize = 42
253  *
254  * H = HashLen = HmacLen = [32, 64]
255  * S = SigLen = [64, 512]
256  * D = ExchangeDataLen = [64, 512]
257  * R = RequesterContextLen >= 32
258  * R = ResponderContextLen >= 0
259  * O = OpaqueDataLen <= 1024
260  *
261  * Max Chunk No = 1, if (message size <= 42)
262  * Max Chunk No = [(message size + 4) / 30] roundup, if (message size > 42)
263  *
264  * +==========================+==========================================+=========+
265  * |  Command                 |   Size                                   |MaxChunk |
266  * +==========================+==========================================+=========+
267  * | GET_VERSION              | 4                                        | 1       |
268  * | VERSION {1.0, 1.1, 1.2}  | 6 + 2 * 3 = 12                           | 1       |
269  * +--------------------------+------------------------------------------+---------+
270  * | GET_CAPABILITIES 1.2     | 20                                       | 1       |
271  * | CAPABILITIES 1.2         | 20                                       | 1       |
272  * +--------------------------+------------------------------------------+---------+
273  * | ERROR                    | 4                                        | 1       |
274  * | ERROR(ResponseTooLarge)  | 4 + 4 = 8                                | 1       |
275  * | ERROR(LargeResponse)     | 4 + 1 = 5                                | 1       |
276  * | ERROR(ResponseNotReady)  | 4 + 4 = 8                                | 1       |
277  * +--------------------------+------------------------------------------+---------+
278  * | CHUNK_SEND header        | 12 + L0 (0 or 4)                         | 1       |
279  * | CHUNK_RESPONSE header    | 12 + L0 (0 or 4)                         | 1       |
280  * +==========================+==========================================+=========+
281  * | NEGOTIATE_ALGORITHMS 1.2 | 32 + 4 * 4 = 48                          | 2       |
282  * | ALGORITHMS 1.2           | 36 + 4 * 4 = 52                          | 2       |
283  * +--------------------------+------------------------------------------+---------+
284  * | GET_DIGESTS 1.2          | 4                                        | 1       |
285  * | DIGESTS 1.2              | 4 + H * SlotNum = [36, 516]              | [1, 18] |
286  * +--------------------------+------------------------------------------+---------+
287  * | GET_CERTIFICATE 1.2      | 8                                        | 1       |
288  * | CERTIFICATE 1.2          | 8 + PortionLen                           | [1, ]   |
289  * +--------------------------+------------------------------------------+---------+
290  * | CHALLENGE 1.2            | 40                                       | 1       |
291  * | CHALLENGE_AUTH 1.2       | 38 + H * 2 + S [+ O] = [166, 678]        | [6, 23] |
292  * +--------------------------+------------------------------------------+---------+
293  * | GET_MEASUREMENTS 1.2     | 5 + Nounce (0 or 32)                     | 1       |
294  * | MEASUREMENTS 1.2         | 42 + MeasRecLen (+ S) [+ O] = [106, 554] | [4, 19] |
295  * +--------------------------+------------------------------------------+---------+
296  * | KEY_EXCHANGE 1.2         | 42 + D [+ O] = [106, 554]                | [4, 19] |
297  * | KEY_EXCHANGE_RSP 1.2     | 42 + D + H + S (+ H) [+ O] = [234, 1194] | [8, 40] |
298  * +--------------------------+------------------------------------------+---------+
299  * | FINISH 1.2               | 4 (+ S) + H = [100, 580]                 | [4, 20] |
300  * | FINISH_RSP 1.2           | 4 (+ H) = [36, 69]                       | [1, 3]  |
301  * +--------------------------+------------------------------------------+---------+
302  * | PSK_EXCHANGE 1.2         | 12 [+ PSKHint] + R [+ O] = 44            | 2       |
303  * | PSK_EXCHANGE_RSP 1.2     | 12 + R + H (+ H) [+ O] = [108, 172]      | [4, 6]  |
304  * +--------------------------+------------------------------------------+---------+
305  * | PSK_FINISH 1.2           | 4 + H = [36, 68]                         | [1, 3]  |
306  * | PSK_FINISH_RSP 1.2       | 4                                        | 1       |
307  * +--------------------------+------------------------------------------+---------+
308  * | GET_CSR 1.2              | 8 + RequesterInfoLen [+ O]               | [1, ]   |
309  * | CSR 1.2                  | 8 + CSRLength                            | [1, ]   |
310  * +--------------------------+------------------------------------------+---------+
311  * | SET_CERTIFICATE 1.2      | 4 + CertChainLen                         | [1, ]   |
312  * | SET_CERTIFICATE_RSP 1.2  | 4                                        | 1       |
313  * +==========================+==========================================+=========+
314  */
315 
316 /* Maximum size of a large SPDM message.
317  * If chunk is unsupported, it must be same as LIBSPDM_DATA_TRANSFER_SIZE.
318  * If chunk is supported, it must be larger than LIBSPDM_DATA_TRANSFER_SIZE.
319  * It matches MaxSPDMmsgSize in SPDM specification. */
320 #ifndef LIBSPDM_MAX_SPDM_MSG_SIZE
321 #define LIBSPDM_MAX_SPDM_MSG_SIZE LIBSPDM_MAX_MESSAGE_BUFFER_SIZE
322 #endif
323 
324 /* Maximum size of a single SPDM message.
325  * It matches DataTransferSize in SPDM specification. */
326 #ifndef LIBSPDM_DATA_TRANSFER_SIZE
327 #define LIBSPDM_DATA_TRANSFER_SIZE LIBSPDM_MAX_MESSAGE_BUFFER_SIZE
328 #endif
329 
330 /* Required sender/receive buffer in device io.
331  * NOTE: This is transport specific. Below configuration is just an example.
332  * +-------+--------+---------------------------+------+--+------+---+--------+-----+
333  * | TYPE  |TransHdr|      EncryptionHeader     |AppHdr|  |Random|MAC|AlignPad|FINAL|
334  * |       |        |SessionId|SeqNum|Len|AppLen|      |  |      |   |        |     |
335  * +-------+--------+---------------------------+------+  +------+---+--------+-----+
336  * | MCTP  |    1   |    4    |   2  | 2 |   2  |   1  |  |  32  | 12|   0    |  56 |
337  * |PCI_DOE|    8   |    4    |   0  | 2 |   2  |   0  |  |   0  | 12|   3    |  31 |
338  * +-------+--------+---------------------------+------+--+------+---+--------+-----+
339  */
340 #ifndef LIBSPDM_TRANSPORT_ADDITIONAL_SIZE
341 #define LIBSPDM_TRANSPORT_ADDITIONAL_SIZE    64
342 #endif
343 #ifndef LIBSPDM_SENDER_RECEIVE_BUFFER_SIZE
344 #define LIBSPDM_SENDER_RECEIVE_BUFFER_SIZE (LIBSPDM_DATA_TRANSFER_SIZE + \
345                                             LIBSPDM_TRANSPORT_ADDITIONAL_SIZE)
346 #endif
347 
348 
349 /* Required scratch buffer size for libspdm internal usage.
350  * It may be used to hold the encrypted/decrypted message and/or last sent/received message.
351  * It may be used to hold the large request/response and intermediate send/receive buffer
352  * in case of chunking.
353  *
354  * If chunking is not supported, it may be just LIBSPDM_SENDER_RECEIVE_BUFFER_SIZE.
355  * If chunking is supported, it should be at least below.
356  *
357  * +---------------+--------------+--------------------------+------------------------------+
358  * |SECURE_MESSAGE |LARGE_MESSAGE |    SENDER_RECEIVER       | LARGE_SENDER_RECEIVER        |
359  * +---------------+--------------+--------------------------+------------------------------+
360  * |<-Secure msg ->|<-Large msg ->|<-Snd/Rcv buf for chunk ->|<-Snd/Rcv buf for large msg ->|
361  *
362  * The value is NOT configurable.
363  * The value MAY be changed in different libspdm version.
364  * It is exposed here, just in case the libspdm consumer wants to configure the setting at build time.
365  */
366 #if LIBSPDM_ENABLE_CAPABILITY_CHUNK_CAP
367 
368 /* first section */
369 #define LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_OFFSET 0
370 
371 #define LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_CAPACITY (LIBSPDM_MAX_SPDM_MSG_SIZE)
372 
373 /* second section */
374 #define LIBSPDM_SCRATCH_BUFFER_LARGE_MESSAGE_OFFSET (LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_CAPACITY)
375 
376 #define LIBSPDM_SCRATCH_BUFFER_LARGE_MESSAGE_CAPACITY (LIBSPDM_MAX_SPDM_MSG_SIZE)
377 
378 /* third section */
379 #define LIBSPDM_SCRATCH_BUFFER_SENDER_RECEIVER_OFFSET  \
380     (LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_CAPACITY + \
381      LIBSPDM_SCRATCH_BUFFER_LARGE_MESSAGE_CAPACITY)
382 
383 #define LIBSPDM_SCRATCH_BUFFER_SENDER_RECEIVER_CAPACITY (LIBSPDM_MAX_SPDM_MSG_SIZE)
384 
385 /* fourth section */
386 #define LIBSPDM_SCRATCH_BUFFER_LARGE_SENDER_RECEIVER_OFFSET  \
387     (LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_CAPACITY + \
388      LIBSPDM_SCRATCH_BUFFER_LARGE_MESSAGE_CAPACITY + \
389      LIBSPDM_SCRATCH_BUFFER_SENDER_RECEIVER_CAPACITY)
390 
391 #define LIBSPDM_SCRATCH_BUFFER_LARGE_SENDER_RECEIVER_CAPACITY (LIBSPDM_MAX_SPDM_MSG_SIZE)
392 
393 #define LIBSPDM_SCRATCH_BUFFER_SIZE (LIBSPDM_SCRATCH_BUFFER_SECURE_MESSAGE_CAPACITY + \
394                                      LIBSPDM_SCRATCH_BUFFER_LARGE_MESSAGE_CAPACITY + \
395                                      LIBSPDM_SCRATCH_BUFFER_SENDER_RECEIVER_CAPACITY + \
396                                      LIBSPDM_SCRATCH_BUFFER_LARGE_SENDER_RECEIVER_CAPACITY \
397                                      )
398 
399 #else
400 #define LIBSPDM_SCRATCH_BUFFER_SIZE (LIBSPDM_SENDER_RECEIVE_BUFFER_SIZE)
401 #endif
402 
403 /* Enable message logging.
404  * See https://github.com/DMTF/libspdm/blob/main/doc/user_guide.md#message-logging
405  * for more information */
406 #ifndef LIBSPDM_ENABLE_MSG_LOG
407 #define LIBSPDM_ENABLE_MSG_LOG 1
408 #endif
409 
410 /* Enable macro checking during compilation. */
411 #ifndef LIBSPDM_CHECK_MACRO
412 #define LIBSPDM_CHECK_MACRO 0
413 #endif
414 
415 #endif /* SPDM_LIB_CONFIG_H */
416