14#define FMT_HEADER_ONLY
15#include <fmt/format.h>
45 std::map<std::string, std::string>
params;
48 std::map<std::string, std::string>
headers;
55 using Server = std::list<EndpointInfo>;
77 std::optional<std::string>
url = std::nullopt;
95 static HostPort default_azure_endorsements_endpoint = {
96 "global.acccache.azure.net",
"443"};
99 make_azure_endorsements_server(
100 const HostPort& endpoint,
101 const std::string& chip_id_hex,
102 const std::string& reported_tcb,
103 size_t max_retries_count,
104 size_t max_client_response_size)
106 std::map<std::string, std::string> params;
107 params[
"api-version"] =
"2020-10-15-preview";
108 EndorsementEndpointsConfiguration::EndpointInfo info{
109 .host = endpoint.host,
110 .port = endpoint.port,
112 fmt::format(
"/SevSnpVM/certificates/{}/{}", chip_id_hex, reported_tcb),
116 info.max_retries_count = max_retries_count;
117 info.max_client_response_size = max_client_response_size;
124 static HostPort default_amd_endorsements_endpoint = {
125 "kdsintf.amd.com",
"443"};
128 const HostPort& endpoint,
129 const std::string& chip_id_hex,
130 const std::string& boot_loader,
131 const std::string& tee,
132 const std::string& snp,
133 const std::string& microcode,
135 size_t max_retries_count,
136 size_t max_client_response_size,
137 const std::optional<std::string>& fmc_version = std::nullopt)
139 std::map<std::string, std::string> params;
140 params[
"blSPL"] = boot_loader;
141 params[
"teeSPL"] = tee;
142 params[
"snpSPL"] = snp;
143 params[
"ucodeSPL"] = microcode;
144 if (fmc_version.has_value())
146 params[
"fmcSPL"] = fmc_version.value();
150 EndorsementEndpointsConfiguration::EndpointInfo leaf{
151 .host = endpoint.host,
152 .port = endpoint.port,
154 fmt::format(
"/vcek/v1/{}/{}",
to_string(product_name), chip_id_hex),
156 .response_is_der =
true,
158 leaf.max_retries_count = max_retries_count;
159 leaf.max_client_response_size = max_client_response_size;
160 EndorsementEndpointsConfiguration::EndpointInfo chain{
161 .host = endpoint.host,
162 .port = endpoint.port,
163 .uri = fmt::format(
"/vcek/v1/{}/cert_chain",
to_string(product_name)),
166 chain.max_retries_count = max_retries_count;
167 chain.max_client_response_size = max_client_response_size;
169 server.push_back(leaf);
170 server.push_back(chain);
174 static HostPort default_thim_endorsements_endpoint = {
175 "169.254.169.254",
"80"};
178 make_thim_endorsements_server(
179 const HostPort& endpoint,
180 const std::string& chip_id_hex,
181 const std::string& reported_tcb,
182 size_t max_retries_count,
183 size_t max_client_response_size)
185 std::map<std::string, std::string> params;
186 params[
"tcbVersion"] = reported_tcb;
187 params[
"platformId"] = chip_id_hex;
188 EndorsementEndpointsConfiguration::EndpointInfo info{
191 "/metadata/THIM/amd/certification",
195 {{
"Metadata",
"true"}},
198 info.max_retries_count = max_retries_count;
199 info.max_client_response_size = max_client_response_size;
207struct formatter<
ccf::pal::snp::EndorsementEndpointsConfiguration::EndpointInfo>
209 template <
typename ParseContext>
210 constexpr auto parse(ParseContext& ctx)
215 template <
typename FormatContext>
218 FormatContext& ctx)
const
221 ctx.out(),
"http{}://{}:{}", e.
tls ?
"s" :
"", e.
host, e.
port);
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:718
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:667
#define DECLARE_JSON_REQUIRED_FIELDS_WITH_RENAMES(TYPE,...)
Definition json.h:756
#define DECLARE_JSON_TYPE_WITH_OPTIONAL_FIELDS(TYPE)
Definition json.h:694
#define DECLARE_JSON_OPTIONAL_FIELDS(TYPE,...)
Definition json.h:790
#define DECLARE_JSON_ENUM(TYPE,...)
Definition json.h:841
Definition attestation_sev_snp.h:24
std::string to_string(ProductName product)
Definition sev_snp_cpuid.h:93
EndorsementsEndpointType
Definition attestation_sev_snp_endorsements.h:63
@ Azure
Definition attestation_sev_snp_endorsements.h:64
@ THIM
Definition attestation_sev_snp_endorsements.h:66
@ AMD
Definition attestation_sev_snp_endorsements.h:65
std::vector< EndorsementsServer > EndorsementsServers
Definition attestation_sev_snp_endorsements.h:87
ProductName
Definition sev_snp_cpuid.h:87
Definition app_interface.h:14
Definition key_exchange.h:18
Definition attestation_sev_snp_endorsements.h:20
std::string tcbm
Definition attestation_sev_snp_endorsements.h:24
std::string certificate_chain
Definition attestation_sev_snp_endorsements.h:23
std::string vcek_cert
Definition attestation_sev_snp_endorsements.h:22
std::string cache_control
Definition attestation_sev_snp_endorsements.h:21
Definition attestation_sev_snp_endorsements.h:41
std::string host
Definition attestation_sev_snp_endorsements.h:42
std::map< std::string, std::string > params
Definition attestation_sev_snp_endorsements.h:45
std::map< std::string, std::string > headers
Definition attestation_sev_snp_endorsements.h:48
size_t max_retries_count
Definition attestation_sev_snp_endorsements.h:50
bool operator==(const EndpointInfo &) const =default
size_t max_client_response_size
Definition attestation_sev_snp_endorsements.h:51
bool response_is_der
Definition attestation_sev_snp_endorsements.h:46
std::string port
Definition attestation_sev_snp_endorsements.h:43
std::string uri
Definition attestation_sev_snp_endorsements.h:44
bool tls
Definition attestation_sev_snp_endorsements.h:49
bool response_is_thim_json
Definition attestation_sev_snp_endorsements.h:47
Definition attestation_sev_snp_endorsements.h:39
std::list< Server > servers
Definition attestation_sev_snp_endorsements.h:59
std::list< EndpointInfo > Server
Definition attestation_sev_snp_endorsements.h:55
Definition attestation_sev_snp_endorsements.h:75
std::optional< size_t > max_retries_count
Definition attestation_sev_snp_endorsements.h:78
std::optional< ccf::ds::SizeString > max_client_response_size
Definition attestation_sev_snp_endorsements.h:79
EndorsementsEndpointType type
Definition attestation_sev_snp_endorsements.h:76
bool operator==(const EndorsementsServer &) const =default
std::optional< std::string > url
Definition attestation_sev_snp_endorsements.h:77
Definition attestation_sev_snp_endorsements.h:90
std::string port
Definition attestation_sev_snp_endorsements.h:92
std::string host
Definition attestation_sev_snp_endorsements.h:91