9#include <nlohmann/json.hpp>
14 static std::string virtual_attestation_path(
const std::string& suffix)
16 return fmt::format(
"ccf_virtual_attestation.{}.{}", ::getpid(), suffix);
19 static void emit_virtual_measurement()
21 const auto package_path = std::filesystem::canonical(
"/proc/self/exe");
23 std::ifstream f(package_path, std::ios::binary | std::ios::ate);
26 throw std::runtime_error(fmt::format(
27 "Cannot emit virtual measurement: Cannot open file {}", package_path));
30 const size_t size = f.tellg();
31 f.seekg(0, std::ios::beg);
33 static constexpr size_t buf_size = 4096;
37 while (handled < size)
39 const auto this_read = std::min(size - handled, buf_size);
40 f.read(buf, this_read);
42 hasher->update_hash({(
const uint8_t*)buf, this_read});
47 const auto package_hash = hasher->finalise();
49 auto j = nlohmann::json::object();
51 j[
"measurement"] =
"Insecure hard-coded virtual measurement v1";
52 j[
"host_data"] = package_hash.hex_str();
54 files::dump(j.dump(2), virtual_attestation_path(
"measurement"));
57 static void generate_virtual_quote(
58 PlatformAttestationReportData& report_data,
62 auto quote = files::slurp_json(virtual_attestation_path(
"measurement"));
65 files::dump(quote.dump(2), virtual_attestation_path(
"attestation"));
67 auto dumped_quote = quote.dump();
68 std::vector<uint8_t> quote_vec(dumped_quote.begin(), dumped_quote.end());
74 .uvm_endorsements = {},
79 static void generate_snp_quote(
80 PlatformAttestationReportData& report_data,
84 QuoteInfo node_quote_info = {};
86 auto attestation = snp::get_attestation(report_data);
88 node_quote_info.quote = attestation->get_raw();
90 if (endorsement_cb !=
nullptr)
94 snp::make_endorsement_endpoint_configuration(
95 attestation->get(), endorsements_servers));
99 static void generate_quote(
100 PlatformAttestationReportData& report_data,
104 switch (ccf::pal::platform)
108 generate_snp_quote(report_data, endorsement_cb, endorsements_servers);
114 generate_virtual_quote(
115 report_data, endorsement_cb, endorsements_servers);
121 throw std::logic_error(fmt::format(
122 "Unsupported platform for quote generation: {}", ccf::pal::platform));
std::string b64_from_raw(const uint8_t *data, size_t size)
Definition base64.cpp:41
std::shared_ptr< ISha256Hash > make_incremental_sha256()
Definition hash.cpp:46
std::vector< EndorsementsServer > EndorsementsServers
Definition attestation_sev_snp_endorsements.h:87
Definition attestation.h:20
std::function< void(const QuoteInfo "e_info, const snp::EndorsementEndpointsConfiguration &config)> RetrieveEndorsementCallback
Definition attestation.h:26