LCOV - code coverage report
Current view: top level - unit_test/test_spdm_responder - key_update.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 690 690
Test Date: 2025-06-29 08:09:00 Functions: 100.0 % 31 31

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2021-2022 DMTF. All rights reserved.
       4              :  *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
       5              :  **/
       6              : 
       7              : #include "spdm_unit_test.h"
       8              : #include "internal/libspdm_responder_lib.h"
       9              : #include "internal/libspdm_secured_message_lib.h"
      10              : 
      11              : #if (LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP) || (LIBSPDM_ENABLE_CAPABILITY_PSK_CAP)
      12              : 
      13              : spdm_key_update_request_t m_libspdm_key_update_request1 = {
      14              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      15              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY, 0x3 }
      16              : };
      17              : size_t m_libspdm_key_update_request1_size = sizeof(m_libspdm_key_update_request1);
      18              : 
      19              : spdm_key_update_request_t m_libspdm_key_update_request2 = {
      20              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      21              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY, 0x3 }
      22              : };
      23              : size_t m_libspdm_key_update_request2_size = LIBSPDM_MAX_SPDM_MSG_SIZE;
      24              : 
      25              : spdm_key_update_request_t m_libspdm_key_update_request3 = {
      26              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      27              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS, 0x71 }
      28              : };
      29              : size_t m_libspdm_key_update_request3_size = sizeof(m_libspdm_key_update_request3);
      30              : 
      31              : spdm_key_update_request_t m_libspdm_key_update_request4 = {
      32              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      33              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS, 0x71 }
      34              : };
      35              : size_t m_libspdm_key_update_request4_size = LIBSPDM_MAX_SPDM_MSG_SIZE;
      36              : 
      37              : spdm_key_update_request_t m_libspdm_key_update_request5 = {
      38              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      39              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_VERIFY_NEW_KEY, 0x4A }
      40              : };
      41              : size_t m_libspdm_key_update_request5_size = sizeof(m_libspdm_key_update_request5);
      42              : 
      43              : spdm_key_update_request_t m_libspdm_key_update_request6 = {
      44              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      45              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_VERIFY_NEW_KEY, 0x4A }
      46              : };
      47              : size_t m_libspdm_key_update_request6_size = LIBSPDM_MAX_SPDM_MSG_SIZE;
      48              : 
      49              : spdm_key_update_request_t m_libspdm_key_update_request7 = {
      50              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      51              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY, 0x92 }
      52              : };
      53              : size_t m_libspdm_key_update_request7_size = sizeof(m_libspdm_key_update_request7);
      54              : 
      55              : spdm_key_update_request_t m_libspdm_key_update_request8 = {
      56              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      57              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS, 0x13 }
      58              : };
      59              : size_t m_libspdm_key_update_request8_size = sizeof(m_libspdm_key_update_request8);
      60              : 
      61              : spdm_key_update_request_t m_libspdm_key_update_request9 = {
      62              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE,
      63              :       SPDM_KEY_UPDATE_OPERATIONS_TABLE_VERIFY_NEW_KEY, 0x22 }
      64              : };
      65              : size_t m_libspdm_key_update_request9_size = sizeof(m_libspdm_key_update_request9);
      66              : 
      67              : spdm_key_update_request_t m_libspdm_key_update_request10 = {
      68              :     { SPDM_MESSAGE_VERSION_11, SPDM_KEY_UPDATE, 0xFF, 0x12 }
      69              : };
      70              : size_t m_libspdm_key_update_request10_size = sizeof(m_libspdm_key_update_request10);
      71              : 
      72           27 : static void libspdm_set_standard_key_update_test_state(
      73              :     libspdm_context_t *spdm_context, uint32_t *session_id)
      74              : {
      75              :     libspdm_session_info_t    *session_info;
      76              : 
      77           27 :     spdm_context->response_state = LIBSPDM_RESPONSE_STATE_NORMAL;
      78           27 :     spdm_context->connection_info.connection_state =
      79              :         LIBSPDM_CONNECTION_STATE_NEGOTIATED;
      80           27 :     spdm_context->connection_info.capability.flags |=
      81              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_UPD_CAP;
      82           27 :     spdm_context->connection_info.capability.flags |=
      83              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP;
      84           27 :     spdm_context->connection_info.capability.flags |=
      85              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MAC_CAP;
      86           27 :     spdm_context->local_context.capability.flags |=
      87              :         SPDM_GET_CAPABILITIES_REQUEST_FLAGS_KEY_UPD_CAP;
      88           27 :     spdm_context->local_context.capability.flags |=
      89              :         SPDM_GET_CAPABILITIES_REQUEST_FLAGS_ENCRYPT_CAP;
      90           27 :     spdm_context->local_context.capability.flags |=
      91              :         SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MAC_CAP;
      92              : 
      93           27 :     spdm_context->transcript.message_a.buffer_size = 0;
      94           27 :     spdm_context->connection_info.algorithm.base_hash_algo =
      95              :         m_libspdm_use_hash_algo;
      96           27 :     spdm_context->connection_info.algorithm.base_asym_algo =
      97              :         m_libspdm_use_asym_algo;
      98           27 :     spdm_context->connection_info.algorithm.dhe_named_group =
      99              :         m_libspdm_use_dhe_algo;
     100           27 :     spdm_context->connection_info.algorithm.aead_cipher_suite =
     101              :         m_libspdm_use_aead_algo;
     102              : 
     103           27 :     *session_id = 0xFFFFFFFF;
     104           27 :     spdm_context->latest_session_id = *session_id;
     105           27 :     spdm_context->last_spdm_request_session_id_valid = true;
     106           27 :     spdm_context->last_spdm_request_session_id = *session_id;
     107           27 :     session_info = &spdm_context->session_info[0];
     108           27 :     libspdm_session_info_init(spdm_context, session_info, *session_id, true);
     109           27 :     libspdm_secured_message_set_session_state(
     110              :         session_info->secured_message_context,
     111              :         LIBSPDM_SESSION_STATE_ESTABLISHED);
     112           27 : }
     113              : 
     114           27 : static void libspdm_set_standard_key_update_test_secrets(
     115              :     libspdm_secured_message_context_t *secured_message_context,
     116              :     uint8_t *m_rsp_secret_buffer, uint8_t rsp_secret_fill,
     117              :     uint8_t *m_req_secret_buffer, uint8_t req_secret_fill)
     118              : {
     119           27 :     libspdm_set_mem(m_rsp_secret_buffer, secured_message_context
     120              :                     ->hash_size, rsp_secret_fill);
     121           27 :     libspdm_set_mem(m_req_secret_buffer, secured_message_context
     122              :                     ->hash_size, req_secret_fill);
     123              : 
     124           27 :     libspdm_copy_mem(secured_message_context->application_secret.response_data_secret,
     125              :                      sizeof(secured_message_context->application_secret.response_data_secret),
     126              :                      m_rsp_secret_buffer, secured_message_context->aead_key_size);
     127           27 :     libspdm_copy_mem(secured_message_context->application_secret.request_data_secret,
     128              :                      sizeof(secured_message_context->application_secret.request_data_secret),
     129              :                      m_req_secret_buffer, secured_message_context->aead_key_size);
     130              : 
     131           27 :     libspdm_set_mem(secured_message_context->application_secret
     132           27 :                     .response_data_encryption_key,
     133              :                     secured_message_context->aead_key_size, (uint8_t)(0xFF));
     134           27 :     libspdm_set_mem(secured_message_context->application_secret
     135           27 :                     .response_data_salt,
     136              :                     secured_message_context->aead_iv_size, (uint8_t)(0xFF));
     137              : 
     138              : 
     139           27 :     libspdm_set_mem(secured_message_context->application_secret
     140           27 :                     .request_data_encryption_key,
     141              :                     secured_message_context->aead_key_size, (uint8_t)(0xEE));
     142           27 :     libspdm_set_mem(secured_message_context->application_secret
     143           27 :                     .request_data_salt,
     144              :                     secured_message_context->aead_iv_size, (uint8_t)(0xEE));
     145              : 
     146              :     secured_message_context->application_secret.
     147           27 :     response_data_sequence_number = 0;
     148              :     secured_message_context->application_secret.
     149           27 :     request_data_sequence_number = 0;
     150           27 : }
     151              : 
     152           30 : static void libspdm_compute_secret_update(spdm_version_number_t spdm_version,
     153              :                                           size_t hash_size,
     154              :                                           const uint8_t *in_secret, uint8_t *out_secret,
     155              :                                           size_t out_secret_size)
     156              : {
     157              :     uint8_t bin_str9[128];
     158              :     size_t bin_str9_size;
     159              : 
     160           30 :     bin_str9_size = sizeof(bin_str9);
     161           30 :     libspdm_bin_concat(spdm_version,
     162              :                        SPDM_BIN_STR_9_LABEL, sizeof(SPDM_BIN_STR_9_LABEL) - 1,
     163           30 :                        NULL, (uint16_t)hash_size, hash_size, bin_str9,
     164              :                        &bin_str9_size);
     165              : 
     166           30 :     libspdm_hkdf_expand(m_libspdm_use_hash_algo, in_secret, hash_size, bin_str9,
     167              :                         bin_str9_size, out_secret, out_secret_size);
     168           30 : }
     169              : 
     170              : /**
     171              :  * Test 1: receiving a correct KEY_UPDATE message from the requester with
     172              :  * the UpdateKey operation.
     173              :  * Expected behavior: the responder accepts the request, produces a valid
     174              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
     175              :  **/
     176            1 : void libspdm_test_responder_key_update_case1(void **state)
     177              : {
     178              :     libspdm_return_t status;
     179              :     libspdm_test_context_t            *spdm_test_context;
     180              :     libspdm_context_t                 *spdm_context;
     181              :     uint32_t session_id;
     182              :     libspdm_session_info_t            *session_info;
     183              :     libspdm_secured_message_context_t *secured_message_context;
     184              : 
     185              :     size_t response_size;
     186              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     187              :     spdm_key_update_response_t *spdm_response;
     188              : 
     189              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     190              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     191              : 
     192            1 :     spdm_test_context = *state;
     193            1 :     spdm_context = spdm_test_context->spdm_context;
     194            1 :     spdm_test_context->case_id = 0x1;
     195            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     196              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     197              : 
     198            1 :     libspdm_set_standard_key_update_test_state(
     199              :         spdm_context, &session_id);
     200              : 
     201            1 :     session_info = &spdm_context->session_info[0];
     202            1 :     secured_message_context = session_info->secured_message_context;
     203              : 
     204            1 :     libspdm_set_standard_key_update_test_secrets(
     205            1 :         session_info->secured_message_context,
     206              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     207              :         m_req_secret_buffer, (uint8_t)(0xEE));
     208              : 
     209              :     /*request side updated*/
     210            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
     211              :                                   secured_message_context->hash_size,
     212              :                                   m_req_secret_buffer, m_req_secret_buffer,
     213              :                                   secured_message_context->hash_size);
     214              :     /*response side *not* updated*/
     215              : 
     216            1 :     response_size = sizeof(response);
     217            1 :     status = libspdm_get_response_key_update(spdm_context,
     218              :                                              m_libspdm_key_update_request1_size,
     219              :                                              &m_libspdm_key_update_request1,
     220              :                                              &response_size, response);
     221              : 
     222            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     223            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
     224            1 :     spdm_response = (void *)response;
     225            1 :     assert_int_equal(spdm_response->header.request_response_code,
     226              :                      SPDM_KEY_UPDATE_ACK);
     227            1 :     assert_int_equal(spdm_response->header.param1,
     228              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY);
     229            1 :     assert_int_equal(spdm_response->header.param2,
     230              :                      m_libspdm_key_update_request1.header.param2);
     231            1 :     assert_memory_equal(secured_message_context
     232              :                         ->application_secret.request_data_secret,
     233              :                         m_req_secret_buffer, secured_message_context->hash_size);
     234            1 :     assert_memory_equal(secured_message_context
     235              :                         ->application_secret.response_data_secret,
     236              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     237            1 : }
     238              : 
     239              : /**
     240              :  * Test 2: receiving a KEY_UPDATE message larger than specified, with the
     241              :  * UpdateKey operation.
     242              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
     243              :  * produces an ERROR message indicating the InvalidRequest. No keys
     244              :  * are updated.
     245              :  **/
     246            1 : void libspdm_test_responder_key_update_case2(void **state)
     247              : {
     248              :     libspdm_return_t status;
     249              :     libspdm_test_context_t            *spdm_test_context;
     250              :     libspdm_context_t                 *spdm_context;
     251              :     uint32_t session_id;
     252              :     libspdm_session_info_t            *session_info;
     253              :     libspdm_secured_message_context_t *secured_message_context;
     254              : 
     255              :     size_t response_size;
     256              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     257              :     spdm_key_update_response_t *spdm_response;
     258              : 
     259              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     260              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     261              : 
     262            1 :     spdm_test_context = *state;
     263            1 :     spdm_context = spdm_test_context->spdm_context;
     264            1 :     spdm_test_context->case_id = 0x2;
     265            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     266              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     267              : 
     268            1 :     libspdm_set_standard_key_update_test_state(
     269              :         spdm_context, &session_id);
     270              : 
     271            1 :     session_info = &spdm_context->session_info[0];
     272            1 :     secured_message_context = session_info->secured_message_context;
     273              : 
     274            1 :     libspdm_set_standard_key_update_test_secrets(
     275            1 :         session_info->secured_message_context,
     276              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     277              :         m_req_secret_buffer, (uint8_t)(0xEE));
     278              : 
     279              :     /*no keys are updated*/
     280              : 
     281            1 :     response_size = sizeof(response);
     282            1 :     status = libspdm_get_response_key_update(spdm_context,
     283              :                                              m_libspdm_key_update_request2_size,
     284              :                                              &m_libspdm_key_update_request2,
     285              :                                              &response_size, response);
     286              : 
     287            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     288            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     289            1 :     spdm_response = (void *)response;
     290            1 :     assert_int_equal(spdm_response->header.request_response_code,
     291              :                      SPDM_ERROR);
     292            1 :     assert_int_equal(spdm_response->header.param1,
     293              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
     294            1 :     assert_int_equal(spdm_response->header.param2, 0);
     295            1 :     assert_memory_equal(secured_message_context
     296              :                         ->application_secret.request_data_secret,
     297              :                         m_req_secret_buffer, secured_message_context->hash_size);
     298            1 :     assert_memory_equal(secured_message_context
     299              :                         ->application_secret.response_data_secret,
     300              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     301            1 : }
     302              : 
     303              : /**
     304              :  * Test 3: receiving a correct KEY_UPDATE from the requester, but the
     305              :  * responder is in a Busy state.
     306              :  * Expected behavior: the responder accepts the request, but produces an
     307              :  * ERROR message indicating the Busy state. No keys are updated.
     308              :  **/
     309            1 : void libspdm_test_responder_key_update_case3(void **state)
     310              : {
     311              :     libspdm_return_t status;
     312              :     libspdm_test_context_t            *spdm_test_context;
     313              :     libspdm_context_t                 *spdm_context;
     314              :     uint32_t session_id;
     315              :     libspdm_session_info_t            *session_info;
     316              :     libspdm_secured_message_context_t *secured_message_context;
     317              : 
     318              :     size_t response_size;
     319              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     320              :     spdm_key_update_response_t *spdm_response;
     321              : 
     322              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     323              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     324              : 
     325            1 :     spdm_test_context = *state;
     326            1 :     spdm_context = spdm_test_context->spdm_context;
     327            1 :     spdm_test_context->case_id = 0x3;
     328            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     329              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     330              : 
     331            1 :     libspdm_set_standard_key_update_test_state(
     332              :         spdm_context, &session_id);
     333              : 
     334              :     /*busy state*/
     335            1 :     spdm_context->response_state = LIBSPDM_RESPONSE_STATE_BUSY;
     336              : 
     337            1 :     session_info = &spdm_context->session_info[0];
     338            1 :     secured_message_context = session_info->secured_message_context;
     339              : 
     340            1 :     libspdm_set_standard_key_update_test_secrets(
     341            1 :         session_info->secured_message_context,
     342              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     343              :         m_req_secret_buffer, (uint8_t)(0xEE));
     344              : 
     345              :     /*no keys are updated*/
     346              : 
     347            1 :     response_size = sizeof(response);
     348            1 :     status = libspdm_get_response_key_update(spdm_context,
     349              :                                              m_libspdm_key_update_request1_size,
     350              :                                              &m_libspdm_key_update_request1,
     351              :                                              &response_size, response);
     352              : 
     353            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     354            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     355            1 :     spdm_response = (void *)response;
     356            1 :     assert_int_equal(spdm_response->header.request_response_code,
     357              :                      SPDM_ERROR);
     358            1 :     assert_int_equal(spdm_response->header.param1, SPDM_ERROR_CODE_BUSY);
     359            1 :     assert_int_equal(spdm_response->header.param2, 0);
     360            1 :     assert_int_equal(spdm_context->response_state,
     361              :                      LIBSPDM_RESPONSE_STATE_BUSY);
     362            1 :     assert_memory_equal(secured_message_context
     363              :                         ->application_secret.request_data_secret,
     364              :                         m_req_secret_buffer, secured_message_context->hash_size);
     365            1 :     assert_memory_equal(secured_message_context
     366              :                         ->application_secret.response_data_secret,
     367              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     368            1 : }
     369              : 
     370              : /**
     371              :  * Test 4: receiving a correct KEY_UPDATE message from the requester, but
     372              :  * the responder requires resynchronization with the requester.
     373              :  * Expected behavior: the responder accepts the request, but produces an
     374              :  * ERROR message indicating the NeedResynch state. No keys are updated.
     375              :  **/
     376            1 : void libspdm_test_responder_key_update_case4(void **state)
     377              : {
     378              :     libspdm_return_t status;
     379              :     libspdm_test_context_t            *spdm_test_context;
     380              :     libspdm_context_t                 *spdm_context;
     381              :     uint32_t session_id;
     382              :     libspdm_session_info_t            *session_info;
     383              :     libspdm_secured_message_context_t *secured_message_context;
     384              : 
     385              :     size_t response_size;
     386              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     387              :     spdm_key_update_response_t *spdm_response;
     388              : 
     389              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     390              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     391              : 
     392            1 :     spdm_test_context = *state;
     393            1 :     spdm_context = spdm_test_context->spdm_context;
     394            1 :     spdm_test_context->case_id = 0x4;
     395            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     396              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     397              : 
     398            1 :     libspdm_set_standard_key_update_test_state(
     399              :         spdm_context, &session_id);
     400              : 
     401              :     /*need resync state*/
     402            1 :     spdm_context->response_state = LIBSPDM_RESPONSE_STATE_NEED_RESYNC;
     403              : 
     404            1 :     session_info = &spdm_context->session_info[0];
     405            1 :     secured_message_context = session_info->secured_message_context;
     406              : 
     407            1 :     libspdm_set_standard_key_update_test_secrets(
     408            1 :         session_info->secured_message_context,
     409              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     410              :         m_req_secret_buffer, (uint8_t)(0xEE));
     411              : 
     412              :     /*no keys are updated*/
     413              : 
     414            1 :     response_size = sizeof(response);
     415            1 :     status = libspdm_get_response_key_update(spdm_context,
     416              :                                              m_libspdm_key_update_request1_size,
     417              :                                              &m_libspdm_key_update_request1,
     418              :                                              &response_size, response);
     419              : 
     420            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     421            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     422            1 :     spdm_response = (void *)response;
     423            1 :     assert_int_equal(spdm_response->header.request_response_code,
     424              :                      SPDM_ERROR);
     425            1 :     assert_int_equal(spdm_response->header.param1,
     426              :                      SPDM_ERROR_CODE_REQUEST_RESYNCH);
     427            1 :     assert_int_equal(spdm_response->header.param2, 0);
     428            1 :     assert_int_equal(spdm_context->response_state,
     429              :                      LIBSPDM_RESPONSE_STATE_NEED_RESYNC);
     430            1 :     assert_memory_equal(secured_message_context
     431              :                         ->application_secret.request_data_secret,
     432              :                         m_req_secret_buffer, secured_message_context->hash_size);
     433            1 :     assert_memory_equal(secured_message_context
     434              :                         ->application_secret.response_data_secret,
     435              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     436            1 : }
     437              : 
     438              : #if LIBSPDM_RESPOND_IF_READY_SUPPORT
     439              : /**
     440              :  * Test 5: receiving a correct KEY_UPDATE from the requester, but the
     441              :  * responder could not produce the response in time.
     442              :  * Expected behavior: the responder accepts the request, but produces an
     443              :  * ERROR message indicating the ResponseNotReady state. No keys are
     444              :  * updated.
     445              :  **/
     446            1 : void libspdm_test_responder_key_update_case5(void **state)
     447              : {
     448              :     libspdm_return_t status;
     449              :     libspdm_test_context_t            *spdm_test_context;
     450              :     libspdm_context_t                 *spdm_context;
     451              :     uint32_t session_id;
     452              :     libspdm_session_info_t            *session_info;
     453              :     libspdm_secured_message_context_t *secured_message_context;
     454              : 
     455              :     size_t response_size;
     456              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     457              :     spdm_key_update_response_t *spdm_response;
     458              :     spdm_error_data_response_not_ready_t *error_data;
     459              : 
     460              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     461              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     462              : 
     463            1 :     spdm_test_context = *state;
     464            1 :     spdm_context = spdm_test_context->spdm_context;
     465            1 :     spdm_test_context->case_id = 0x5;
     466            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     467              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     468              : 
     469            1 :     libspdm_set_standard_key_update_test_state(
     470              :         spdm_context, &session_id);
     471              : 
     472              :     /*not ready state*/
     473            1 :     spdm_context->response_state = LIBSPDM_RESPONSE_STATE_NOT_READY;
     474              : 
     475            1 :     session_info = &spdm_context->session_info[0];
     476            1 :     secured_message_context = session_info->secured_message_context;
     477              : 
     478            1 :     libspdm_set_standard_key_update_test_secrets(
     479            1 :         session_info->secured_message_context,
     480              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     481              :         m_req_secret_buffer, (uint8_t)(0xEE));
     482              : 
     483              :     /*no keys are updated*/
     484              : 
     485            1 :     response_size = sizeof(response);
     486            1 :     status = libspdm_get_response_key_update(spdm_context,
     487              :                                              m_libspdm_key_update_request1_size,
     488              :                                              &m_libspdm_key_update_request1,
     489              :                                              &response_size, response);
     490              : 
     491            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     492            1 :     assert_int_equal(response_size,
     493              :                      sizeof(spdm_error_response_t) +
     494              :                      sizeof(spdm_error_data_response_not_ready_t));
     495            1 :     spdm_response = (void *)response;
     496            1 :     error_data =
     497              :         (spdm_error_data_response_not_ready_t *)(spdm_response + 1);
     498            1 :     assert_int_equal(spdm_response->header.request_response_code,
     499              :                      SPDM_ERROR);
     500            1 :     assert_int_equal(spdm_response->header.param1,
     501              :                      SPDM_ERROR_CODE_RESPONSE_NOT_READY);
     502            1 :     assert_int_equal(spdm_response->header.param2, 0);
     503            1 :     assert_int_equal(spdm_context->response_state,
     504              :                      LIBSPDM_RESPONSE_STATE_NOT_READY);
     505            1 :     assert_int_equal(error_data->request_code, SPDM_KEY_UPDATE);
     506            1 :     assert_memory_equal(secured_message_context
     507              :                         ->application_secret.request_data_secret,
     508              :                         m_req_secret_buffer, secured_message_context->hash_size);
     509            1 :     assert_memory_equal(secured_message_context
     510              :                         ->application_secret.response_data_secret,
     511              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     512            1 : }
     513              : #endif /* LIBSPDM_RESPOND_IF_READY_SUPPORT */
     514              : 
     515              : /**
     516              :  * Test 6: receiving a correct KEY_UPDATE from the requester, but the
     517              :  * responder is not set no receive a FINISH message because previous messages
     518              :  * (namely, GET_CAPABILITIES, NEGOTIATE_ALGORITHMS or GET_DIGESTS) have not
     519              :  * been received.
     520              :  * Expected behavior: the responder rejects the request, and produces an
     521              :  * ERROR message indicating the UnexpectedRequest. No keys are updated.
     522              :  **/
     523            1 : void libspdm_test_responder_key_update_case6(void **state)
     524              : {
     525              :     libspdm_return_t status;
     526              :     libspdm_test_context_t            *spdm_test_context;
     527              :     libspdm_context_t                 *spdm_context;
     528              :     uint32_t session_id;
     529              :     libspdm_session_info_t            *session_info;
     530              :     libspdm_secured_message_context_t *secured_message_context;
     531              : 
     532              :     size_t response_size;
     533              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     534              :     spdm_key_update_response_t *spdm_response;
     535              : 
     536              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     537              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     538              : 
     539            1 :     spdm_test_context = *state;
     540            1 :     spdm_context = spdm_test_context->spdm_context;
     541            1 :     spdm_test_context->case_id = 0x6;
     542            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     543              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     544              : 
     545            1 :     libspdm_set_standard_key_update_test_state(
     546              :         spdm_context, &session_id);
     547              : 
     548              :     /*not negotiated state*/
     549            1 :     spdm_context->connection_info.connection_state =
     550              :         LIBSPDM_CONNECTION_STATE_NOT_STARTED;
     551              : 
     552            1 :     session_info = &spdm_context->session_info[0];
     553            1 :     secured_message_context = session_info->secured_message_context;
     554              : 
     555            1 :     libspdm_set_standard_key_update_test_secrets(
     556            1 :         session_info->secured_message_context,
     557              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     558              :         m_req_secret_buffer, (uint8_t)(0xEE));
     559              : 
     560              :     /*no keys are updated*/
     561              : 
     562            1 :     response_size = sizeof(response);
     563            1 :     status = libspdm_get_response_key_update(spdm_context,
     564              :                                              m_libspdm_key_update_request1_size,
     565              :                                              &m_libspdm_key_update_request1,
     566              :                                              &response_size, response);
     567              : 
     568            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     569            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     570            1 :     spdm_response = (void *)response;
     571            1 :     assert_int_equal(spdm_response->header.request_response_code,
     572              :                      SPDM_ERROR);
     573            1 :     assert_int_equal(spdm_response->header.param1,
     574              :                      SPDM_ERROR_CODE_UNEXPECTED_REQUEST);
     575            1 :     assert_int_equal(spdm_response->header.param2, 0);
     576            1 :     assert_memory_equal(secured_message_context
     577              :                         ->application_secret.request_data_secret,
     578              :                         m_req_secret_buffer, secured_message_context->hash_size);
     579            1 :     assert_memory_equal(secured_message_context
     580              :                         ->application_secret.response_data_secret,
     581              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     582            1 : }
     583              : 
     584            1 : void libspdm_test_responder_key_update_case7(void **state)
     585              : {
     586              :     libspdm_return_t status;
     587              :     libspdm_test_context_t            *spdm_test_context;
     588              :     libspdm_context_t                 *spdm_context;
     589              :     uint32_t session_id;
     590              :     libspdm_session_info_t            *session_info;
     591              :     libspdm_secured_message_context_t *secured_message_context;
     592              : 
     593              :     size_t response_size;
     594              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     595              :     spdm_key_update_response_t *spdm_response;
     596              : 
     597              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     598              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     599              : 
     600            1 :     spdm_test_context = *state;
     601            1 :     spdm_context = spdm_test_context->spdm_context;
     602            1 :     spdm_test_context->case_id = 0x7;
     603            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     604              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     605              : 
     606            1 :     libspdm_set_standard_key_update_test_state(
     607              :         spdm_context, &session_id);
     608              : 
     609              : #if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
     610              :     /*"filling" buffers*/
     611              :     spdm_context->transcript.message_m.buffer_size =
     612              :         spdm_context->transcript.message_m.max_buffer_size;
     613              :     spdm_context->transcript.message_b.buffer_size =
     614              :         spdm_context->transcript.message_b.max_buffer_size;
     615              :     spdm_context->transcript.message_c.buffer_size =
     616              :         spdm_context->transcript.message_c.max_buffer_size;
     617              :     spdm_context->transcript.message_mut_b.buffer_size =
     618              :         spdm_context->transcript.message_mut_b.max_buffer_size;
     619              :     spdm_context->transcript.message_mut_c.buffer_size =
     620              :         spdm_context->transcript.message_mut_c.max_buffer_size;
     621              : #endif
     622              : 
     623            1 :     session_info = &spdm_context->session_info[0];
     624            1 :     secured_message_context = session_info->secured_message_context;
     625              : 
     626            1 :     libspdm_set_standard_key_update_test_secrets(
     627            1 :         session_info->secured_message_context,
     628              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     629              :         m_req_secret_buffer, (uint8_t)(0xEE));
     630              : 
     631              :     /*request side updated*/
     632            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
     633              :                                   secured_message_context->hash_size,
     634              :                                   m_req_secret_buffer, m_req_secret_buffer,
     635              :                                   secured_message_context->hash_size);
     636              :     /*response side *not* updated*/
     637              : 
     638            1 :     response_size = sizeof(response);
     639            1 :     status = libspdm_get_response_key_update(spdm_context,
     640              :                                              m_libspdm_key_update_request1_size,
     641              :                                              &m_libspdm_key_update_request1,
     642              :                                              &response_size, response);
     643              : 
     644            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     645            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
     646            1 :     spdm_response = (void *)response;
     647            1 :     assert_int_equal(spdm_response->header.request_response_code,
     648              :                      SPDM_KEY_UPDATE_ACK);
     649            1 :     assert_int_equal(spdm_response->header.param1,
     650              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY);
     651            1 :     assert_int_equal(spdm_response->header.param2,
     652              :                      m_libspdm_key_update_request1.header.param2);
     653              : #if LIBSPDM_RECORD_TRANSCRIPT_DATA_SUPPORT
     654              :     assert_int_equal(session_info->session_transcript.message_m.buffer_size, 0);
     655              :     assert_int_equal(spdm_context->transcript.message_b.buffer_size, 0);
     656              :     assert_int_equal(spdm_context->transcript.message_c.buffer_size, 0);
     657              :     assert_int_equal(spdm_context->transcript.message_mut_b.buffer_size, 0);
     658              :     assert_int_equal(spdm_context->transcript.message_mut_c.buffer_size, 0);
     659              : #endif
     660            1 :     assert_memory_equal(secured_message_context
     661              :                         ->application_secret.request_data_secret,
     662              :                         m_req_secret_buffer, secured_message_context->hash_size);
     663            1 :     assert_memory_equal(secured_message_context
     664              :                         ->application_secret.response_data_secret,
     665              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     666            1 : }
     667              : 
     668              : /**
     669              :  * Test 8: receiving a correct KEY_UPDATE message from the requester, but the
     670              :  * responder has no capabilities for key update.
     671              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
     672              :  * produces an ERROR message indicating the UnsupportedRequest. No keys are
     673              :  * updated.
     674              :  **/
     675            1 : void libspdm_test_responder_key_update_case8(void **state)
     676              : {
     677              :     libspdm_return_t status;
     678              :     libspdm_test_context_t            *spdm_test_context;
     679              :     libspdm_context_t                 *spdm_context;
     680              :     uint32_t session_id;
     681              :     libspdm_session_info_t            *session_info;
     682              :     libspdm_secured_message_context_t *secured_message_context;
     683              : 
     684              :     size_t response_size;
     685              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     686              :     spdm_key_update_response_t *spdm_response;
     687              : 
     688              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     689              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     690              : 
     691            1 :     spdm_test_context = *state;
     692            1 :     spdm_context = spdm_test_context->spdm_context;
     693            1 :     spdm_test_context->case_id = 0x8;
     694            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     695              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     696              : 
     697            1 :     libspdm_set_standard_key_update_test_state(
     698              :         spdm_context, &session_id);
     699              : 
     700              :     /*no capabilities*/
     701            1 :     spdm_context->connection_info.capability.flags &=
     702              :         ~SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_UPD_CAP;
     703            1 :     spdm_context->local_context.capability.flags &=
     704              :         ~SPDM_GET_CAPABILITIES_REQUEST_FLAGS_KEY_UPD_CAP;
     705              : 
     706            1 :     session_info = &spdm_context->session_info[0];
     707            1 :     secured_message_context = session_info->secured_message_context;
     708              : 
     709            1 :     libspdm_set_standard_key_update_test_secrets(
     710            1 :         session_info->secured_message_context,
     711              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     712              :         m_req_secret_buffer, (uint8_t)(0xEE));
     713              : 
     714              :     /*no keys are updated*/
     715              : 
     716            1 :     response_size = sizeof(response);
     717            1 :     status = libspdm_get_response_key_update(spdm_context,
     718              :                                              m_libspdm_key_update_request1_size,
     719              :                                              &m_libspdm_key_update_request1,
     720              :                                              &response_size, response);
     721              : 
     722            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     723            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     724            1 :     spdm_response = (void *)response;
     725            1 :     assert_int_equal(spdm_response->header.request_response_code,
     726              :                      SPDM_ERROR);
     727            1 :     assert_int_equal(spdm_response->header.param1,
     728              :                      SPDM_ERROR_CODE_UNSUPPORTED_REQUEST);
     729            1 :     assert_int_equal(spdm_response->header.param2, SPDM_KEY_UPDATE);
     730            1 :     assert_memory_equal(secured_message_context
     731              :                         ->application_secret.request_data_secret,
     732              :                         m_req_secret_buffer, secured_message_context->hash_size);
     733            1 :     assert_memory_equal(secured_message_context
     734              :                         ->application_secret.response_data_secret,
     735              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     736            1 : }
     737              : 
     738              : /**
     739              :  * Test 9: receiving a correct KEY_UPDATE message from the requester, but the
     740              :  * responder is not correctly setup by not initializing a session during
     741              :  * KEY_EXCHANGE.
     742              :  * Expected behavior: the responder refuses the KEY_UPDATE message and produces
     743              :  * an ERROR message indicating the UnsupportedRequest. No keys are updated.
     744              :  **/
     745            1 : void libspdm_test_responder_key_update_case9(void **state)
     746              : {
     747              :     libspdm_return_t status;
     748              :     libspdm_test_context_t            *spdm_test_context;
     749              :     libspdm_context_t                 *spdm_context;
     750              :     uint32_t session_id;
     751              :     libspdm_session_info_t            *session_info;
     752              :     libspdm_secured_message_context_t *secured_message_context;
     753              : 
     754              :     size_t response_size;
     755              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     756              :     spdm_key_update_response_t *spdm_response;
     757              : 
     758              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     759              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     760              : 
     761            1 :     spdm_test_context = *state;
     762            1 :     spdm_context = spdm_test_context->spdm_context;
     763            1 :     spdm_test_context->case_id = 0x9;
     764            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     765              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     766              : 
     767            1 :     libspdm_set_standard_key_update_test_state(
     768              :         spdm_context, &session_id);
     769              : 
     770            1 :     session_info = &spdm_context->session_info[0];
     771            1 :     secured_message_context = session_info->secured_message_context;
     772              : 
     773              :     /*uninitialized session*/
     774            1 :     libspdm_secured_message_set_session_state(
     775              :         session_info->secured_message_context,
     776              :         LIBSPDM_SESSION_STATE_NOT_STARTED);
     777              : 
     778            1 :     libspdm_set_standard_key_update_test_secrets(
     779            1 :         session_info->secured_message_context,
     780              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     781              :         m_req_secret_buffer, (uint8_t)(0xEE));
     782              : 
     783              :     /*no keys are updated*/
     784              : 
     785            1 :     response_size = sizeof(response);
     786            1 :     status = libspdm_get_response_key_update(spdm_context,
     787              :                                              m_libspdm_key_update_request1_size,
     788              :                                              &m_libspdm_key_update_request1,
     789              :                                              &response_size, response);
     790              : 
     791            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     792            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     793            1 :     spdm_response = (void *)response;
     794            1 :     assert_int_equal(spdm_response->header.request_response_code,
     795              :                      SPDM_ERROR);
     796            1 :     assert_int_equal(spdm_response->header.param1,
     797              :                      SPDM_ERROR_CODE_UNEXPECTED_REQUEST);
     798            1 :     assert_int_equal(spdm_response->header.param2, 0);
     799            1 :     assert_memory_equal(secured_message_context
     800              :                         ->application_secret.request_data_secret,
     801              :                         m_req_secret_buffer, secured_message_context->hash_size);
     802            1 :     assert_memory_equal(secured_message_context
     803              :                         ->application_secret.response_data_secret,
     804              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     805            1 : }
     806              : 
     807              : /**
     808              :  * Test 10: receiving a correct KEY_UPDATE message from the requester with
     809              :  * the UpdateAllKeys operation.
     810              :  * Expected behavior: the responder accepts the request, produces a valid
     811              :  * KEY_UPDATE_ACK response message, and both the request data key and the
     812              :  * response data key are updated.
     813              :  **/
     814            1 : void libspdm_test_responder_key_update_case10(void **state)
     815              : {
     816              :     libspdm_return_t status;
     817              :     libspdm_test_context_t            *spdm_test_context;
     818              :     libspdm_context_t                 *spdm_context;
     819              :     uint32_t session_id;
     820              :     libspdm_session_info_t            *session_info;
     821              :     libspdm_secured_message_context_t *secured_message_context;
     822              : 
     823              :     size_t response_size;
     824              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     825              :     spdm_key_update_response_t *spdm_response;
     826              : 
     827              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     828              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     829              : 
     830            1 :     spdm_test_context = *state;
     831            1 :     spdm_context = spdm_test_context->spdm_context;
     832            1 :     spdm_test_context->case_id = 0xA;
     833            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     834              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     835              : 
     836            1 :     libspdm_set_standard_key_update_test_state(
     837              :         spdm_context, &session_id);
     838              : 
     839            1 :     session_info = &spdm_context->session_info[0];
     840            1 :     secured_message_context = session_info->secured_message_context;
     841              : 
     842            1 :     libspdm_set_standard_key_update_test_secrets(
     843            1 :         session_info->secured_message_context,
     844              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     845              :         m_req_secret_buffer, (uint8_t)(0xEE));
     846              : 
     847              :     /*request side updated*/
     848            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
     849              :                                   secured_message_context->hash_size,
     850              :                                   m_req_secret_buffer, m_req_secret_buffer,
     851              :                                   secured_message_context->hash_size);
     852              :     /*response side updated*/
     853            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
     854              :                                   secured_message_context->hash_size,
     855              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
     856              :                                   secured_message_context->hash_size);
     857              : 
     858            1 :     response_size = sizeof(response);
     859            1 :     status = libspdm_get_response_key_update(spdm_context,
     860              :                                              m_libspdm_key_update_request3_size,
     861              :                                              &m_libspdm_key_update_request3,
     862              :                                              &response_size, response);
     863              : 
     864            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     865            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
     866            1 :     spdm_response = (void *)response;
     867            1 :     assert_int_equal(spdm_response->header.request_response_code,
     868              :                      SPDM_KEY_UPDATE_ACK);
     869            1 :     assert_int_equal(spdm_response->header.param1,
     870              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS);
     871            1 :     assert_int_equal(spdm_response->header.param2,
     872              :                      m_libspdm_key_update_request3.header.param2);
     873            1 :     assert_memory_equal(secured_message_context
     874              :                         ->application_secret.request_data_secret,
     875              :                         m_req_secret_buffer, secured_message_context->hash_size);
     876            1 :     assert_memory_equal(secured_message_context
     877              :                         ->application_secret.response_data_secret,
     878              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     879            1 : }
     880              : 
     881              : /**
     882              :  * Test 11: receiving a KEY_UPDATE message larger than specified, with the
     883              :  * UpdateAllKeys operation.
     884              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
     885              :  * produces an ERROR message indicating the InvalidRequest. No keys
     886              :  * are updated.
     887              :  **/
     888            1 : void libspdm_test_responder_key_update_case11(void **state)
     889              : {
     890              :     libspdm_return_t status;
     891              :     libspdm_test_context_t            *spdm_test_context;
     892              :     libspdm_context_t                 *spdm_context;
     893              :     uint32_t session_id;
     894              :     libspdm_session_info_t            *session_info;
     895              :     libspdm_secured_message_context_t *secured_message_context;
     896              : 
     897              :     size_t response_size;
     898              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     899              :     spdm_key_update_response_t *spdm_response;
     900              : 
     901              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     902              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     903              : 
     904            1 :     spdm_test_context = *state;
     905            1 :     spdm_context = spdm_test_context->spdm_context;
     906            1 :     spdm_test_context->case_id = 0xB;
     907            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     908              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     909              : 
     910            1 :     libspdm_set_standard_key_update_test_state(
     911              :         spdm_context, &session_id);
     912              : 
     913            1 :     session_info = &spdm_context->session_info[0];
     914            1 :     secured_message_context = session_info->secured_message_context;
     915              : 
     916            1 :     libspdm_set_standard_key_update_test_secrets(
     917            1 :         session_info->secured_message_context,
     918              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     919              :         m_req_secret_buffer, (uint8_t)(0xEE));
     920              : 
     921              :     /*no keys are updated*/
     922              : 
     923            1 :     response_size = sizeof(response);
     924            1 :     status = libspdm_get_response_key_update(spdm_context,
     925              :                                              m_libspdm_key_update_request4_size,
     926              :                                              &m_libspdm_key_update_request4,
     927              :                                              &response_size, response);
     928              : 
     929            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     930            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
     931            1 :     spdm_response = (void *)response;
     932            1 :     assert_int_equal(spdm_response->header.request_response_code,
     933              :                      SPDM_ERROR);
     934            1 :     assert_int_equal(spdm_response->header.param1,
     935              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
     936            1 :     assert_int_equal(spdm_response->header.param2, 0);
     937            1 :     assert_memory_equal(secured_message_context
     938              :                         ->application_secret.request_data_secret,
     939              :                         m_req_secret_buffer, secured_message_context->hash_size);
     940            1 :     assert_memory_equal(secured_message_context
     941              :                         ->application_secret.response_data_secret,
     942              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
     943            1 : }
     944              : 
     945              : /**
     946              :  * Test 12: receiving a correct KEY_UPDATE message from the requester with
     947              :  * the VerifyNewKey operation. The responder is setup as if a valid
     948              :  * KEY_UPDATE request with the UpdateKey has been previously received.
     949              :  * Expected behavior: the responder accepts the request, produces a valid
     950              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
     951              :  **/
     952            1 : void libspdm_test_responder_key_update_case12(void **state)
     953              : {
     954              :     libspdm_return_t status;
     955              :     libspdm_test_context_t            *spdm_test_context;
     956              :     libspdm_context_t                 *spdm_context;
     957              :     uint32_t session_id;
     958              :     libspdm_session_info_t            *session_info;
     959              :     libspdm_secured_message_context_t *secured_message_context;
     960              : 
     961              :     size_t response_size;
     962              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
     963              :     spdm_key_update_response_t *spdm_response;
     964              : 
     965              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     966              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
     967              : 
     968            1 :     spdm_test_context = *state;
     969            1 :     spdm_context = spdm_test_context->spdm_context;
     970            1 :     spdm_test_context->case_id = 0xC;
     971            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
     972              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     973              : 
     974            1 :     libspdm_set_standard_key_update_test_state(
     975              :         spdm_context, &session_id);
     976              : 
     977            1 :     session_info = &spdm_context->session_info[0];
     978            1 :     secured_message_context = session_info->secured_message_context;
     979              : 
     980            1 :     libspdm_set_standard_key_update_test_secrets(
     981            1 :         session_info->secured_message_context,
     982              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
     983              :         m_req_secret_buffer, (uint8_t)(0xEE));
     984              : 
     985              :     /*last request: UpdateKey*/
     986            1 :     session_info->last_key_update_request = m_libspdm_key_update_request1;
     987              : 
     988              :     /*mocked major secret update*/
     989            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
     990              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
     991            1 :                      &secured_message_context->application_secret.request_data_secret,
     992              :                      LIBSPDM_MAX_HASH_SIZE);
     993            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
     994              :                                   secured_message_context->hash_size,
     995              :                                   secured_message_context->application_secret
     996            1 :                                   .request_data_secret,
     997              :                                   secured_message_context->application_secret
     998            1 :                                   .request_data_secret,
     999              :                                   secured_message_context->hash_size);
    1000              : 
    1001              :     /*request side updated*/
    1002            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1003              :                                   secured_message_context->hash_size,
    1004              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1005              :                                   secured_message_context->hash_size);
    1006              :     /*response side *not* updated*/
    1007              : 
    1008            1 :     response_size = sizeof(response);
    1009            1 :     status = libspdm_get_response_key_update(spdm_context,
    1010              :                                              m_libspdm_key_update_request5_size,
    1011              :                                              &m_libspdm_key_update_request5,
    1012              :                                              &response_size, response);
    1013              : 
    1014            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1015            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1016            1 :     spdm_response = (void *)response;
    1017            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1018              :                      SPDM_KEY_UPDATE_ACK);
    1019            1 :     assert_int_equal(spdm_response->header.param1,
    1020              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_VERIFY_NEW_KEY);
    1021            1 :     assert_int_equal(spdm_response->header.param2,
    1022              :                      m_libspdm_key_update_request5.header.param2);
    1023            1 :     assert_memory_equal(secured_message_context
    1024              :                         ->application_secret.request_data_secret,
    1025              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1026            1 :     assert_memory_equal(secured_message_context
    1027              :                         ->application_secret.response_data_secret,
    1028              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1029            1 : }
    1030              : 
    1031              : /**
    1032              :  * Test 13: receiving a KEY_UPDATE message larger than specified, with the
    1033              :  * VerifyNewKey operation. The responder is setup as if a valid KEY_UPDATE
    1034              :  * request with the UpdateKey has been previously received.
    1035              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1036              :  * produces an ERROR message indicating the InvalidRequest. The request
    1037              :  * data key is not rolled back to before the UpdateKey.
    1038              :  **/
    1039            1 : void libspdm_test_responder_key_update_case13(void **state)
    1040              : {
    1041              :     libspdm_return_t status;
    1042              :     libspdm_test_context_t            *spdm_test_context;
    1043              :     libspdm_context_t                 *spdm_context;
    1044              :     uint32_t session_id;
    1045              :     libspdm_session_info_t            *session_info;
    1046              :     libspdm_secured_message_context_t *secured_message_context;
    1047              : 
    1048              :     size_t response_size;
    1049              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1050              :     spdm_key_update_response_t *spdm_response;
    1051              : 
    1052              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1053              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1054              : 
    1055            1 :     spdm_test_context = *state;
    1056            1 :     spdm_context = spdm_test_context->spdm_context;
    1057            1 :     spdm_test_context->case_id = 0xD;
    1058            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1059              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1060              : 
    1061            1 :     libspdm_set_standard_key_update_test_state(
    1062              :         spdm_context, &session_id);
    1063              : 
    1064            1 :     session_info = &spdm_context->session_info[0];
    1065            1 :     secured_message_context = session_info->secured_message_context;
    1066              : 
    1067            1 :     libspdm_set_standard_key_update_test_secrets(
    1068            1 :         session_info->secured_message_context,
    1069              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1070              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1071              : 
    1072              :     /*last request: UpdateKey*/
    1073            1 :     session_info->last_key_update_request = m_libspdm_key_update_request1;
    1074              : 
    1075              :     /*mocked major secret update*/
    1076            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
    1077              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
    1078            1 :                      &secured_message_context->application_secret.request_data_secret,
    1079              :                      LIBSPDM_MAX_HASH_SIZE);
    1080            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1081              :                                   secured_message_context->hash_size,
    1082              :                                   secured_message_context->application_secret
    1083            1 :                                   .request_data_secret,
    1084              :                                   secured_message_context->application_secret
    1085            1 :                                   .request_data_secret,
    1086              :                                   secured_message_context->hash_size);
    1087              : 
    1088              :     /*request side updated*/
    1089            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1090              :                                   secured_message_context->hash_size,
    1091              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1092              :                                   secured_message_context->hash_size);
    1093              :     /*response side *not* updated*/
    1094              : 
    1095            1 :     response_size = sizeof(response);
    1096            1 :     status = libspdm_get_response_key_update(spdm_context,
    1097              :                                              m_libspdm_key_update_request6_size,
    1098              :                                              &m_libspdm_key_update_request6,
    1099              :                                              &response_size, response);
    1100              : 
    1101            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1102            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
    1103            1 :     spdm_response = (void *)response;
    1104            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1105              :                      SPDM_ERROR);
    1106            1 :     assert_int_equal(spdm_response->header.param1,
    1107              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1108            1 :     assert_int_equal(spdm_response->header.param2, 0);
    1109            1 :     assert_memory_equal(secured_message_context
    1110              :                         ->application_secret.request_data_secret,
    1111              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1112            1 :     assert_memory_equal(secured_message_context
    1113              :                         ->application_secret.response_data_secret,
    1114              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1115            1 : }
    1116              : 
    1117              : /**
    1118              :  * Test 14: receiving a correct KEY_UPDATE message from the requester with
    1119              :  * the VerifyNewKey operation. The responder is setup as if a valid
    1120              :  * KEY_UPDATE request with the UpdateAllKeys has been previously received.
    1121              :  * Expected behavior: the responder accepts the request, produces a valid
    1122              :  * KEY_UPDATE_ACK response message, and both the request data key and the
    1123              :  * response data key are updated.
    1124              :  **/
    1125            1 : void libspdm_test_responder_key_update_case14(void **state)
    1126              : {
    1127              :     libspdm_return_t status;
    1128              :     libspdm_test_context_t            *spdm_test_context;
    1129              :     libspdm_context_t                 *spdm_context;
    1130              :     uint32_t session_id;
    1131              :     libspdm_session_info_t            *session_info;
    1132              :     libspdm_secured_message_context_t *secured_message_context;
    1133              : 
    1134              :     size_t response_size;
    1135              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1136              :     spdm_key_update_response_t *spdm_response;
    1137              : 
    1138              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1139              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1140              : 
    1141            1 :     spdm_test_context = *state;
    1142            1 :     spdm_context = spdm_test_context->spdm_context;
    1143            1 :     spdm_test_context->case_id = 0xE;
    1144            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1145              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1146              : 
    1147            1 :     libspdm_set_standard_key_update_test_state(
    1148              :         spdm_context, &session_id);
    1149              : 
    1150            1 :     session_info = &spdm_context->session_info[0];
    1151            1 :     secured_message_context = session_info->secured_message_context;
    1152              : 
    1153            1 :     libspdm_set_standard_key_update_test_secrets(
    1154            1 :         session_info->secured_message_context,
    1155              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1156              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1157              : 
    1158              :     /*last request: UpdateallKeys*/
    1159            1 :     session_info->last_key_update_request = m_libspdm_key_update_request3;
    1160              : 
    1161              :     /*mocked major secret update*/
    1162            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
    1163              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
    1164            1 :                      &secured_message_context->application_secret.request_data_secret,
    1165              :                      LIBSPDM_MAX_HASH_SIZE);
    1166            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.response_data_secret,
    1167              :                      sizeof(secured_message_context->application_secret_backup.response_data_secret),
    1168            1 :                      &secured_message_context->application_secret.response_data_secret,
    1169              :                      LIBSPDM_MAX_HASH_SIZE);
    1170            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1171              :                                   secured_message_context->hash_size,
    1172              :                                   secured_message_context->application_secret
    1173            1 :                                   .request_data_secret,
    1174              :                                   secured_message_context->application_secret
    1175            1 :                                   .request_data_secret,
    1176              :                                   secured_message_context->hash_size);
    1177            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1178              :                                   secured_message_context->hash_size,
    1179              :                                   secured_message_context->application_secret
    1180            1 :                                   .response_data_secret,
    1181              :                                   secured_message_context->application_secret
    1182            1 :                                   .response_data_secret,
    1183              :                                   secured_message_context->hash_size);
    1184              : 
    1185              :     /*request side updated*/
    1186            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1187              :                                   secured_message_context->hash_size,
    1188              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1189              :                                   secured_message_context->hash_size);
    1190              :     /*response side updated*/
    1191            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1192              :                                   secured_message_context->hash_size,
    1193              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    1194              :                                   secured_message_context->hash_size);
    1195              : 
    1196            1 :     response_size = sizeof(response);
    1197            1 :     status = libspdm_get_response_key_update(spdm_context,
    1198              :                                              m_libspdm_key_update_request5_size,
    1199              :                                              &m_libspdm_key_update_request5,
    1200              :                                              &response_size, response);
    1201              : 
    1202            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1203            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1204            1 :     spdm_response = (void *)response;
    1205            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1206              :                      SPDM_KEY_UPDATE_ACK);
    1207            1 :     assert_int_equal(spdm_response->header.param1,
    1208              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_VERIFY_NEW_KEY);
    1209            1 :     assert_int_equal(spdm_response->header.param2,
    1210              :                      m_libspdm_key_update_request5.header.param2);
    1211            1 :     assert_memory_equal(secured_message_context
    1212              :                         ->application_secret.request_data_secret,
    1213              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1214            1 :     assert_memory_equal(secured_message_context
    1215              :                         ->application_secret.response_data_secret,
    1216              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1217            1 : }
    1218              : 
    1219              : /**
    1220              :  * Test 15: receiving a KEY_UPDATE message larger than specified, with the
    1221              :  * VerifyNewKey operation. The responder is setup as if a valid KEY_UPDATE
    1222              :  * request with the UpdateAllKeys has been previously received.
    1223              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1224              :  * produces an ERROR message indicating the InvalidRequest. Neither the
    1225              :  * request data key nor the response data key are rolled back to before
    1226              :  * the UpdateAllKeys.
    1227              :  **/
    1228            1 : void libspdm_test_responder_key_update_case15(void **state)
    1229              : {
    1230              :     libspdm_return_t status;
    1231              :     libspdm_test_context_t            *spdm_test_context;
    1232              :     libspdm_context_t                 *spdm_context;
    1233              :     uint32_t session_id;
    1234              :     libspdm_session_info_t            *session_info;
    1235              :     libspdm_secured_message_context_t *secured_message_context;
    1236              : 
    1237              :     size_t response_size;
    1238              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1239              :     spdm_key_update_response_t *spdm_response;
    1240              : 
    1241              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1242              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1243              : 
    1244            1 :     spdm_test_context = *state;
    1245            1 :     spdm_context = spdm_test_context->spdm_context;
    1246            1 :     spdm_test_context->case_id = 0xF;
    1247            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1248              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1249              : 
    1250            1 :     libspdm_set_standard_key_update_test_state(
    1251              :         spdm_context, &session_id);
    1252              : 
    1253            1 :     session_info = &spdm_context->session_info[0];
    1254            1 :     secured_message_context = session_info->secured_message_context;
    1255              : 
    1256            1 :     libspdm_set_standard_key_update_test_secrets(
    1257            1 :         session_info->secured_message_context,
    1258              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1259              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1260              : 
    1261              :     /*last request: UpdateAllKeys*/
    1262            1 :     session_info->last_key_update_request = m_libspdm_key_update_request3;
    1263              : 
    1264              :     /*mocked major secret update*/
    1265            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
    1266              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
    1267            1 :                      &secured_message_context->application_secret.request_data_secret,
    1268              :                      LIBSPDM_MAX_HASH_SIZE);
    1269            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.response_data_secret,
    1270              :                      sizeof(secured_message_context->application_secret_backup.response_data_secret),
    1271            1 :                      &secured_message_context->application_secret.response_data_secret,
    1272              :                      LIBSPDM_MAX_HASH_SIZE);
    1273            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1274              :                                   secured_message_context->hash_size,
    1275              :                                   secured_message_context->application_secret
    1276            1 :                                   .request_data_secret,
    1277              :                                   secured_message_context->application_secret
    1278            1 :                                   .request_data_secret,
    1279              :                                   secured_message_context->hash_size);
    1280            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1281              :                                   secured_message_context->hash_size,
    1282              :                                   secured_message_context->application_secret
    1283            1 :                                   .response_data_secret,
    1284              :                                   secured_message_context->application_secret
    1285            1 :                                   .response_data_secret,
    1286              :                                   secured_message_context->hash_size);
    1287              : 
    1288              :     /*request side updated*/
    1289            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1290              :                                   secured_message_context->hash_size,
    1291              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1292              :                                   secured_message_context->hash_size);
    1293              :     /*response side updated*/
    1294            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1295              :                                   secured_message_context->hash_size,
    1296              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    1297              :                                   secured_message_context->hash_size);
    1298              : 
    1299            1 :     response_size = sizeof(response);
    1300            1 :     status = libspdm_get_response_key_update(spdm_context,
    1301              :                                              m_libspdm_key_update_request6_size,
    1302              :                                              &m_libspdm_key_update_request6,
    1303              :                                              &response_size, response);
    1304              : 
    1305            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1306            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
    1307            1 :     spdm_response = (void *)response;
    1308            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1309              :                      SPDM_ERROR);
    1310            1 :     assert_int_equal(spdm_response->header.param1,
    1311              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1312            1 :     assert_int_equal(spdm_response->header.param2, 0);
    1313            1 :     assert_memory_equal(secured_message_context
    1314              :                         ->application_secret.request_data_secret,
    1315              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1316            1 :     assert_memory_equal(secured_message_context
    1317              :                         ->application_secret.response_data_secret,
    1318              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1319            1 : }
    1320              : 
    1321              : /**
    1322              :  * Test 16: receiving a invalid KEY_UPDATE message from the requester with
    1323              :  * the VerifyNewKey operation. The responder is setup as if no valid
    1324              :  * KEY_UPDATE request with either the UpdateKey or UpdateAllKeys has been
    1325              :  * previously received.
    1326              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1327              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1328              :  * updated.
    1329              :  **/
    1330            1 : void libspdm_test_responder_key_update_case16(void **state)
    1331              : {
    1332              :     libspdm_return_t status;
    1333              :     libspdm_test_context_t            *spdm_test_context;
    1334              :     libspdm_context_t                 *spdm_context;
    1335              :     uint32_t session_id;
    1336              :     libspdm_session_info_t            *session_info;
    1337              :     libspdm_secured_message_context_t *secured_message_context;
    1338              : 
    1339              :     size_t response_size;
    1340              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1341              :     spdm_key_update_response_t *spdm_response;
    1342              : 
    1343              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1344              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1345              : 
    1346            1 :     spdm_test_context = *state;
    1347            1 :     spdm_context = spdm_test_context->spdm_context;
    1348            1 :     spdm_test_context->case_id = 0x10;
    1349            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1350              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1351              : 
    1352            1 :     libspdm_set_standard_key_update_test_state(
    1353              :         spdm_context, &session_id);
    1354              : 
    1355            1 :     session_info = &spdm_context->session_info[0];
    1356            1 :     secured_message_context = session_info->secured_message_context;
    1357              : 
    1358            1 :     libspdm_set_standard_key_update_test_secrets(
    1359            1 :         session_info->secured_message_context,
    1360              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1361              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1362              : 
    1363              :     /*no mocked major secret update*/
    1364              : 
    1365              :     /*no keys are updated*/
    1366              : 
    1367            1 :     response_size = sizeof(response);
    1368            1 :     status = libspdm_get_response_key_update(spdm_context,
    1369              :                                              m_libspdm_key_update_request5_size,
    1370              :                                              &m_libspdm_key_update_request5,
    1371              :                                              &response_size, response);
    1372              : 
    1373            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1374            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
    1375            1 :     spdm_response = (void *)response;
    1376            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1377              :                      SPDM_ERROR);
    1378            1 :     assert_int_equal(spdm_response->header.param1,
    1379              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1380            1 :     assert_int_equal(spdm_response->header.param2, 0);
    1381            1 :     assert_memory_equal(secured_message_context
    1382              :                         ->application_secret.request_data_secret,
    1383              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1384            1 :     assert_memory_equal(secured_message_context
    1385              :                         ->application_secret.response_data_secret,
    1386              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1387            1 : }
    1388              : 
    1389              : /**
    1390              :  * Test 17: UpdateKey + UpdateKey, last key operation is update key, current key operation is update key
    1391              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1392              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1393              :  * updated.
    1394              :  **/
    1395            1 : void libspdm_test_responder_key_update_case17(void **state)
    1396              : {
    1397              :     libspdm_return_t status;
    1398              :     libspdm_test_context_t            *spdm_test_context;
    1399              :     libspdm_context_t                 *spdm_context;
    1400              :     uint32_t session_id;
    1401              :     libspdm_session_info_t            *session_info;
    1402              :     libspdm_secured_message_context_t *secured_message_context;
    1403              : 
    1404              :     size_t response_size;
    1405              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1406              :     spdm_key_update_response_t *spdm_response;
    1407              : 
    1408              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1409              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1410              : 
    1411            1 :     spdm_test_context = *state;
    1412            1 :     spdm_context = spdm_test_context->spdm_context;
    1413            1 :     spdm_test_context->case_id = 0x11;
    1414            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1415              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1416              : 
    1417            1 :     libspdm_set_standard_key_update_test_state(
    1418              :         spdm_context, &session_id);
    1419              : 
    1420            1 :     session_info = &spdm_context->session_info[0];
    1421            1 :     secured_message_context = session_info->secured_message_context;
    1422              : 
    1423            1 :     libspdm_set_standard_key_update_test_secrets(
    1424            1 :         session_info->secured_message_context,
    1425              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1426              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1427              : 
    1428              :     /*last request: UpdateKey*/
    1429            1 :     session_info->last_key_update_request = m_libspdm_key_update_request1;
    1430              : 
    1431              :     /*mocked major secret update*/
    1432            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
    1433              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
    1434            1 :                      &secured_message_context->application_secret.request_data_secret,
    1435              :                      LIBSPDM_MAX_HASH_SIZE);
    1436            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1437              :                                   secured_message_context->hash_size,
    1438              :                                   secured_message_context->application_secret
    1439            1 :                                   .request_data_secret,
    1440              :                                   secured_message_context->application_secret
    1441            1 :                                   .request_data_secret,
    1442              :                                   secured_message_context->hash_size);
    1443              : 
    1444              :     /*request side updated (once)*/
    1445            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1446              :                                   secured_message_context->hash_size,
    1447              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1448              :                                   secured_message_context->hash_size);
    1449              :     /*response side *not* updated*/
    1450              : 
    1451            1 :     response_size = sizeof(response);
    1452            1 :     status = libspdm_get_response_key_update(spdm_context,
    1453              :                                              m_libspdm_key_update_request1_size,
    1454              :                                              &m_libspdm_key_update_request1,
    1455              :                                              &response_size, response);
    1456              : 
    1457            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1458            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1459            1 :     spdm_response = (void *)response;
    1460            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1461              :                      SPDM_ERROR);
    1462            1 :     assert_int_equal(spdm_response->header.param1,
    1463              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1464            1 : }
    1465              : 
    1466              : /**
    1467              :  * Test 18: UpdateKey + UpdateAllKeys, last key operation is update key, current key operation is update all key
    1468              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1469              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1470              :  * updated.
    1471              :  **/
    1472            1 : void libspdm_test_responder_key_update_case18(void **state)
    1473              : {
    1474              :     libspdm_return_t status;
    1475              :     libspdm_test_context_t            *spdm_test_context;
    1476              :     libspdm_context_t                 *spdm_context;
    1477              :     uint32_t session_id;
    1478              :     libspdm_session_info_t            *session_info;
    1479              :     libspdm_secured_message_context_t *secured_message_context;
    1480              : 
    1481              :     size_t response_size;
    1482              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1483              :     spdm_key_update_response_t *spdm_response;
    1484              : 
    1485              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1486              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1487              : 
    1488            1 :     spdm_test_context = *state;
    1489            1 :     spdm_context = spdm_test_context->spdm_context;
    1490            1 :     spdm_test_context->case_id = 0x12;
    1491            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1492              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1493              : 
    1494            1 :     libspdm_set_standard_key_update_test_state(
    1495              :         spdm_context, &session_id);
    1496              : 
    1497            1 :     session_info = &spdm_context->session_info[0];
    1498            1 :     secured_message_context = session_info->secured_message_context;
    1499              : 
    1500            1 :     libspdm_set_standard_key_update_test_secrets(
    1501            1 :         session_info->secured_message_context,
    1502              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1503              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1504              : 
    1505              :     /*last request: UpdateKey*/
    1506            1 :     session_info->last_key_update_request = m_libspdm_key_update_request1;
    1507              : 
    1508              :     /*mocked major secret update*/
    1509            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.request_data_secret,
    1510              :                      sizeof(secured_message_context->application_secret_backup.request_data_secret),
    1511            1 :                      &secured_message_context->application_secret.request_data_secret,
    1512              :                      LIBSPDM_MAX_HASH_SIZE);
    1513            1 :     libspdm_copy_mem(&secured_message_context->application_secret_backup.response_data_secret,
    1514              :                      sizeof(secured_message_context->application_secret_backup.response_data_secret),
    1515            1 :                      &secured_message_context->application_secret.response_data_secret,
    1516              :                      LIBSPDM_MAX_HASH_SIZE);
    1517            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1518              :                                   secured_message_context->hash_size,
    1519              :                                   secured_message_context->application_secret
    1520            1 :                                   .request_data_secret,
    1521              :                                   secured_message_context->application_secret
    1522            1 :                                   .request_data_secret,
    1523              :                                   secured_message_context->hash_size);
    1524            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1525              :                                   secured_message_context->hash_size,
    1526              :                                   secured_message_context->application_secret
    1527            1 :                                   .response_data_secret,
    1528              :                                   secured_message_context->application_secret
    1529            1 :                                   .response_data_secret,
    1530              :                                   secured_message_context->hash_size);
    1531              : 
    1532              :     /*request side updated (once)*/
    1533            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1534              :                                   secured_message_context->hash_size,
    1535              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1536              :                                   secured_message_context->hash_size);
    1537              :     /*response side updated (once)*/
    1538            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1539              :                                   secured_message_context->hash_size,
    1540              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    1541              :                                   secured_message_context->hash_size);
    1542              : 
    1543            1 :     response_size = sizeof(response);
    1544              :     /*UpdateAllKeys*/
    1545            1 :     status = libspdm_get_response_key_update(spdm_context,
    1546              :                                              m_libspdm_key_update_request3_size,
    1547              :                                              &m_libspdm_key_update_request3,
    1548              :                                              &response_size, response);
    1549              : 
    1550            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1551            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1552            1 :     spdm_response = (void *)response;
    1553            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1554              :                      SPDM_ERROR);
    1555            1 :     assert_int_equal(spdm_response->header.param1,
    1556              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1557            1 : }
    1558              : 
    1559              : /**
    1560              :  * Test 19:UpdateAllKeys + UpdateKey, last key operation is update all key, current key operation is update key
    1561              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1562              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1563              :  * updated.
    1564              :  **/
    1565            1 : void libspdm_test_responder_key_update_case19(void **state)
    1566              : {
    1567              :     libspdm_return_t status;
    1568              :     libspdm_test_context_t            *spdm_test_context;
    1569              :     libspdm_context_t                 *spdm_context;
    1570              :     uint32_t session_id;
    1571              :     libspdm_session_info_t            *session_info;
    1572              : 
    1573              :     size_t response_size;
    1574              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1575              :     spdm_key_update_response_t *spdm_response;
    1576              : 
    1577              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1578              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1579              : 
    1580            1 :     spdm_test_context = *state;
    1581            1 :     spdm_context = spdm_test_context->spdm_context;
    1582            1 :     spdm_test_context->case_id = 0x13;
    1583            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1584              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1585              : 
    1586            1 :     libspdm_set_standard_key_update_test_state(
    1587              :         spdm_context, &session_id);
    1588              : 
    1589            1 :     session_info = &spdm_context->session_info[0];
    1590              : 
    1591            1 :     libspdm_set_standard_key_update_test_secrets(
    1592            1 :         session_info->secured_message_context,
    1593              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1594              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1595              : 
    1596              :     /*last request: UpdateAllKeys*/
    1597            1 :     session_info->last_key_update_request = m_libspdm_key_update_request3;
    1598              : 
    1599              :     /*UpdateKey*/
    1600            1 :     response_size = sizeof(response);
    1601            1 :     status = libspdm_get_response_key_update(spdm_context,
    1602              :                                              m_libspdm_key_update_request1_size,
    1603              :                                              &m_libspdm_key_update_request1,
    1604              :                                              &response_size, response);
    1605              : 
    1606            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1607            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1608            1 :     spdm_response = (void *)response;
    1609            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1610              :                      SPDM_ERROR);
    1611            1 :     assert_int_equal(spdm_response->header.param1,
    1612              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1613            1 : }
    1614              : 
    1615              : /**
    1616              :  * Test 20:UpdateAllKeys + UpdateALlKeys, last key operation is update all key, current key operation is update all key
    1617              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1618              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1619              :  * updated.
    1620              :  **/
    1621            1 : void libspdm_test_responder_key_update_case20(void **state)
    1622              : {
    1623              :     libspdm_return_t status;
    1624              :     libspdm_test_context_t            *spdm_test_context;
    1625              :     libspdm_context_t                 *spdm_context;
    1626              :     uint32_t session_id;
    1627              :     libspdm_session_info_t            *session_info;
    1628              : 
    1629              :     size_t response_size;
    1630              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1631              :     spdm_key_update_response_t *spdm_response;
    1632              : 
    1633              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1634              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1635              : 
    1636            1 :     spdm_test_context = *state;
    1637            1 :     spdm_context = spdm_test_context->spdm_context;
    1638            1 :     spdm_test_context->case_id = 0x14;
    1639            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1640              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1641              : 
    1642            1 :     libspdm_set_standard_key_update_test_state(
    1643              :         spdm_context, &session_id);
    1644              : 
    1645            1 :     session_info = &spdm_context->session_info[0];
    1646              : 
    1647            1 :     libspdm_set_standard_key_update_test_secrets(
    1648            1 :         session_info->secured_message_context,
    1649              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1650              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1651              : 
    1652              :     /*last request: UpdateAllKeys*/
    1653            1 :     session_info->last_key_update_request = m_libspdm_key_update_request3;
    1654              : 
    1655              :     /*UpdateAllKeys*/
    1656            1 :     response_size = sizeof(response);
    1657            1 :     status = libspdm_get_response_key_update(spdm_context,
    1658              :                                              m_libspdm_key_update_request3_size,
    1659              :                                              &m_libspdm_key_update_request3,
    1660              :                                              &response_size, response);
    1661              : 
    1662            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1663            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1664            1 :     spdm_response = (void *)response;
    1665            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1666              :                      SPDM_ERROR);
    1667            1 :     assert_int_equal(spdm_response->header.param1,
    1668              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1669            1 : }
    1670              : 
    1671              : /**
    1672              :  * Test 21: :VerifyNewKey + UpdateKey, last key operation is verify key, current key operation is update key
    1673              :  * Expected behavior: the responder accepts the request, produces a valid
    1674              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
    1675              :  **/
    1676            1 : void libspdm_test_responder_key_update_case21(void **state)
    1677              : {
    1678              :     libspdm_return_t status;
    1679              :     libspdm_test_context_t            *spdm_test_context;
    1680              :     libspdm_context_t                 *spdm_context;
    1681              :     uint32_t session_id;
    1682              :     libspdm_session_info_t            *session_info;
    1683              :     libspdm_secured_message_context_t *secured_message_context;
    1684              : 
    1685              :     size_t response_size;
    1686              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1687              :     spdm_key_update_response_t *spdm_response;
    1688              : 
    1689              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1690              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1691              : 
    1692            1 :     spdm_test_context = *state;
    1693            1 :     spdm_context = spdm_test_context->spdm_context;
    1694            1 :     spdm_test_context->case_id = 0x15;
    1695            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1696              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1697              : 
    1698            1 :     libspdm_set_standard_key_update_test_state(
    1699              :         spdm_context, &session_id);
    1700              : 
    1701            1 :     session_info = &spdm_context->session_info[0];
    1702            1 :     secured_message_context = session_info->secured_message_context;
    1703              : 
    1704            1 :     libspdm_set_standard_key_update_test_secrets(
    1705            1 :         session_info->secured_message_context,
    1706              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1707              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1708              : 
    1709              :     /*request side updated*/
    1710            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1711              :                                   secured_message_context->hash_size,
    1712              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1713              :                                   secured_message_context->hash_size);
    1714              :     /*response side *not* updated*/
    1715              : 
    1716              :     /*last request: verify new key*/
    1717            1 :     session_info->last_key_update_request = m_libspdm_key_update_request5;
    1718              :     /*verify new key clear last_key_update_request*/
    1719            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    1720              : 
    1721              :     /*updatekey*/
    1722            1 :     response_size = sizeof(response);
    1723            1 :     status = libspdm_get_response_key_update(spdm_context,
    1724              :                                              m_libspdm_key_update_request1_size,
    1725              :                                              &m_libspdm_key_update_request1,
    1726              :                                              &response_size, response);
    1727              : 
    1728            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1729            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1730            1 :     spdm_response = (void *)response;
    1731            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1732              :                      SPDM_KEY_UPDATE_ACK);
    1733            1 :     assert_int_equal(spdm_response->header.param1,
    1734              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY);
    1735            1 :     assert_int_equal(spdm_response->header.param2,
    1736              :                      m_libspdm_key_update_request1.header.param2);
    1737            1 :     assert_memory_equal(secured_message_context
    1738              :                         ->application_secret.request_data_secret,
    1739              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1740            1 :     assert_memory_equal(secured_message_context
    1741              :                         ->application_secret.response_data_secret,
    1742              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1743            1 : }
    1744              : 
    1745              : /**
    1746              :  * Test 22: :VerifyNewKey + UpdateAllKeys, last key operation is verify key, current key operation is update all key
    1747              :  * Expected behavior: the responder accepts the request, produces a valid
    1748              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
    1749              :  **/
    1750            1 : void libspdm_test_responder_key_update_case22(void **state)
    1751              : {
    1752              :     libspdm_return_t status;
    1753              :     libspdm_test_context_t            *spdm_test_context;
    1754              :     libspdm_context_t                 *spdm_context;
    1755              :     uint32_t session_id;
    1756              :     libspdm_session_info_t            *session_info;
    1757              :     libspdm_secured_message_context_t *secured_message_context;
    1758              : 
    1759              :     size_t response_size;
    1760              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1761              :     spdm_key_update_response_t *spdm_response;
    1762              : 
    1763              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1764              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1765              : 
    1766            1 :     spdm_test_context = *state;
    1767            1 :     spdm_context = spdm_test_context->spdm_context;
    1768            1 :     spdm_test_context->case_id = 0x16;
    1769            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1770              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1771              : 
    1772            1 :     libspdm_set_standard_key_update_test_state(
    1773              :         spdm_context, &session_id);
    1774              : 
    1775            1 :     session_info = &spdm_context->session_info[0];
    1776            1 :     secured_message_context = session_info->secured_message_context;
    1777              : 
    1778            1 :     libspdm_set_standard_key_update_test_secrets(
    1779            1 :         session_info->secured_message_context,
    1780              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1781              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1782              : 
    1783              :     /*request side updated*/
    1784            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1785              :                                   secured_message_context->hash_size,
    1786              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1787              :                                   secured_message_context->hash_size);
    1788              :     /*response side updated*/
    1789            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1790              :                                   secured_message_context->hash_size,
    1791              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    1792              :                                   secured_message_context->hash_size);
    1793              : 
    1794              :     /*last request: verify new key*/
    1795            1 :     session_info->last_key_update_request = m_libspdm_key_update_request5;
    1796              :     /*clear last_key_update_request*/
    1797            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    1798              : 
    1799            1 :     response_size = sizeof(response);
    1800            1 :     status = libspdm_get_response_key_update(spdm_context,
    1801              :                                              m_libspdm_key_update_request3_size,
    1802              :                                              &m_libspdm_key_update_request3,
    1803              :                                              &response_size, response);
    1804              : 
    1805            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1806            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1807            1 :     spdm_response = (void *)response;
    1808            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1809              :                      SPDM_KEY_UPDATE_ACK);
    1810            1 :     assert_int_equal(spdm_response->header.param1,
    1811              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS);
    1812            1 :     assert_int_equal(spdm_response->header.param2,
    1813              :                      m_libspdm_key_update_request3.header.param2);
    1814            1 :     assert_memory_equal(secured_message_context
    1815              :                         ->application_secret.request_data_secret,
    1816              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1817            1 :     assert_memory_equal(secured_message_context
    1818              :                         ->application_secret.response_data_secret,
    1819              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1820            1 : }
    1821              : 
    1822              : /**
    1823              :  * Test 23: VerifyNewKey + VerifyNewKey, last key operation is verify key, current key operation is verify key
    1824              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    1825              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    1826              :  * updated.
    1827              :  **/
    1828            1 : void libspdm_test_responder_key_update_case23(void **state)
    1829              : {
    1830              :     libspdm_return_t status;
    1831              :     libspdm_test_context_t            *spdm_test_context;
    1832              :     libspdm_context_t                 *spdm_context;
    1833              :     uint32_t session_id;
    1834              :     libspdm_session_info_t            *session_info;
    1835              : 
    1836              :     size_t response_size;
    1837              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1838              :     spdm_key_update_response_t *spdm_response;
    1839              : 
    1840              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1841              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1842              : 
    1843            1 :     spdm_test_context = *state;
    1844            1 :     spdm_context = spdm_test_context->spdm_context;
    1845            1 :     spdm_test_context->case_id = 0x17;
    1846            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1847              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1848              : 
    1849            1 :     libspdm_set_standard_key_update_test_state(
    1850              :         spdm_context, &session_id);
    1851              : 
    1852            1 :     session_info = &spdm_context->session_info[0];
    1853              : 
    1854            1 :     libspdm_set_standard_key_update_test_secrets(
    1855            1 :         session_info->secured_message_context,
    1856              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1857              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1858              : 
    1859              :     /*last request: VerifyNewKey*/
    1860            1 :     session_info->last_key_update_request = m_libspdm_key_update_request5;
    1861              :     /*clear last_key_update_request*/
    1862            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    1863              : 
    1864              :     /*VerifyNewKey*/
    1865            1 :     response_size = sizeof(response);
    1866            1 :     status = libspdm_get_response_key_update(spdm_context,
    1867              :                                              m_libspdm_key_update_request5_size,
    1868              :                                              &m_libspdm_key_update_request5,
    1869              :                                              &response_size, response);
    1870              : 
    1871            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1872            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1873            1 :     spdm_response = (void *)response;
    1874            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1875              :                      SPDM_ERROR);
    1876            1 :     assert_int_equal(spdm_response->header.param1,
    1877              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    1878            1 : }
    1879              : 
    1880              : /**
    1881              :  * Test 24: :other command + UpdateKey, last request is not key_update command, current key operation is update key
    1882              :  * Expected behavior: the responder accepts the request, produces a valid
    1883              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
    1884              :  **/
    1885            1 : void libspdm_test_responder_key_update_case24(void **state)
    1886              : {
    1887              :     libspdm_return_t status;
    1888              :     libspdm_test_context_t            *spdm_test_context;
    1889              :     libspdm_context_t                 *spdm_context;
    1890              :     uint32_t session_id;
    1891              :     libspdm_session_info_t            *session_info;
    1892              :     libspdm_secured_message_context_t *secured_message_context;
    1893              : 
    1894              :     size_t response_size;
    1895              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1896              :     spdm_key_update_response_t *spdm_response;
    1897              : 
    1898              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1899              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1900              : 
    1901            1 :     spdm_test_context = *state;
    1902            1 :     spdm_context = spdm_test_context->spdm_context;
    1903            1 :     spdm_test_context->case_id = 0x18;
    1904            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1905              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1906              : 
    1907            1 :     libspdm_set_standard_key_update_test_state(
    1908              :         spdm_context, &session_id);
    1909              : 
    1910            1 :     session_info = &spdm_context->session_info[0];
    1911            1 :     secured_message_context = session_info->secured_message_context;
    1912              : 
    1913            1 :     libspdm_set_standard_key_update_test_secrets(
    1914            1 :         session_info->secured_message_context,
    1915              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1916              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1917              : 
    1918              :     /*request side updated*/
    1919            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1920              :                                   secured_message_context->hash_size,
    1921              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1922              :                                   secured_message_context->hash_size);
    1923              :     /*response side *not* updated*/
    1924              : 
    1925              :     /*other command with cleared last_key_update_request*/
    1926            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    1927              : 
    1928              :     /*updatekey*/
    1929            1 :     response_size = sizeof(response);
    1930            1 :     status = libspdm_get_response_key_update(spdm_context,
    1931              :                                              m_libspdm_key_update_request1_size,
    1932              :                                              &m_libspdm_key_update_request1,
    1933              :                                              &response_size, response);
    1934              : 
    1935            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    1936            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    1937            1 :     spdm_response = (void *)response;
    1938            1 :     assert_int_equal(spdm_response->header.request_response_code,
    1939              :                      SPDM_KEY_UPDATE_ACK);
    1940            1 :     assert_int_equal(spdm_response->header.param1,
    1941              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_KEY);
    1942            1 :     assert_int_equal(spdm_response->header.param2,
    1943              :                      m_libspdm_key_update_request1.header.param2);
    1944            1 :     assert_memory_equal(secured_message_context
    1945              :                         ->application_secret.request_data_secret,
    1946              :                         m_req_secret_buffer, secured_message_context->hash_size);
    1947            1 :     assert_memory_equal(secured_message_context
    1948              :                         ->application_secret.response_data_secret,
    1949              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    1950            1 : }
    1951              : 
    1952              : /**
    1953              :  * Test 25: :other command + UpdateAllKeys, last request is not key_update command, current key operation is update all key
    1954              :  * Expected behavior: the responder accepts the request, produces a valid
    1955              :  * KEY_UPDATE_ACK response message, and the request data key is updated.
    1956              :  **/
    1957            1 : void libspdm_test_responder_key_update_case25(void **state)
    1958              : {
    1959              :     libspdm_return_t status;
    1960              :     libspdm_test_context_t            *spdm_test_context;
    1961              :     libspdm_context_t                 *spdm_context;
    1962              :     uint32_t session_id;
    1963              :     libspdm_session_info_t            *session_info;
    1964              :     libspdm_secured_message_context_t *secured_message_context;
    1965              : 
    1966              :     size_t response_size;
    1967              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    1968              :     spdm_key_update_response_t *spdm_response;
    1969              : 
    1970              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1971              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    1972              : 
    1973            1 :     spdm_test_context = *state;
    1974            1 :     spdm_context = spdm_test_context->spdm_context;
    1975            1 :     spdm_test_context->case_id = 0x19;
    1976            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    1977              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    1978              : 
    1979            1 :     libspdm_set_standard_key_update_test_state(
    1980              :         spdm_context, &session_id);
    1981              : 
    1982            1 :     session_info = &spdm_context->session_info[0];
    1983            1 :     secured_message_context = session_info->secured_message_context;
    1984              : 
    1985            1 :     libspdm_set_standard_key_update_test_secrets(
    1986            1 :         session_info->secured_message_context,
    1987              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    1988              :         m_req_secret_buffer, (uint8_t)(0xEE));
    1989              : 
    1990              :     /*request side updated*/
    1991            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1992              :                                   secured_message_context->hash_size,
    1993              :                                   m_req_secret_buffer, m_req_secret_buffer,
    1994              :                                   secured_message_context->hash_size);
    1995              :     /*response side updated*/
    1996            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    1997              :                                   secured_message_context->hash_size,
    1998              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    1999              :                                   secured_message_context->hash_size);
    2000              : 
    2001              :     /*other command with cleared last_key_update_request*/
    2002            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    2003              : 
    2004            1 :     response_size = sizeof(response);
    2005            1 :     status = libspdm_get_response_key_update(spdm_context,
    2006              :                                              m_libspdm_key_update_request3_size,
    2007              :                                              &m_libspdm_key_update_request3,
    2008              :                                              &response_size, response);
    2009              : 
    2010            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    2011            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    2012            1 :     spdm_response = (void *)response;
    2013            1 :     assert_int_equal(spdm_response->header.request_response_code,
    2014              :                      SPDM_KEY_UPDATE_ACK);
    2015            1 :     assert_int_equal(spdm_response->header.param1,
    2016              :                      SPDM_KEY_UPDATE_OPERATIONS_TABLE_UPDATE_ALL_KEYS);
    2017            1 :     assert_int_equal(spdm_response->header.param2,
    2018              :                      m_libspdm_key_update_request3.header.param2);
    2019            1 :     assert_memory_equal(secured_message_context
    2020              :                         ->application_secret.request_data_secret,
    2021              :                         m_req_secret_buffer, secured_message_context->hash_size);
    2022            1 :     assert_memory_equal(secured_message_context
    2023              :                         ->application_secret.response_data_secret,
    2024              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    2025            1 : }
    2026              : 
    2027              : /**
    2028              :  * Test 26: :other command + VerifyNewKey, last request is not key_update command, current key operation is verify key
    2029              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    2030              :  * produces an ERROR message indicating the InvalidRequest. No keys are
    2031              :  * updated.
    2032              :  **/
    2033            1 : void libspdm_test_responder_key_update_case26(void **state)
    2034              : {
    2035              :     libspdm_return_t status;
    2036              :     libspdm_test_context_t            *spdm_test_context;
    2037              :     libspdm_context_t                 *spdm_context;
    2038              :     uint32_t session_id;
    2039              :     libspdm_session_info_t            *session_info;
    2040              :     libspdm_secured_message_context_t *secured_message_context;
    2041              : 
    2042              :     size_t response_size;
    2043              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    2044              :     spdm_key_update_response_t *spdm_response;
    2045              : 
    2046              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    2047              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    2048              : 
    2049            1 :     spdm_test_context = *state;
    2050            1 :     spdm_context = spdm_test_context->spdm_context;
    2051            1 :     spdm_test_context->case_id = 0x1A;
    2052            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    2053              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    2054              : 
    2055            1 :     libspdm_set_standard_key_update_test_state(
    2056              :         spdm_context, &session_id);
    2057              : 
    2058            1 :     session_info = &spdm_context->session_info[0];
    2059            1 :     secured_message_context = session_info->secured_message_context;
    2060              : 
    2061            1 :     libspdm_set_standard_key_update_test_secrets(
    2062            1 :         session_info->secured_message_context,
    2063              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    2064              :         m_req_secret_buffer, (uint8_t)(0xEE));
    2065              : 
    2066              :     /*request side updated*/
    2067            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    2068              :                                   secured_message_context->hash_size,
    2069              :                                   m_req_secret_buffer, m_req_secret_buffer,
    2070              :                                   secured_message_context->hash_size);
    2071              :     /*response side updated*/
    2072            1 :     libspdm_compute_secret_update(spdm_context->connection_info.version,
    2073              :                                   secured_message_context->hash_size,
    2074              :                                   m_rsp_secret_buffer, m_rsp_secret_buffer,
    2075              :                                   secured_message_context->hash_size);
    2076              : 
    2077              :     /*other command with cleared last_key_update_request*/
    2078            1 :     libspdm_zero_mem (&(session_info->last_key_update_request), sizeof(spdm_key_update_request_t));
    2079              : 
    2080              :     /*VerifyNewKey*/
    2081            1 :     response_size = sizeof(response);
    2082            1 :     status = libspdm_get_response_key_update(spdm_context,
    2083              :                                              m_libspdm_key_update_request5_size,
    2084              :                                              &m_libspdm_key_update_request5,
    2085              :                                              &response_size, response);
    2086              : 
    2087            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    2088            1 :     assert_int_equal(response_size, sizeof(spdm_key_update_response_t));
    2089            1 :     spdm_response = (void *)response;
    2090            1 :     assert_int_equal(spdm_response->header.request_response_code,
    2091              :                      SPDM_ERROR);
    2092            1 :     assert_int_equal(spdm_response->header.param1,
    2093              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    2094            1 : }
    2095              : 
    2096              : /**
    2097              :  * Test 27: receiving a KEY_UPDATE message with a reserved operation code.
    2098              :  * Expected behavior: the responder refuses the KEY_UPDATE message and
    2099              :  * produces an ERROR message indicating the InvalidRequest. No keys
    2100              :  * are updated.
    2101              :  **/
    2102            1 : void libspdm_test_responder_key_update_case27(void **state)
    2103              : {
    2104              :     libspdm_return_t status;
    2105              :     libspdm_test_context_t            *spdm_test_context;
    2106              :     libspdm_context_t                 *spdm_context;
    2107              :     uint32_t session_id;
    2108              :     libspdm_session_info_t            *session_info;
    2109              :     libspdm_secured_message_context_t *secured_message_context;
    2110              : 
    2111              :     size_t response_size;
    2112              :     uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
    2113              :     spdm_key_update_response_t *spdm_response;
    2114              : 
    2115              :     uint8_t m_req_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    2116              :     uint8_t m_rsp_secret_buffer[LIBSPDM_MAX_HASH_SIZE];
    2117              : 
    2118            1 :     spdm_test_context = *state;
    2119            1 :     spdm_context = spdm_test_context->spdm_context;
    2120            1 :     spdm_test_context->case_id = 0x1B;
    2121            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_11 <<
    2122              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
    2123              : 
    2124            1 :     libspdm_set_standard_key_update_test_state(
    2125              :         spdm_context, &session_id);
    2126              : 
    2127            1 :     session_info = &spdm_context->session_info[0];
    2128            1 :     secured_message_context = session_info->secured_message_context;
    2129              : 
    2130            1 :     libspdm_set_standard_key_update_test_secrets(
    2131            1 :         session_info->secured_message_context,
    2132              :         m_rsp_secret_buffer, (uint8_t)(0xFF),
    2133              :         m_req_secret_buffer, (uint8_t)(0xEE));
    2134              : 
    2135              :     /*no keys are updated*/
    2136              : 
    2137            1 :     response_size = sizeof(response);
    2138            1 :     status = libspdm_get_response_key_update(spdm_context,
    2139              :                                              m_libspdm_key_update_request10_size,
    2140              :                                              &m_libspdm_key_update_request10,
    2141              :                                              &response_size, response);
    2142              : 
    2143            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
    2144            1 :     assert_int_equal(response_size, sizeof(spdm_error_response_t));
    2145            1 :     spdm_response = (void *)response;
    2146            1 :     assert_int_equal(spdm_response->header.request_response_code,
    2147              :                      SPDM_ERROR);
    2148            1 :     assert_int_equal(spdm_response->header.param1,
    2149              :                      SPDM_ERROR_CODE_INVALID_REQUEST);
    2150            1 :     assert_int_equal(spdm_response->header.param2, 0);
    2151            1 :     assert_memory_equal(secured_message_context
    2152              :                         ->application_secret.request_data_secret,
    2153              :                         m_req_secret_buffer, secured_message_context->hash_size);
    2154            1 :     assert_memory_equal(secured_message_context
    2155              :                         ->application_secret.response_data_secret,
    2156              :                         m_rsp_secret_buffer, secured_message_context->hash_size);
    2157            1 : }
    2158              : 
    2159            1 : int libspdm_responder_key_update_test_main(void)
    2160              : {
    2161            1 :     const struct CMUnitTest spdm_responder_key_update_tests[] = {
    2162              :         /* Success Case -- UpdateKey*/
    2163              :         cmocka_unit_test(libspdm_test_responder_key_update_case1),
    2164              :         /* Bad request size*/
    2165              :         cmocka_unit_test(libspdm_test_responder_key_update_case2),
    2166              :         /* response_state: SPDM_RESPONSE_STATE_BUSY*/
    2167              :         cmocka_unit_test(libspdm_test_responder_key_update_case3),
    2168              :         /* response_state: SPDM_RESPONSE_STATE_NEED_RESYNC*/
    2169              :         cmocka_unit_test(libspdm_test_responder_key_update_case4),
    2170              :         #if LIBSPDM_RESPOND_IF_READY_SUPPORT
    2171              :         /* response_state: SPDM_RESPONSE_STATE_NOT_READY*/
    2172              :         cmocka_unit_test(libspdm_test_responder_key_update_case5),
    2173              :         #endif /* LIBSPDM_RESPOND_IF_READY_SUPPORT */
    2174              :         /* connection_state Check*/
    2175              :         cmocka_unit_test(libspdm_test_responder_key_update_case6),
    2176              :         /* Buffer reset*/
    2177              :         cmocka_unit_test(libspdm_test_responder_key_update_case7),
    2178              :         /* Unsupported KEY_UPD capabilities*/
    2179              :         cmocka_unit_test(libspdm_test_responder_key_update_case8),
    2180              :         /* Uninitialized session*/
    2181              :         cmocka_unit_test(libspdm_test_responder_key_update_case9),
    2182              :         /* Success Case -- UpdateAllKeys*/
    2183              :         cmocka_unit_test(libspdm_test_responder_key_update_case10),
    2184              :         /* Bad request size*/
    2185              :         cmocka_unit_test(libspdm_test_responder_key_update_case11),
    2186              :         /* UpdateKey + VerifyNewKey: Success*/
    2187              :         cmocka_unit_test(libspdm_test_responder_key_update_case12),
    2188              :         /* Bad request size*/
    2189              :         cmocka_unit_test(libspdm_test_responder_key_update_case13),
    2190              :         /* UpdateALLKeys + VerifyNewKey: Success*/
    2191              :         cmocka_unit_test(libspdm_test_responder_key_update_case14),
    2192              :         /* Bad request size*/
    2193              :         cmocka_unit_test(libspdm_test_responder_key_update_case15),
    2194              :         /* Uninitialized key update*/
    2195              :         cmocka_unit_test(libspdm_test_responder_key_update_case16),
    2196              :         /* UpdateKey + UpdateKey: failed*/
    2197              :         cmocka_unit_test(libspdm_test_responder_key_update_case17),
    2198              :         /* UpdateKey + UpdateAllKeys: failed*/
    2199              :         cmocka_unit_test(libspdm_test_responder_key_update_case18),
    2200              :         /* UpdateALLKeys + UpdateKey: failed*/
    2201              :         cmocka_unit_test(libspdm_test_responder_key_update_case19),
    2202              :         /* UpdateALLKeys + UpdateALLKeys: failed*/
    2203              :         cmocka_unit_test(libspdm_test_responder_key_update_case20),
    2204              :         /* VerifyNewKey + UpdateKey: success*/
    2205              :         cmocka_unit_test(libspdm_test_responder_key_update_case21),
    2206              :         /* VerifyNewKey + UpdateAllKeys: success*/
    2207              :         cmocka_unit_test(libspdm_test_responder_key_update_case22),
    2208              :         /* VerifyNewKey + VerifyNewKey: failed*/
    2209              :         cmocka_unit_test(libspdm_test_responder_key_update_case23),
    2210              :         /* other command + UpdateKey: success*/
    2211              :         cmocka_unit_test(libspdm_test_responder_key_update_case24),
    2212              :         /* other command + UpdateAllKeys: success*/
    2213              :         cmocka_unit_test(libspdm_test_responder_key_update_case25),
    2214              :         /* other command + VerifyNewKey: failed*/
    2215              :         cmocka_unit_test(libspdm_test_responder_key_update_case26),
    2216              :         /* Invalid operation,other key_update operation: failed*/
    2217              :         cmocka_unit_test(libspdm_test_responder_key_update_case27),
    2218              :     };
    2219              : 
    2220            1 :     libspdm_test_context_t test_context = {
    2221              :         LIBSPDM_TEST_CONTEXT_VERSION,
    2222              :         false,
    2223              :     };
    2224              : 
    2225            1 :     libspdm_setup_test_context(&test_context);
    2226              : 
    2227            1 :     return cmocka_run_group_tests(spdm_responder_key_update_tests,
    2228              :                                   libspdm_unit_test_group_setup,
    2229              :                                   libspdm_unit_test_group_teardown);
    2230              : }
    2231              : 
    2232              : #endif /* (LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP) || (LIBSPDM_ENABLE_CAPABILITY_PSK_CAP) */
        

Generated by: LCOV version 2.0-1