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

Generated by: LCOV version 2.0-1