Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix the salt value in export/import function. #2319

Merged
merged 2 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 12 additions & 14 deletions library/spdm_secured_message_lib/libspdm_secmes_encode_decode.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ libspdm_return_t libspdm_encode_secured_message(
bool result;
const uint8_t *key;
uint8_t *salt;
uint8_t iv[LIBSPDM_MAX_AEAD_IV_SIZE];
uint64_t sequence_number;
uint64_t sequence_num_in_header;
uint64_t data64;
Expand Down Expand Up @@ -126,11 +127,9 @@ libspdm_return_t libspdm_encode_secured_message(
return LIBSPDM_STATUS_SEQUENCE_NUMBER_OVERFLOW;
}

if (sequence_number > 0) {
data64 = libspdm_read_uint64((const uint8_t *)salt) ^
(sequence_number - 1) ^ sequence_number;
libspdm_write_uint64(salt, data64);
}
libspdm_copy_mem (iv, LIBSPDM_MAX_AEAD_IV_SIZE, salt, aead_iv_size);
data64 = libspdm_read_uint64((const uint8_t *)iv) ^ sequence_number;
libspdm_write_uint64(iv, data64);

sequence_num_in_header = 0;
sequence_num_in_header_size = spdm_secured_message_callbacks->get_sequence_number(
Expand Down Expand Up @@ -218,7 +217,7 @@ libspdm_return_t libspdm_encode_secured_message(
result = libspdm_aead_encryption(
secured_message_context->secured_message_version,
secured_message_context->aead_cipher_suite, key,
aead_key_size, salt, aead_iv_size, (uint8_t *)a_data,
aead_key_size, iv, aead_iv_size, (uint8_t *)a_data,
record_header_size, dec_msg, cipher_text_size, tag,
aead_tag_size, enc_msg, &cipher_text_size);
break;
Expand Down Expand Up @@ -256,7 +255,7 @@ libspdm_return_t libspdm_encode_secured_message(
result = libspdm_aead_encryption(
secured_message_context->secured_message_version,
secured_message_context->aead_cipher_suite, key,
aead_key_size, salt, aead_iv_size, (uint8_t *)a_data,
aead_key_size, iv, aead_iv_size, (uint8_t *)a_data,
record_header_size + app_message_size, NULL, 0, tag,
aead_tag_size, NULL, NULL);
break;
Expand Down Expand Up @@ -315,6 +314,7 @@ libspdm_return_t libspdm_decode_secured_message(
bool result;
const uint8_t *key;
uint8_t *salt;
uint8_t iv[LIBSPDM_MAX_AEAD_IV_SIZE];
uint64_t sequence_number;
uint64_t sequence_num_in_header;
uint64_t data64;
Expand Down Expand Up @@ -397,11 +397,9 @@ libspdm_return_t libspdm_decode_secured_message(
return LIBSPDM_STATUS_SEQUENCE_NUMBER_OVERFLOW;
}

if (sequence_number > 0) {
data64 = libspdm_read_uint64((const uint8_t *)salt) ^
(sequence_number - 1) ^ sequence_number;
libspdm_write_uint64(salt, data64);
}
libspdm_copy_mem (iv, LIBSPDM_MAX_AEAD_IV_SIZE, salt, aead_iv_size);
data64 = libspdm_read_uint64((const uint8_t *)iv) ^ sequence_number;
libspdm_write_uint64(iv, data64);

sequence_num_in_header = 0;
sequence_num_in_header_size =
Expand Down Expand Up @@ -480,7 +478,7 @@ libspdm_return_t libspdm_decode_secured_message(
result = libspdm_aead_decryption(
secured_message_context->secured_message_version,
secured_message_context->aead_cipher_suite, key,
aead_key_size, salt, aead_iv_size, a_data,
aead_key_size, iv, aead_iv_size, a_data,
record_header_size, enc_msg, cipher_text_size, tag,
aead_tag_size, dec_msg, &cipher_text_size);
if (!result) {
Expand Down Expand Up @@ -545,7 +543,7 @@ libspdm_return_t libspdm_decode_secured_message(
result = libspdm_aead_decryption(
secured_message_context->secured_message_version,
secured_message_context->aead_cipher_suite, key,
aead_key_size, salt, aead_iv_size, a_data,
aead_key_size, iv, aead_iv_size, a_data,
record_header_size + record_header2->length -
aead_tag_size,
NULL, 0, tag, aead_tag_size, NULL, NULL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
size_t aead_tag_max_size;
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -117,14 +115,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
/* WALKAROUND: If just use single context to encode message and then decode message */
((libspdm_secured_message_context_t *)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

sub_index++;
return LIBSPDM_STATUS_SUCCESS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
size_t aead_tag_max_size;
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -102,14 +100,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
/* WALKAROUND: If just use single context to encode message and then decode message */
((libspdm_secured_message_context_t *)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context,
uint8_t *app_message;
size_t app_message_size;
uint8_t message_buffer[LIBSPDM_SENDER_BUFFER_SIZE];
uint64_t sequence_number;
uint8_t *salt;

memcpy(message_buffer, request, request_size);
if (!m_secured_on_off)
Expand Down Expand Up @@ -63,14 +61,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context,
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.request_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

return LIBSPDM_STATUS_SUCCESS;
}
Expand Down Expand Up @@ -117,8 +107,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
size_t aead_tag_max_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -165,15 +153,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

}
return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
size_t aead_tag_max_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_response_size = spdm_test_context->test_buffer_size;
Expand Down Expand Up @@ -105,15 +103,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

}
return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
size_t aead_tag_max_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_response_size = spdm_test_context->test_buffer_size;
Expand Down Expand Up @@ -156,15 +154,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

}
return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
size_t aead_tag_max_size;
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -104,14 +102,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
/* WALKAROUND: If just use single context to encode message and then decode message */
((libspdm_secured_message_context_t *)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context, size_t request_
bool is_app_message;
libspdm_session_info_t *session_info;
uint8_t message_buffer[LIBSPDM_SENDER_BUFFER_SIZE];
uint64_t sequence_number;
uint8_t *salt;

message_session_id = NULL;
session_id = 0xFFFFFFFF;
Expand All @@ -139,14 +137,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context, size_t request_
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.request_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}
libspdm_get_scratch_buffer (spdm_context, (void **)&decoded_message, &decoded_message_size);
status = libspdm_transport_test_decode_message(spdm_context,
&message_session_id, &is_app_message, true,
Expand Down Expand Up @@ -176,8 +166,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
size_t scratch_buffer_size;
size_t aead_tag_max_size;
static uint8_t sub_index = 0;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
session_info = libspdm_get_session_info_via_session_id(spdm_context, session_id);
Expand Down Expand Up @@ -236,14 +224,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
/* WALKAROUND: If just use single context to encode message and then decode message */
((libspdm_secured_message_context_t *)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

if (sub_index != 0) {
sub_index = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
size_t aead_tag_max_size;
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -111,15 +109,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context, size_t *resp
((libspdm_secured_message_context_t *)(session_info->secured_message_context))
->handshake_secret.response_handshake_sequence_number--;

salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->handshake_secret.response_handshake_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->handshake_secret.response_handshake_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

return LIBSPDM_STATUS_SUCCESS;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context,
uint8_t *app_message;
size_t app_message_size;
uint8_t message_buffer[LIBSPDM_SENDER_BUFFER_SIZE];
uint64_t sequence_number;
uint8_t *salt;

memcpy(message_buffer, request, request_size);
if (!m_secured_on_off)
Expand Down Expand Up @@ -61,14 +59,6 @@ libspdm_return_t libspdm_device_send_message(void *spdm_context,
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.request_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.request_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}

return LIBSPDM_STATUS_SUCCESS;
}
Expand Down Expand Up @@ -115,8 +105,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
uint8_t *scratch_buffer;
size_t scratch_buffer_size;
size_t aead_tag_max_size;
uint64_t sequence_number;
uint8_t *salt;

session_id = 0xFFFFFFFF;
spdm_test_context = libspdm_get_test_context();
Expand Down Expand Up @@ -161,14 +149,6 @@ libspdm_return_t libspdm_device_receive_message(void *spdm_context,
((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number--;
salt = ((libspdm_secured_message_context_t*)(session_info->secured_message_context))
->application_secret.response_data_salt;
sequence_number = ((libspdm_secured_message_context_t
*)(session_info->secured_message_context))
->application_secret.response_data_sequence_number;
if (sequence_number > 0) {
*(uint64_t *)salt = *(uint64_t *)salt ^ (sequence_number - 1) ^ sequence_number;
}
}
return LIBSPDM_STATUS_SUCCESS;
}
Expand Down
Loading