Skip to content

Commit

Permalink
Add 1.3 MelAlgo dump
Browse files Browse the repository at this point in the history
Signed-off-by: Jiewen Yao <[email protected]>
  • Loading branch information
jyao1 committed Nov 23, 2023
1 parent cd378a7 commit 0af8aeb
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 0 deletions.
1 change: 1 addition & 0 deletions doc/spdm_dump.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ This document describes spdm_dump tool. It can be used to parse the SPDM message
[--hash SHA_256|SHA_384|SHA_512|SHA3_256|SHA3_384|SHA3_512|SM3_256]
[--meas_spec DMTF]
[--meas_hash RAW_BIT|SHA_256|SHA_384|SHA_512|SHA3_256|SHA3_384|SHA3_512|SM3_256]
[--mel_spec DMTF]
[--asym RSASSA_2048|RSASSA_3072|RSASSA_4096|RSAPSS_2048|RSAPSS_3072|RSAPSS_4096|ECDSA_P256|ECDSA_P384|ECDSA_P521|SM2_P256|EDDSA_25519|EDDSA_448]
[--req_asym RSASSA_2048|RSASSA_3072|RSASSA_4096|RSAPSS_2048|RSAPSS_3072|RSAPSS_4096|ECDSA_P256|ECDSA_P384|ECDSA_P521|SM2_P256|EDDSA_25519|EDDSA_448]
[--dhe FFDHE_2048|FFDHE_3072|FFDHE_4096|SECP_256_R1|SECP_384_R1|SECP_521_R1|SM2_P256]
Expand Down
30 changes: 30 additions & 0 deletions spdm_dump/spdm/spdm_dump_spdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ uint16_t m_spdm_aead_cipher_suite;
uint16_t m_spdm_req_base_asym_alg;
uint16_t m_spdm_key_schedule;
uint8_t m_spdm_other_params_support;
uint8_t m_spdm_mel_spec;

bool m_multi_key_conn_req;
bool m_multi_key_conn_rsp;

Expand Down Expand Up @@ -199,6 +201,12 @@ value_string_entry_t m_spdm_measurement_spec_value_string_table[] = {
size_t m_spdm_measurement_spec_value_string_table_count =
LIBSPDM_ARRAY_SIZE(m_spdm_measurement_spec_value_string_table);

value_string_entry_t m_spdm_mel_spec_value_string_table[] = {
{ SPDM_MEL_SPECIFICATION_DMTF, "DMTF" },
};
size_t m_spdm_mel_spec_value_string_table_count =
LIBSPDM_ARRAY_SIZE(m_spdm_mel_spec_value_string_table);

value_string_entry_t m_spdm_other_param_value_string_table[] = {
{ SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1, "OPAQUE_FMT_1" },
{ SPDM_ALGORITHMS_MULTI_KEY_CONN, "MULTI_KEY_CONN" },
Expand Down Expand Up @@ -657,6 +665,13 @@ void dump_spdm_negotiate_algorithms(const void *buffer, size_t buffer_size)
dump_entry_flags(m_spdm_asym_value_string_table,
LIBSPDM_ARRAY_SIZE(m_spdm_asym_value_string_table),
spdm_request->base_asym_algo);
if (spdm_request->header.spdm_version >=
SPDM_MESSAGE_VERSION_13) {
printf("), MelSpec=0x%02x(", spdm_request->mel_specification);
dump_entry_value(m_spdm_mel_spec_value_string_table,
LIBSPDM_ARRAY_SIZE(m_spdm_mel_spec_value_string_table),
spdm_request->mel_specification);
}

if (spdm_request->header.spdm_version >=
SPDM_MESSAGE_VERSION_11) {
Expand Down Expand Up @@ -794,6 +809,13 @@ void dump_spdm_algorithms(const void *buffer, size_t buffer_size)
dump_entry_value(m_spdm_asym_value_string_table,
LIBSPDM_ARRAY_SIZE(m_spdm_asym_value_string_table),
spdm_response->base_asym_sel);
if (spdm_response->header.spdm_version >=
SPDM_MESSAGE_VERSION_13) {
printf("), MelSpec=0x%02x(", spdm_response->mel_specification_sel);
dump_entry_value(m_spdm_mel_spec_value_string_table,
LIBSPDM_ARRAY_SIZE(m_spdm_mel_spec_value_string_table),
spdm_response->mel_specification_sel);
}

if (spdm_response->header.spdm_version >=
SPDM_MESSAGE_VERSION_11) {
Expand Down Expand Up @@ -905,6 +927,9 @@ void dump_spdm_algorithms(const void *buffer, size_t buffer_size)

if (spdm_response->header.spdm_version >= SPDM_MESSAGE_VERSION_12) {
m_spdm_other_params_support = spdm_response->other_params_selection;
if (spdm_response->header.spdm_version >= SPDM_MESSAGE_VERSION_13) {
m_spdm_mel_spec = spdm_response->mel_specification_sel;
}
}

libspdm_zero_mem(&parameter, sizeof(parameter));
Expand All @@ -928,6 +953,9 @@ void dump_spdm_algorithms(const void *buffer, size_t buffer_size)
&m_spdm_key_schedule, sizeof(uint16_t));
libspdm_set_data(m_spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&m_spdm_other_params_support, sizeof(uint8_t));
libspdm_set_data(m_spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&m_spdm_mel_spec, sizeof(uint8_t));

libspdm_set_data(m_spdm_context, LIBSPDM_DATA_MULTI_KEY_CONN_REQ, &parameter,
&m_multi_key_conn_req, sizeof(bool));
libspdm_set_data(m_spdm_context, LIBSPDM_DATA_MULTI_KEY_CONN_RSP, &parameter,
Expand Down Expand Up @@ -3538,6 +3566,8 @@ bool init_spdm_dump(void)
&m_spdm_key_schedule, sizeof(uint16_t));
libspdm_set_data(m_spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&m_spdm_other_params_support, sizeof(uint8_t));
libspdm_set_data(m_spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&m_spdm_mel_spec, sizeof(uint8_t));

return true;

Expand Down
28 changes: 28 additions & 0 deletions spdm_dump/spdm_dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ extern uint16_t m_spdm_aead_cipher_suite;
extern uint16_t m_spdm_req_base_asym_alg;
extern uint16_t m_spdm_key_schedule;
extern uint8_t m_spdm_other_params_support;
extern uint8_t m_spdm_mel_spec;

extern value_string_entry_t m_spdm_requester_capabilities_string_table[];
extern size_t m_spdm_requester_capabilities_string_table_count;
Expand All @@ -60,6 +61,8 @@ extern value_string_entry_t m_spdm_measurement_spec_value_string_table[];
extern size_t m_spdm_measurement_spec_value_string_table_count;
extern value_string_entry_t m_spdm_other_param_value_string_table[];
extern size_t m_spdm_other_param_value_string_table_count;
extern value_string_entry_t m_spdm_mel_spec_value_string_table[];
extern size_t m_spdm_mel_spec_value_string_table_count;

value_string_entry_t m_cert_chain_format_string_table[] = {
{ CERT_CHAIN_FORMAT_SPDM, "SPDM" },
Expand Down Expand Up @@ -229,6 +232,7 @@ void print_usage(void)
printf(" [--hash SHA_256|SHA_384|SHA_512|SHA3_256|SHA3_384|SHA3_512|SM3_256]\n");
printf(" [--meas_spec DMTF]\n");
printf(" [--meas_hash RAW_BIT|SHA_256|SHA_384|SHA_512|SHA3_256|SHA3_384|SHA3_512|SM3_256]\n");
printf(" [--mel_spec DMTF]\n");
printf(
" [--asym RSASSA_2048|RSASSA_3072|RSASSA_4096|RSAPSS_2048|RSAPSS_3072|RSAPSS_4096|ECDSA_P256|ECDSA_P384|ECDSA_P521|SM2_P256|EDDSA_25519|EDDSA_448]\n");
printf(
Expand Down Expand Up @@ -538,6 +542,30 @@ void process_args(int argc, char *argv[])
}
}

if (strcmp(argv[0], "--mel_spec") == 0) {
if (argc >= 2) {
if (!get_value_from_name(
m_spdm_mel_spec_value_string_table,
m_spdm_mel_spec_value_string_table_count,
argv[1], &data32)) {
printf("invalid --mel_spec %s\n",
argv[1]);
print_usage();
exit(0);
}
m_spdm_mel_spec = (uint8_t)data32;
printf("mel_spec - 0x%02x\n",
m_spdm_mel_spec);
argc -= 2;
argv += 2;
continue;
} else {
printf("invalid --mel_spec\n");
print_usage();
exit(0);
}
}

if (strcmp(argv[0], "--asym") == 0) {
if (argc >= 2) {
if (!get_value_from_name(
Expand Down

0 comments on commit 0af8aeb

Please sign in to comment.