LCOV - code coverage report
Current view: top level - os_stub/spdm_device_secret_lib_sample - key_ex.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 96.9 % 32 31
Test Date: 2026-09-13 08:13:44 Functions: 100.0 % 3 3

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2025-2026 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 "hal/base.h"
       8              : #include "internal/libspdm_common_lib.h"
       9              : 
      10              : uint8_t g_key_exchange_start_mut_auth = 0;
      11              : bool g_mandatory_mut_auth = false;
      12              : uint8_t g_key_exchange_req_slot_id = 0;
      13              : 
      14              : #if LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP
      15              : bool g_generate_key_exchange_opaque_data = false;
      16              : size_t libspdm_secret_lib_finish_opaque_data_size;
      17              : bool g_generate_finish_opaque_data = false;
      18              : 
      19           35 : bool libspdm_key_exchange_rsp_opaque_data(
      20              :     void *spdm_context,
      21              :     spdm_version_number_t spdm_version,
      22              :     uint8_t measurement_hash_type,
      23              :     uint8_t slot_id,
      24              :     uint8_t session_policy,
      25              :     const void *req_opaque_data,
      26              :     size_t req_opaque_data_size,
      27              :     void *opaque_data,
      28              :     size_t *opaque_data_size)
      29              : {
      30           35 :     if (g_generate_key_exchange_opaque_data) {
      31              :         size_t version_selection_data_size;
      32            3 :         version_selection_data_size = sizeof(spdm_general_opaque_data_table_header_t) +
      33              :                                       sizeof(secured_message_opaque_element_table_header_t) +
      34              :                                       sizeof(secured_message_opaque_element_version_selection_t);
      35              : 
      36            3 :         LIBSPDM_ASSERT(*opaque_data_size >= version_selection_data_size);
      37            3 :         *opaque_data_size = version_selection_data_size;
      38              : 
      39            3 :         if (opaque_data != NULL) {
      40              :             spdm_general_opaque_data_table_header_t *spdm_general_opaque_data_table_header;
      41              :             secured_message_opaque_element_table_header_t *opaque_element_table_header;
      42              :             secured_message_opaque_element_version_selection_t *opaque_element_version_section;
      43              : 
      44            2 :             spdm_general_opaque_data_table_header = opaque_data;
      45            2 :             spdm_general_opaque_data_table_header->total_elements = 1;
      46            2 :             libspdm_write_uint24(spdm_general_opaque_data_table_header->reserved, 0);
      47              : 
      48            2 :             opaque_element_table_header = (void *)(spdm_general_opaque_data_table_header + 1);
      49            2 :             opaque_element_table_header->id = SPDM_REGISTRY_ID_DMTF;
      50            2 :             opaque_element_table_header->vendor_len = 0;
      51            2 :             opaque_element_table_header->opaque_element_data_len =
      52              :                 sizeof(secured_message_opaque_element_version_selection_t);
      53            2 :             opaque_element_version_section = (void *)(opaque_element_table_header + 1);
      54            2 :             opaque_element_version_section->sm_data_version =
      55              :                 SECURED_MESSAGE_OPAQUE_ELEMENT_SMDATA_DATA_VERSION;
      56            2 :             opaque_element_version_section->sm_data_id =
      57              :                 SECURED_MESSAGE_OPAQUE_ELEMENT_SMDATA_ID_VERSION_SELECTION;
      58            2 :             opaque_element_version_section->selected_version =
      59              :                 SECURED_SPDM_VERSION_11 << SPDM_VERSION_NUMBER_SHIFT_BIT;
      60              :         }
      61              : 
      62            3 :         return true;
      63              :     }
      64           32 :     return false;
      65              : }
      66              : 
      67            1 : bool libspdm_finish_rsp_opaque_data(
      68              :     void *spdm_context,
      69              :     uint32_t session_id,
      70              :     spdm_version_number_t spdm_version,
      71              :     uint8_t req_slot_id,
      72              :     const void *req_opaque_data,
      73              :     size_t req_opaque_data_size,
      74              :     void *opaque_data,
      75              :     size_t *opaque_data_size)
      76              : {
      77            1 :     if (g_generate_finish_opaque_data) {
      78            1 :         LIBSPDM_ASSERT(libspdm_secret_lib_finish_opaque_data_size <= *opaque_data_size);
      79              : 
      80            1 :         *opaque_data_size = libspdm_secret_lib_finish_opaque_data_size;
      81              : 
      82            1 :         if (opaque_data != NULL) {
      83            9 :             for (size_t index = 0; index < *opaque_data_size; index++)
      84              :             {
      85            8 :                 ((uint8_t *)opaque_data)[index] = (uint8_t)(index + 1);
      86              :             }
      87              :         }
      88              :     } else {
      89            0 :         *opaque_data_size = 0;
      90              :     }
      91              : 
      92            1 :     return true;
      93              : }
      94              : 
      95              : #if LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP
      96           22 : extern uint8_t libspdm_key_exchange_start_mut_auth(
      97              :     void *spdm_context,
      98              :     uint32_t session_id,
      99              :     spdm_version_number_t spdm_version,
     100              :     uint8_t slot_id,
     101              :     uint8_t *req_slot_id,
     102              :     uint8_t session_policy,
     103              :     size_t opaque_data_length,
     104              :     const void *opaque_data,
     105              :     bool *mandatory_mut_auth)
     106              : {
     107           22 :     *req_slot_id = g_key_exchange_req_slot_id;
     108           22 :     *mandatory_mut_auth = g_mandatory_mut_auth;
     109              : 
     110           22 :     return g_key_exchange_start_mut_auth;
     111              : }
     112              : #endif /* LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP */
     113              : #endif /* LIBSPDM_ENABLE_CAPABILITY_KEY_EX_CAP */
        

Generated by: LCOV version 2.0-1