20 static constexpr auto NO_SECURITY_POLICY =
"";
24 R
"(-----BEGIN PUBLIC KEY-----
25MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0Ld52RJOdeiJlqK2JdsV
26mD7FktuotWwX1fNgW41XY9Xz1HEhSUmhLz9Cu9DHRlvgJSNxbeYYsnJfvyjx1MfU
270V5tkKiU1EesNFta1kTA0szNisdYc9isqk7mXT5+KfGRbfc4V/9zRIcE8jlHN61S
281ju8X93+6dxDUrG2SzxqJ4BhqyYmUDruPXJSX4vUc01P7j98MpqOS95rORdGHeI5
292Naz5m2B+O+vjsC060d37jY9LFeuOP4Meri8qgfi2S5kKqg/aF6aPtuAZQVR7u3K
30FYXP59XmJgtcog05gmI0T/OitLhuzVvpZcLph0odh/1IPXqx3+MnjD97A7fXpqGd
31/y8KxX7jksTEzAOgbKAeam3lm+3yKIcTYMlsRMXPcjNbIvmsBykD//xSniusuHBk
32gnlENEWx1UcbQQrs+gVDkuVPhsnzIRNgYvM48Y+7LGiJYnrmE8xcrexekBxrva2V
339TJQqnN3Q53kt5viQi3+gCfmkwC0F0tirIZbLkXPrPwzZ0M9eNxhIySb2npJfgnq
34z55I0u33wh4r0ZNQeTGfw03MBUtyuzGesGkcw+loqMaq1qR4tjGbPYxCvpCq7+Og
35pCCoMNit2uLo9M18fHz10lOMT8nWAUvRZFzteXCm+7PHdYPlmQwUw3LvenJ/ILXo
36QPHfbkH0CyPfhl1jWhJFZasCAwEAAQ==
37-----END PUBLIC KEY-----
40 R
"(-----BEGIN PUBLIC KEY-----
41MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3Cd95S/uFOuRIskW9vz9
42VDBF69NDQF79oRhL/L2PVQGhK3YdfEBgpF/JiwWFBsT/fXDhzA01p3LkcT/7Ldjc
43RfKXjHl+0Qq/M4dZkh6QDoUeKzNBLDcBKDDGWo3v35NyrxbA1DnkYwUKU5AAk4P9
444tKXLp80oxt84ahyHoLmc/LqsGsp+oq1Bz4PPsYLwTG4iMKVaaT90/oZ4I8oibSr
45u92vJhlqWO27d/Rxc3iUMyhNeGToOvgx/iUo4gGpG61NDpkEUvIzuKcaMx8IdTpW
46g2DF6SwF0IgVMffnvtJmA68BwJNWo1E4PLJdaPfBifcJpuBFwNVQIPQEVX3aP89H
47JSp8YbY9lySS6PlVEqTBBtaQmi4ATGmMR+n2K/e+JAhU2Gj7jIpJhOkdH9firQDn
48mlA2SFfJ/Cc0mGNzW9RmIhyOUnNFoclmkRhl3/AQU5Ys9Qsan1jT/EiyT+pCpmnA
49+y9edvhDCbOG8F2oxHGRdTBkylungrkXJGYiwGrR8kaiqv7NN8QhOBMqYjcbrkEr
500f8QMKklIS5ruOfqlLMCBw8JLB3LkjpWgtD7OpxkzSsohN47Uom86RY6lp72g8eX
51HP1qYrnvhzaG1S70vw6OkbaaC9EjiH/uHgAJQGxon7u0Q7xgoREWA/e7JcBQwLg8
520Hq/sbRuqesxz7wBWSY254cCAwEAAQ==
53-----END PUBLIC KEY-----
56 R
"(-----BEGIN PUBLIC KEY-----
57MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwaAriB7EIuVc4ZB1wD3Y
58fDxL+9eyS7+izm0Jj3W772NINCWl8Bj3w/JD2ZjmbRxWdIq/4d9iarCKorXloJUB
591jRdgxqccTx1aOoig4+2w1XhVVJT7K457wT5ZLNJgQaxqa9Etkwjd6+9sOhlCDE9
60l43kQ0R2BikVJa/uyyVOSwEk5w5tXKOuG9jvq6QtAMJasW38wlqRDaKEGtZ9VUgG
61on27ZuL4sTJuC/azz9/iQBw8kEilzOl95AiTkeY5jSEBDWbAqnZk5qlM7kISKG20
62kgQm14mhNKDI2p2oua+zuAG7i52epoRF2GfU0TYk/yf+vCNB2tnechFQuP2e8bLk
6395ZdqPi9/UWw4JXjtdEA4u2JYplSSUPQVAXKt6LVqujtJcM59JKr2u0XQ75KwxcM
64p15gSXhBfInvPAwuAY4dEwwGqT8oIg4esPHwEsmChhYeDIxPG9R4fx9O0q6p8Gb+
65HXlTiS47P9YNeOpidOUKzDl/S1OvyhDtSL8LJc24QATFydo/iD/KUdvFTRlD0crk
66AMkZLoWQ8hLDGc6BZJXsdd7Zf2e4UW3tI/1oh/2t23Ot3zyhTcv5gDbABu0LjVe9
678uRnS15SMwK//lJt9e5BqKvgABkSoABf+B4VFtPVEX0ygrYaFaI9i5ABrxnVBmzX
68pRb21iI1NlNCfOGUPIhVpWECAwEAAQ==
69-----END PUBLIC KEY-----
94 "Can't cast TcbVersion to uint64_t");
128 "Can't cast GuestPolicy to uint64_t");
130 static constexpr uint8_t attestation_flags_signing_key_vcek = 0;
142 sizeof(
Flags) ==
sizeof(uint32_t),
"Can't cast Flags to uint32_t");
155 "Can't cast PlatformInfo to uint64_t");
160 static constexpr uint32_t minimum_attestation_version = 2;
161 static constexpr uint32_t attestation_policy_abi_major = 1;
207 if (server.
url.has_value())
209 auto url = server.
url.value();
210 auto pos = url.find(
':');
211 if (pos == std::string::npos)
213 return {url, default_values.
port};
217 return {url.substr(0, pos), url.substr(pos + 1)};
221 return default_values;
224 static EndorsementEndpointsConfiguration
225 make_endorsement_endpoint_configuration(
226 const Attestation& quote,
229 EndorsementEndpointsConfiguration config;
231 auto chip_id_hex = fmt::format(
"{:02x}", fmt::join(quote.chip_id,
""));
232 auto reported_tcb = fmt::format(
"{:0x}", *(uint64_t*)("e.reported_tcb));
234 if (endorsements_servers.empty())
237 config.servers.emplace_back(make_azure_endorsements_server(
238 default_azure_endorsements_endpoint, chip_id_hex, reported_tcb));
242 for (
auto const& server : endorsements_servers)
249 get_endpoint_loc(server, default_azure_endorsements_endpoint);
250 config.servers.emplace_back(
251 make_azure_endorsements_server(loc, chip_id_hex, reported_tcb));
256 auto boot_loader = fmt::format(
"{}", quote.reported_tcb.boot_loader);
257 auto tee = fmt::format(
"{}", quote.reported_tcb.tee);
258 auto snp = fmt::format(
"{}", quote.reported_tcb.snp);
259 auto microcode = fmt::format(
"{}", quote.reported_tcb.microcode);
264 get_endpoint_loc(server, default_amd_endorsements_endpoint);
265 config.servers.emplace_back(make_amd_endorsements_server(
266 loc, chip_id_hex, boot_loader, tee, snp, microcode, product));
272 get_endpoint_loc(server, default_thim_endorsements_endpoint);
273 config.servers.emplace_back(
274 make_thim_endorsements_server(loc, chip_id_hex, reported_tcb));
279 throw std::logic_error(fmt::format(
280 "Unsupported endorsements server type: {}", server.
type));
Definition attestation_sev_snp.h:289
virtual std::vector< uint8_t > get_raw()=0
virtual ~AttestationInterface()=default
virtual const snp::Attestation & get() const =0
Definition attestation_sev_snp.h:16
constexpr auto amd_genoa_root_signing_public_key
Definition attestation_sev_snp.h:39
SignatureAlgorithm
Definition attestation_sev_snp.h:107
@ Azure
Definition attestation_sev_snp_endorsements.h:61
@ THIM
Definition attestation_sev_snp_endorsements.h:63
@ AMD
Definition attestation_sev_snp_endorsements.h:62
constexpr auto amd_milan_root_signing_public_key
Definition attestation_sev_snp.h:23
ProductName get_sev_snp_product(AMDFamily family, AMDModel model)
Definition sev_snp_cpuid.h:42
constexpr auto amd_turin_root_signing_public_key
Definition attestation_sev_snp.h:55
std::vector< EndorsementsServer > EndorsementsServers
Definition attestation_sev_snp_endorsements.h:81
const std::map< ProductName, const char * > amd_root_signing_keys
Definition attestation_sev_snp.h:72
Definition attestation_sev_snp.h:164
uint8_t reserved3
Definition attestation_sev_snp.h:197
struct TcbVersion committed_tcb
Definition attestation_sev_snp.h:189
uint32_t guest_svn
Definition attestation_sev_snp.h:166
uint8_t committed_major
Definition attestation_sev_snp.h:196
struct Signature signature
Definition attestation_sev_snp.h:200
uint8_t current_build
Definition attestation_sev_snp.h:191
uint8_t id_key_digest[48]
Definition attestation_sev_snp.h:179
PlatformInfo platform_info
Definition attestation_sev_snp.h:173
uint8_t chip_id[64]
Definition attestation_sev_snp.h:188
uint8_t committed_minor
Definition attestation_sev_snp.h:195
uint8_t reserved2
Definition attestation_sev_snp.h:193
uint32_t reserved0
Definition attestation_sev_snp.h:175
struct GuestPolicy policy
Definition attestation_sev_snp.h:167
uint32_t version
Definition attestation_sev_snp.h:165
uint8_t measurement[snp_attestation_measurement_size]
Definition attestation_sev_snp.h:177
uint8_t host_data[32]
Definition attestation_sev_snp.h:178
uint8_t current_minor
Definition attestation_sev_snp.h:190
uint8_t report_data[snp_attestation_report_data_size]
Definition attestation_sev_snp.h:176
uint8_t family_id[16]
Definition attestation_sev_snp.h:168
uint8_t committed_build
Definition attestation_sev_snp.h:194
uint8_t image_id[16]
Definition attestation_sev_snp.h:169
uint8_t cpuid_fam_id
Definition attestation_sev_snp.h:184
uint8_t report_id[32]
Definition attestation_sev_snp.h:181
uint8_t reserved1[21]
Definition attestation_sev_snp.h:187
uint32_t vmpl
Definition attestation_sev_snp.h:170
SignatureAlgorithm signature_algo
Definition attestation_sev_snp.h:171
struct TcbVersion reported_tcb
Definition attestation_sev_snp.h:183
struct TcbVersion platform_version
Definition attestation_sev_snp.h:172
struct TcbVersion launch_tcb
Definition attestation_sev_snp.h:198
uint8_t report_id_ma[32]
Definition attestation_sev_snp.h:182
uint8_t cpuid_step
Definition attestation_sev_snp.h:186
Flags flags
Definition attestation_sev_snp.h:174
uint8_t cpuid_mod_id
Definition attestation_sev_snp.h:185
uint8_t current_major
Definition attestation_sev_snp.h:192
uint8_t reserved4[168]
Definition attestation_sev_snp.h:199
uint8_t author_key_digest[48]
Definition attestation_sev_snp.h:180
Definition attestation_sev_snp_endorsements.h:72
EndorsementsEndpointType type
Definition attestation_sev_snp_endorsements.h:73
std::optional< std::string > url
Definition attestation_sev_snp_endorsements.h:74
Definition attestation_sev_snp.h:134
uint64_t reserved
Definition attestation_sev_snp.h:138
uint8_t signing_key
Definition attestation_sev_snp.h:137
uint8_t mask_chip_key
Definition attestation_sev_snp.h:136
uint8_t author_key_en
Definition attestation_sev_snp.h:135
Definition attestation_sev_snp.h:115
uint8_t single_socket
Definition attestation_sev_snp.h:122
uint64_t reserved2
Definition attestation_sev_snp.h:123
uint8_t abi_major
Definition attestation_sev_snp.h:117
uint8_t abi_minor
Definition attestation_sev_snp.h:116
uint8_t reserved
Definition attestation_sev_snp.h:119
uint8_t smt
Definition attestation_sev_snp.h:118
uint8_t migrate_ma
Definition attestation_sev_snp.h:120
uint8_t debug
Definition attestation_sev_snp.h:121
Definition attestation_sev_snp_endorsements.h:84
std::string port
Definition attestation_sev_snp_endorsements.h:86
Definition attestation_sev_snp.h:98
uint8_t r[72]
Definition attestation_sev_snp.h:99
uint8_t reserved[512 - 144]
Definition attestation_sev_snp.h:101
uint8_t s[72]
Definition attestation_sev_snp.h:100
Definition attestation_sev_snp.h:82
uint8_t reserved[4]
Definition attestation_sev_snp.h:85
uint8_t boot_loader
Definition attestation_sev_snp.h:83
uint8_t microcode
Definition attestation_sev_snp.h:87
bool operator==(const TcbVersion &) const =default
uint8_t tee
Definition attestation_sev_snp.h:84
uint8_t snp
Definition attestation_sev_snp.h:86