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 "internal/libspdm_requester_lib.h"
8 
9 #if LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP
10 
libspdm_generate_encap_error_response(const void * spdm_context,uint8_t error_code,uint8_t error_data,size_t * response_size,void * response)11 libspdm_return_t libspdm_generate_encap_error_response(const void *spdm_context,
12                                                        uint8_t error_code,
13                                                        uint8_t error_data,
14                                                        size_t *response_size,
15                                                        void *response)
16 {
17     spdm_error_response_t *spdm_response;
18 
19     LIBSPDM_ASSERT(*response_size >= sizeof(spdm_error_response_t));
20     *response_size = sizeof(spdm_error_response_t);
21     spdm_response = response;
22 
23     spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
24     spdm_response->header.request_response_code = SPDM_ERROR;
25     spdm_response->header.param1 = error_code;
26     spdm_response->header.param2 = error_data;
27 
28     return LIBSPDM_STATUS_SUCCESS;
29 }
30 
libspdm_generate_encap_extended_error_response(const void * spdm_context,uint8_t error_code,uint8_t error_data,size_t extended_error_data_size,const uint8_t * extended_error_data,size_t * response_size,void * response)31 libspdm_return_t libspdm_generate_encap_extended_error_response(
32     const void *spdm_context, uint8_t error_code, uint8_t error_data,
33     size_t extended_error_data_size, const uint8_t *extended_error_data,
34     size_t *response_size, void *response)
35 {
36     spdm_error_response_t *spdm_response;
37     LIBSPDM_ASSERT(*response_size >=
38                    sizeof(spdm_error_response_t) + extended_error_data_size);
39 
40     spdm_response = response;
41     spdm_response->header.spdm_version = libspdm_get_connection_version (spdm_context);
42     spdm_response->header.request_response_code = SPDM_ERROR;
43     spdm_response->header.param1 = error_code;
44     spdm_response->header.param2 = error_data;
45     libspdm_copy_mem(spdm_response + 1, *response_size - (sizeof(spdm_error_response_t)),
46                      extended_error_data, extended_error_data_size);
47     *response_size =
48         sizeof(spdm_error_response_t) + extended_error_data_size;
49     return LIBSPDM_STATUS_SUCCESS;
50 }
51 
52 #endif /* LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP */
53