1
1
/**
2
2
* Copyright Notice:
3
- * Copyright 2021-2022 DMTF. All rights reserved.
3
+ * Copyright 2021-2025 DMTF. All rights reserved.
4
4
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
5
5
**/
6
6
@@ -145,10 +145,20 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_send_message(
145
145
return LIBSPDM_STATUS_SUCCESS ;
146
146
case 0x23 :
147
147
return LIBSPDM_STATUS_SUCCESS ;
148
+ case 0x24 :
149
+ return LIBSPDM_STATUS_SUCCESS ;
150
+ case 0x25 :
151
+ return LIBSPDM_STATUS_SUCCESS ;
148
152
default :
149
153
return LIBSPDM_STATUS_SEND_FAIL ;
150
154
}
151
155
}
156
+ typedef struct {
157
+ spdm_message_header_t header ;
158
+ uint8_t reserved ;
159
+ uint8_t version_number_entry_count ;
160
+ spdm_version_number_t version_number_entry [LIBSPDM_MAX_VERSION_COUNT ];
161
+ } libspdm_version_response_mine_t ;
152
162
153
163
static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message (
154
164
void * spdm_context , size_t * response_size ,
@@ -417,7 +427,8 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message(
417
427
size_t spdm_response_size ;
418
428
size_t transport_header_size ;
419
429
420
- spdm_response_size = sizeof (spdm_capabilities_response_t );
430
+ spdm_response_size = sizeof (spdm_capabilities_response_t ) -
431
+ sizeof (spdm_supported_algorithms_block_t );
421
432
transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE ;
422
433
spdm_response = (void * )((uint8_t * )* response + transport_header_size );
423
434
@@ -913,7 +924,8 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message(
913
924
size_t spdm_response_size ;
914
925
size_t transport_header_size ;
915
926
916
- spdm_response_size = sizeof (spdm_capabilities_response_t );
927
+ spdm_response_size = sizeof (spdm_capabilities_response_t ) -
928
+ sizeof (spdm_supported_algorithms_block_t );
917
929
transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE ;
918
930
spdm_response = (void * )((uint8_t * )* response + transport_header_size );
919
931
@@ -926,6 +938,7 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message(
926
938
spdm_response -> flags = LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_11 ;
927
939
928
940
spdm_response_size = sizeof (spdm_capabilities_response_t ) -
941
+ sizeof (spdm_supported_algorithms_block_t )-
929
942
sizeof (spdm_response -> data_transfer_size ) -
930
943
sizeof (spdm_response -> max_spdm_msg_size );
931
944
@@ -1008,6 +1021,75 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message(
1008
1021
spdm_response -> flags = LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13 ;
1009
1022
spdm_response -> data_transfer_size = LIBSPDM_DATA_TRANSFER_SIZE ;
1010
1023
spdm_response -> max_spdm_msg_size = LIBSPDM_MAX_SPDM_MSG_SIZE ;
1024
+ libspdm_transport_test_encode_message (spdm_context , NULL , false,
1025
+ false, spdm_response_size ,
1026
+ spdm_response ,
1027
+ response_size , response );
1028
+ }
1029
+ return LIBSPDM_STATUS_SUCCESS ;
1030
+ case 0x24 : {
1031
+ spdm_capabilities_response_t * spdm_response ;
1032
+ size_t spdm_response_size ;
1033
+ size_t transport_header_size ;
1034
+
1035
+ spdm_response_size = sizeof (spdm_capabilities_response_t ) + 4 *
1036
+ sizeof (spdm_negotiate_algorithms_common_struct_table_t );
1037
+ transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE ;
1038
+ spdm_response = (void * )((uint8_t * )* response + transport_header_size );
1039
+
1040
+ libspdm_zero_mem (spdm_response , spdm_response_size );
1041
+ spdm_response -> header .spdm_version = SPDM_MESSAGE_VERSION_13 ;
1042
+ spdm_response -> header .request_response_code = SPDM_CAPABILITIES ;
1043
+ spdm_response -> header .param1 = 0 ;
1044
+ spdm_response -> header .param2 = 0 ;
1045
+ spdm_response -> ct_exponent = 0 ;
1046
+ spdm_response -> flags = LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13 ;
1047
+ spdm_response -> data_transfer_size = LIBSPDM_DATA_TRANSFER_SIZE ;
1048
+ spdm_response -> max_spdm_msg_size = LIBSPDM_MAX_SPDM_MSG_SIZE ;
1049
+
1050
+ spdm_response -> supported_algorithms .param1 = 4 ;
1051
+ spdm_response -> supported_algorithms .param2 = 0 ;
1052
+ spdm_response -> supported_algorithms .length = sizeof (spdm_supported_algorithms_block_t ) +
1053
+ 4 *
1054
+ sizeof (
1055
+ spdm_negotiate_algorithms_common_struct_table_t );
1056
+ spdm_response -> supported_algorithms .measurement_specification =
1057
+ SPDM_MEASUREMENT_SPECIFICATION_DMTF ;
1058
+ spdm_response -> supported_algorithms .other_params_support = 0 ;
1059
+ spdm_response -> supported_algorithms .base_asym_algo = m_libspdm_use_asym_algo ;
1060
+ spdm_response -> supported_algorithms .base_hash_algo = m_libspdm_use_hash_algo ;
1061
+ spdm_response -> supported_algorithms .ext_asym_count = 0 ;
1062
+ spdm_response -> supported_algorithms .ext_hash_count = 0 ;
1063
+ spdm_response -> supported_algorithms .mel_specification = SPDM_MEL_SPECIFICATION_DMTF ;
1064
+
1065
+ spdm_negotiate_algorithms_common_struct_table_t * struct_table =
1066
+ (spdm_negotiate_algorithms_common_struct_table_t * )(& spdm_response -> supported_algorithms
1067
+ + 1 );
1068
+
1069
+ struct_table [0 ].alg_type =
1070
+ SPDM_NEGOTIATE_ALGORITHMS_STRUCT_TABLE_ALG_TYPE_DHE ;
1071
+ struct_table [0 ].alg_count = 0x20 ;
1072
+ struct_table [0 ].alg_supported =
1073
+ SPDM_ALGORITHMS_DHE_NAMED_GROUP_SECP_256_R1 ;
1074
+
1075
+ struct_table [1 ].alg_type =
1076
+ SPDM_NEGOTIATE_ALGORITHMS_STRUCT_TABLE_ALG_TYPE_AEAD ;
1077
+ struct_table [1 ].alg_count = 0x20 ;
1078
+ struct_table [1 ].alg_supported =
1079
+ SPDM_ALGORITHMS_AEAD_CIPHER_SUITE_AES_256_GCM ;;
1080
+
1081
+ struct_table [2 ].alg_type =
1082
+ SPDM_NEGOTIATE_ALGORITHMS_STRUCT_TABLE_ALG_TYPE_REQ_BASE_ASYM_ALG ;
1083
+ struct_table [2 ].alg_count = 0x20 ;
1084
+ struct_table [2 ].alg_supported =
1085
+ SPDM_ALGORITHMS_BASE_ASYM_ALGO_TPM_ALG_RSASSA_2048 ;
1086
+
1087
+ struct_table [3 ].alg_type =
1088
+ SPDM_NEGOTIATE_ALGORITHMS_STRUCT_TABLE_ALG_TYPE_KEY_SCHEDULE ;
1089
+ struct_table [3 ].alg_count = 0x20 ;
1090
+ struct_table [3 ].alg_supported =
1091
+ SPDM_ALGORITHMS_KEY_SCHEDULE_HMAC_HASH ;
1092
+
1011
1093
libspdm_transport_test_encode_message (spdm_context , NULL , false,
1012
1094
false, spdm_response_size ,
1013
1095
spdm_response ,
@@ -1044,7 +1126,7 @@ static void libspdm_test_requester_get_capabilities_case2(void **state)
1044
1126
1045
1127
spdm_context -> local_context .capability .ct_exponent = 0 ;
1046
1128
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG ;
1047
- status = libspdm_get_capabilities (spdm_context );
1129
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1048
1130
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1049
1131
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1050
1132
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1089,7 +1171,7 @@ static void libspdm_test_requester_get_capabilities_case6(void **state)
1089
1171
1090
1172
spdm_context -> local_context .capability .ct_exponent = 0 ;
1091
1173
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG ;
1092
- status = libspdm_get_capabilities (spdm_context );
1174
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1093
1175
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1094
1176
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1095
1177
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1130,7 +1212,7 @@ static void libspdm_test_requester_get_capabilities_case10(void **state)
1130
1212
1131
1213
spdm_context -> local_context .capability .ct_exponent = 0 ;
1132
1214
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG ;
1133
- status = libspdm_get_capabilities (spdm_context );
1215
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1134
1216
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1135
1217
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1136
1218
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1156,7 +1238,7 @@ static void libspdm_test_requester_get_capabilities_case11(void **state)
1156
1238
1157
1239
spdm_context -> local_context .capability .ct_exponent = 0 ;
1158
1240
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG ;
1159
- status = libspdm_get_capabilities (spdm_context );
1241
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1160
1242
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1161
1243
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1162
1244
assert_int_equal (
@@ -1183,7 +1265,7 @@ static void libspdm_test_requester_get_capabilities_case12(void **state)
1183
1265
1184
1266
spdm_context -> local_context .capability .ct_exponent = 0 ;
1185
1267
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG ;
1186
- status = libspdm_get_capabilities (spdm_context );
1268
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1187
1269
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1188
1270
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1189
1271
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1224,7 +1306,7 @@ static void libspdm_test_requester_get_capabilities_case16(void **state)
1224
1306
1225
1307
spdm_context -> local_context .capability .ct_exponent = 0 ;
1226
1308
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG_VERSION_11 ;
1227
- status = libspdm_get_capabilities (spdm_context );
1309
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1228
1310
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1229
1311
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1230
1312
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1343,7 +1425,7 @@ static void libspdm_test_requester_get_capabilities_case32(void **state)
1343
1425
1344
1426
spdm_context -> local_context .capability .ct_exponent = 0 ;
1345
1427
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG_VERSION_11 ;
1346
- status = libspdm_get_capabilities (spdm_context );
1428
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1347
1429
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1348
1430
assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1349
1431
assert_int_equal (spdm_context -> connection_info .capability .flags ,
@@ -1374,7 +1456,7 @@ static void libspdm_test_requester_get_capabilities_case33(void **state)
1374
1456
1375
1457
spdm_context -> local_context .capability .ct_exponent = 0 ;
1376
1458
spdm_context -> local_context .capability .flags = LIBSPDM_DEFAULT_CAPABILITY_FLAG_VERSION_12 ;
1377
- status = libspdm_get_capabilities (spdm_context );
1459
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1378
1460
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1379
1461
assert_int_equal (spdm_context -> connection_info .capability .max_spdm_msg_size ,
1380
1462
LIBSPDM_MAX_SPDM_MSG_SIZE );
@@ -1406,7 +1488,50 @@ static void libspdm_test_requester_get_capabilities_case35(void **state)
1406
1488
spdm_context -> connection_info .connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION ;
1407
1489
spdm_context -> local_context .capability .ct_exponent = 0 ;
1408
1490
1409
- status = libspdm_get_capabilities (spdm_context );
1491
+ status = libspdm_get_capabilities (spdm_context , false, NULL );
1492
+ assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1493
+ assert_int_equal (spdm_context -> connection_info .capability .max_spdm_msg_size ,
1494
+ LIBSPDM_MAX_SPDM_MSG_SIZE );
1495
+ assert_int_equal (spdm_context -> connection_info .capability .data_transfer_size ,
1496
+ LIBSPDM_DATA_TRANSFER_SIZE );
1497
+ assert_int_equal (spdm_context -> connection_info .capability .ct_exponent , 0 );
1498
+ assert_int_equal (spdm_context -> connection_info .capability .flags ,
1499
+ LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13 );
1500
+ }
1501
+
1502
+ static void libspdm_test_requester_get_capabilities_case36 (void * * state )
1503
+ {
1504
+ libspdm_return_t status ;
1505
+ libspdm_test_context_t * spdm_test_context ;
1506
+ libspdm_context_t * spdm_context ;
1507
+ spdm_responder_supported_algorithms_t supported_algs ;
1508
+
1509
+ spdm_test_context = * state ;
1510
+ spdm_context = spdm_test_context -> spdm_context ;
1511
+ spdm_test_context -> case_id = 0x24 ;
1512
+ spdm_context -> connection_info .version = SPDM_MESSAGE_VERSION_13 <<
1513
+ SPDM_VERSION_NUMBER_SHIFT_BIT ;
1514
+ spdm_context -> connection_info .connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION ;
1515
+ spdm_context -> local_context .capability .ct_exponent = 0 ;
1516
+
1517
+ spdm_context -> local_context .algorithm .measurement_spec = SPDM_MEASUREMENT_SPECIFICATION_DMTF ;
1518
+ spdm_context -> local_context .algorithm .other_params_support = 0 ;
1519
+ spdm_context -> local_context .algorithm .base_asym_algo = m_libspdm_use_asym_algo ;
1520
+ spdm_context -> local_context .algorithm .base_hash_algo = m_libspdm_use_hash_algo ;
1521
+ spdm_context -> local_context .algorithm .mel_spec = SPDM_MEL_SPECIFICATION_DMTF ;
1522
+
1523
+ spdm_context -> connection_info .capability .flags |=
1524
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP ;
1525
+ spdm_context -> connection_info .capability .flags |=
1526
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP ;
1527
+ spdm_context -> connection_info .capability .flags |=
1528
+ SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MUT_AUTH_CAP ;
1529
+
1530
+ spdm_context -> local_context .algorithm .dhe_named_group = m_libspdm_use_dhe_algo ;
1531
+ spdm_context -> local_context .algorithm .aead_cipher_suite = m_libspdm_use_aead_algo ;
1532
+ spdm_context -> local_context .algorithm .req_base_asym_alg = m_libspdm_use_req_asym_algo ;
1533
+ spdm_context -> local_context .algorithm .key_schedule = m_libspdm_use_key_schedule_algo ;
1534
+ status = libspdm_get_capabilities (spdm_context , true, & supported_algs );
1410
1535
assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
1411
1536
assert_int_equal (spdm_context -> connection_info .capability .max_spdm_msg_size ,
1412
1537
LIBSPDM_MAX_SPDM_MSG_SIZE );
@@ -1455,6 +1580,7 @@ int libspdm_requester_get_capabilities_test_main(void)
1455
1580
cmocka_unit_test (libspdm_test_requester_get_capabilities_case33 ),
1456
1581
/* cmocka_unit_test(libspdm_test_requester_get_capabilities_case34), */
1457
1582
cmocka_unit_test (libspdm_test_requester_get_capabilities_case35 ),
1583
+ cmocka_unit_test (libspdm_test_requester_get_capabilities_case36 ),
1458
1584
};
1459
1585
1460
1586
libspdm_test_context_t test_context = {
0 commit comments