Skip to content

Commit

Permalink
Add 1.3 MEL algorithm
Browse files Browse the repository at this point in the history
Signed-off-by: Jiewen Yao <[email protected]>
  • Loading branch information
jyao1 committed Nov 21, 2023
1 parent f7e94bc commit 51fa50d
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,9 @@ void *spdm_client_init(void)
data8 = m_support_other_params_support;
libspdm_set_data(spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&data8, sizeof(data8));
data8 = m_support_mel_spec;
libspdm_set_data(spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&data8, sizeof(data8));

status = libspdm_init_connection(spdm_context, false);
if (LIBSPDM_STATUS_IS_ERROR(status)) {
Expand Down
5 changes: 5 additions & 0 deletions spdm_emu/spdm_emu_common/key.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,11 @@ uint16_t m_support_key_schedule_algo = SPDM_ALGORITHMS_KEY_SCHEDULE_HMAC_HASH;
uint8_t m_support_other_params_support =
SPDM_ALGORITHMS_OPAQUE_DATA_FORMAT_1 |
SPDM_ALGORITHMS_MULTI_KEY_CONN;
/*
* SPDM_MEL_SPECIFICATION_DMTF,
*/
uint8_t m_support_mel_spec =
SPDM_MEL_SPECIFICATION_DMTF;

uint8_t m_session_policy =
SPDM_KEY_EXCHANGE_REQUEST_SESSION_POLICY_TERMINATION_POLICY_RUNTIME_UPDATE;
Expand Down
15 changes: 15 additions & 0 deletions spdm_emu/spdm_emu_common/nv_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,15 @@ libspdm_return_t spdm_provision_psk_version_only(void *spdm_context,
data8 = m_support_other_params_support;
libspdm_set_data(spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&data8, sizeof(data8));
if (m_use_version >= SPDM_MESSAGE_VERSION_13) {
if (!libspdm_onehot0(m_support_mel_spec)) {
printf("mel_spec has more bit set - 0x%02x\n", m_support_mel_spec);
return LIBSPDM_STATUS_UNSUPPORTED_CAP;
}
data8 = m_support_mel_spec;
libspdm_set_data(spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&data8, sizeof(data8));
}
}
} else {
data16 = 0;
Expand Down Expand Up @@ -229,6 +238,7 @@ libspdm_return_t spdm_load_negotiated_state(void *spdm_context,
m_support_req_asym_algo = negotiated_state.req_base_asym_alg;
m_support_key_schedule_algo = negotiated_state.key_schedule;
m_support_other_params_support = negotiated_state.other_params_support;
m_support_mel_spec = negotiated_state.mel_spec;

/* Set connection info*/

Expand Down Expand Up @@ -282,6 +292,11 @@ libspdm_return_t spdm_load_negotiated_state(void *spdm_context,
data8 = m_support_other_params_support;
libspdm_set_data(spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&data8, sizeof(data8));
if (m_use_version >= SPDM_MESSAGE_VERSION_13) {
data8 = m_support_mel_spec;
libspdm_set_data(spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&data8, sizeof(data8));
}
}
libspdm_set_data(spdm_context, LIBSPDM_DATA_VCA_CACHE, &parameter,
negotiated_state.vca_buffer, negotiated_state.vca_buffer_size);
Expand Down
1 change: 1 addition & 0 deletions spdm_emu/spdm_emu_common/nv_storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ typedef struct {
uint32_t responder_cap_flags;
uint8_t measurement_spec;
uint8_t other_params_support;
uint8_t mel_spec;
uint32_t measurement_hash_algo;
uint32_t base_asym_algo;
uint32_t base_hash_algo;
Expand Down
31 changes: 31 additions & 0 deletions spdm_emu/spdm_emu_common/spdm_emu.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ void print_usage(const char *name)
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 @@ -88,6 +89,7 @@ void print_usage(const char *name)
printf(" [--meas_spec] is measurement hash spec. By default, DMTF is used.\n");
printf(
" [--meas_hash] is measurement hash algorithm. By default, SHA_512,SHA_384,SHA_256 is used.\n");
printf(" [--mel_spec] is mel spec. By default, DMTF is used.\n");
printf(" [--asym] is asym algorithm. By default, ECDSA_P384,ECDSA_P256 is used.\n");
printf(
" [--req_asym] is requester asym algorithm. By default, RSAPSS_3072,RSAPSS_2048,RSASSA_3072,RSASSA_2048 is used.\n");
Expand Down Expand Up @@ -277,6 +279,10 @@ value_string_entry_t m_measurement_spec_value_string_table[] = {
{ SPDM_MEASUREMENT_SPECIFICATION_DMTF, "DMTF" },
};

value_string_entry_t m_mel_spec_value_string_table[] = {
{ SPDM_MEL_SPECIFICATION_DMTF, "DMTF" },
};

value_string_entry_t m_measurement_hash_value_string_table[] = {
{ SPDM_ALGORITHMS_MEASUREMENT_HASH_ALGO_RAW_BIT_STREAM_ONLY,
"RAW_BIT" },
Expand Down Expand Up @@ -712,6 +718,31 @@ void process_args(char *program_name, int argc, char *argv[])
}
}

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

if (strcmp(argv[0], "--meas_hash") == 0) {
if (argc >= 2) {
if (!get_flags_from_name(
Expand Down
1 change: 1 addition & 0 deletions spdm_emu/spdm_emu_common/spdm_emu.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ extern uint32_t m_use_asym_algo;
extern uint16_t m_use_req_asym_algo;

extern uint8_t m_support_measurement_spec;
extern uint8_t m_support_mel_spec;
extern uint32_t m_support_measurement_hash_algo;
extern uint32_t m_support_hash_algo;
extern uint32_t m_support_asym_algo;
Expand Down
3 changes: 3 additions & 0 deletions spdm_emu/spdm_requester_emu/spdm_requester_spdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,9 @@ void *spdm_client_init(void)
data8 = m_support_other_params_support;
libspdm_set_data(spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&data8, sizeof(data8));
data8 = m_support_mel_spec;
libspdm_set_data(spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&data8, sizeof(data8));

if (m_load_state_file_name == NULL) {
/* Skip if state is loaded*/
Expand Down
3 changes: 3 additions & 0 deletions spdm_emu/spdm_responder_emu/spdm_responder_spdm.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,9 @@ void *spdm_server_init(void)
data8 = m_support_other_params_support;
libspdm_set_data(spdm_context, LIBSPDM_DATA_OTHER_PARAMS_SUPPORT, &parameter,
&data8, sizeof(data8));
data8 = m_support_mel_spec;
libspdm_set_data(spdm_context, LIBSPDM_DATA_MEL_SPEC, &parameter,
&data8, sizeof(data8));

data8 = 0xF0;
libspdm_set_data(spdm_context, LIBSPDM_DATA_HEARTBEAT_PERIOD, &parameter,
Expand Down

0 comments on commit 51fa50d

Please sign in to comment.