@@ -17,13 +17,22 @@ spdm_get_digest_request_t m_spdm_get_digests_request1 = {
17
17
};
18
18
size_t m_spdm_get_digests_request1_size = sizeof (m_spdm_get_digests_request1 );
19
19
20
+
21
+ spdm_get_digest_request_t m_spdm_get_digests_request2 = {
22
+ {
23
+ SPDM_MESSAGE_VERSION_13 ,
24
+ SPDM_GET_DIGESTS ,
25
+ },
26
+ };
27
+ size_t m_spdm_get_digests_request2_size = sizeof (m_spdm_get_digests_request2 );
28
+
20
29
static uint8_t m_local_certificate_chain [LIBSPDM_MAX_CERT_CHAIN_SIZE ];
21
30
22
31
/**
23
32
* Test 1: receives a valid GET_DIGESTS request message from Requester
24
33
* Expected Behavior: produces a valid DIGESTS response message
25
34
**/
26
- void test_spdm_requester_challenge_auth_case1 (void * * state )
35
+ void test_spdm_requester_encap_get_digests_case1 (void * * state )
27
36
{
28
37
libspdm_return_t status ;
29
38
libspdm_test_context_t * spdm_test_context ;
@@ -79,15 +88,15 @@ void test_spdm_requester_challenge_auth_case1(void **state)
79
88
* Test 2:
80
89
* Expected Behavior:
81
90
**/
82
- void test_spdm_requester_challenge_auth_case2 (void * * state )
91
+ void test_spdm_requester_encap_get_digests_case2 (void * * state )
83
92
{
84
93
}
85
94
86
95
/**
87
96
* Test 3: receives a valid GET_DIGESTS request message from Requester, but the request message cannot be appended to the internal cache since the internal cache is full
88
97
* Expected Behavior: produces an ERROR response message with error code = Unspecified
89
98
**/
90
- void test_spdm_requester_challenge_auth_case3 (void * * state )
99
+ void test_spdm_requester_encap_get_digests_case3 (void * * state )
91
100
{
92
101
libspdm_return_t status ;
93
102
libspdm_test_context_t * spdm_test_context ;
@@ -145,7 +154,7 @@ void test_spdm_requester_challenge_auth_case3(void **state)
145
154
* Test 4: receives a valid GET_DIGESTS request message from Requester, but the response message cannot be appended to the internal cache since the internal cache is full
146
155
* Expected Behavior: produces an ERROR response message with error code = Unspecified
147
156
**/
148
- void test_spdm_requester_challenge_auth_case4 (void * * state )
157
+ void test_spdm_requester_encap_get_digests_case4 (void * * state )
149
158
{
150
159
libspdm_test_context_t * spdm_test_context ;
151
160
libspdm_context_t * spdm_context ;
@@ -198,6 +207,101 @@ void test_spdm_requester_challenge_auth_case4(void **state)
198
207
#endif
199
208
}
200
209
210
+ /**
211
+ * Test 5: receives a valid GET_DIGESTS request message from Requester ,
212
+ * Set multi_key_conn_req to check if it responds correctly
213
+ * Expected Behavior: produces a valid DIGESTS response message
214
+ **/
215
+ void test_spdm_requester_encap_get_digests_case5 (void * * state )
216
+ {
217
+ libspdm_return_t status ;
218
+ libspdm_test_context_t * spdm_test_context ;
219
+ libspdm_context_t * spdm_context ;
220
+ size_t response_size ;
221
+ uint8_t response [LIBSPDM_MAX_SPDM_MSG_SIZE ];
222
+ spdm_digest_response_t * spdm_response ;
223
+ libspdm_session_info_t * session_info ;
224
+ uint32_t session_id ;
225
+
226
+ spdm_test_context = * state ;
227
+ spdm_context = spdm_test_context -> spdm_context ;
228
+ spdm_test_context -> case_id = 0x5 ;
229
+ spdm_context -> connection_info .version = SPDM_MESSAGE_VERSION_13
230
+ << SPDM_VERSION_NUMBER_SHIFT_BIT ;
231
+ spdm_context -> connection_info .connection_state =
232
+ LIBSPDM_CONNECTION_STATE_NEGOTIATED ;
233
+ spdm_context -> local_context .capability .flags |=
234
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CERT_CAP ;
235
+ spdm_context -> connection_info .algorithm .base_hash_algo =
236
+ m_libspdm_use_hash_algo ;
237
+ spdm_context -> local_context .local_cert_chain_provision [0 ] =
238
+ m_local_certificate_chain ;
239
+ spdm_context -> local_context .local_cert_chain_provision_size [0 ] =
240
+ sizeof (m_local_certificate_chain );
241
+ libspdm_set_mem (m_local_certificate_chain , sizeof (m_local_certificate_chain ),
242
+ (uint8_t )(0xFF ));
243
+
244
+ session_id = 0xFFFFFFFF ;
245
+ spdm_context -> latest_session_id = session_id ;
246
+ spdm_context -> last_spdm_request_session_id_valid = true;
247
+ spdm_context -> last_spdm_request_session_id = session_id ;
248
+ session_info = & spdm_context -> session_info [0 ];
249
+ libspdm_session_info_init (spdm_context , session_info , session_id , true);
250
+ libspdm_secured_message_set_session_state (
251
+ session_info -> secured_message_context ,
252
+ LIBSPDM_SESSION_STATE_ESTABLISHED );
253
+
254
+ #if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
255
+ spdm_context -> transcript .message_m .buffer_size =
256
+ spdm_context -> transcript .message_m .max_buffer_size ;
257
+ #endif
258
+ /* Sub Case 1: Set multi_key_conn_req to true*/
259
+ spdm_context -> connection_info .multi_key_conn_req = true;
260
+ libspdm_reset_message_encap_d (spdm_context , session_info );
261
+
262
+ response_size = sizeof (response );
263
+ status = libspdm_get_encap_response_digest (spdm_context ,
264
+ m_spdm_get_digests_request2_size ,
265
+ & m_spdm_get_digests_request2 ,
266
+ & response_size , response );
267
+ assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
268
+ assert_int_equal (
269
+ response_size ,
270
+ sizeof (spdm_digest_response_t ) + sizeof (spdm_key_pair_id_t ) +
271
+ sizeof (spdm_certificate_info_t ) +
272
+ sizeof (spdm_key_usage_bit_mask_t ) +
273
+ libspdm_get_hash_size (spdm_context -> connection_info
274
+ .algorithm .base_hash_algo ));
275
+ spdm_response = (void * )response ;
276
+ assert_int_equal (spdm_response -> header .request_response_code ,
277
+ SPDM_DIGESTS );
278
+ assert_int_equal (session_info -> session_transcript .message_encap_d .buffer_size ,
279
+ sizeof (spdm_digest_response_t ) + sizeof (spdm_key_pair_id_t ) +
280
+ sizeof (spdm_certificate_info_t ) +
281
+ sizeof (spdm_key_usage_bit_mask_t ) +
282
+ libspdm_get_hash_size (spdm_context -> connection_info .algorithm .base_hash_algo ));
283
+
284
+ /* Sub Case 2: Set multi_key_conn_req to false*/
285
+ spdm_context -> connection_info .multi_key_conn_req = false;
286
+ libspdm_reset_message_encap_d (spdm_context , session_info );
287
+
288
+ response_size = sizeof (response );
289
+ status = libspdm_get_encap_response_digest (spdm_context ,
290
+ m_spdm_get_digests_request2_size ,
291
+ & m_spdm_get_digests_request2 ,
292
+ & response_size , response );
293
+ assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
294
+ assert_int_equal (
295
+ response_size ,
296
+ sizeof (spdm_digest_response_t ) +
297
+ libspdm_get_hash_size (spdm_context -> connection_info
298
+ .algorithm .base_hash_algo ));
299
+ spdm_response = (void * )response ;
300
+ assert_int_equal (spdm_response -> header .request_response_code ,
301
+ SPDM_DIGESTS );
302
+ assert_int_equal (session_info -> session_transcript .message_encap_d .buffer_size , 0 );
303
+ }
304
+
201
305
libspdm_test_context_t m_spdm_requester_digests_test_context = {
202
306
LIBSPDM_TEST_CONTEXT_VERSION ,
203
307
false,
@@ -207,13 +311,15 @@ int libspdm_requester_encap_digests_test_main(void)
207
311
{
208
312
const struct CMUnitTest spdm_requester_digests_tests [] = {
209
313
/* Success Case*/
210
- cmocka_unit_test (test_spdm_requester_challenge_auth_case1 ),
314
+ cmocka_unit_test (test_spdm_requester_encap_get_digests_case1 ),
211
315
/* Can be populated with new test.*/
212
- cmocka_unit_test (test_spdm_requester_challenge_auth_case2 ),
316
+ cmocka_unit_test (test_spdm_requester_encap_get_digests_case2 ),
213
317
/* Internal cache full (request message)*/
214
- cmocka_unit_test (test_spdm_requester_challenge_auth_case3 ),
318
+ cmocka_unit_test (test_spdm_requester_encap_get_digests_case3 ),
215
319
/* Internal cache full (response message)*/
216
- cmocka_unit_test (test_spdm_requester_challenge_auth_case4 ),
320
+ cmocka_unit_test (test_spdm_requester_encap_get_digests_case4 ),
321
+ /* Set multi_key_conn_req to check if it responds correctly */
322
+ cmocka_unit_test (test_spdm_requester_encap_get_digests_case5 ),
217
323
};
218
324
219
325
libspdm_setup_test_context (& m_spdm_requester_digests_test_context );
0 commit comments