34 auto buf_ptr =
reinterpret_cast<uint8_t*
>(&buf);
35 const std::span<const uint8_t> tcb_bytes{
36 buf_ptr, buf_ptr +
sizeof(
CPUID)};
38 "{:02x}", fmt::join(tcb_bytes.rbegin(), tcb_bytes.rend(),
""));
52 CPUID, stepping, base_model, base_family, extended_model, extended_family);
54 sizeof(
CPUID) ==
sizeof(uint32_t),
"Cannot cast CPUID to uint32_t");
55 static CPUID cpuid_from_hex(
const std::string& hex_str)
58 auto* buf_ptr =
reinterpret_cast<uint8_t*
>(&ret);
59 ccf::ds::from_hex(hex_str, buf_ptr, buf_ptr +
sizeof(CPUID));
61 buf_ptr, buf_ptr +
sizeof(CPUID));
67 static CPUID get_cpuid_untrusted()
79 :
"=a"(oeax),
"=b"(oebx),
"=c"(oecx),
"=d"(oedx)
80 :
"a"(ieax),
"b"(iebx),
"c"(iecx),
"d"(iedx));
81 auto cpuid = *
reinterpret_cast<CPUID*
>(&oeax);
103 throw std::logic_error(
"Unknown SEV-SNP product");
120 constexpr uint8_t milan_family = 0x19;
121 constexpr uint8_t milan_model = 0x01;
122 if (family == milan_family && model == milan_model)
126 constexpr uint8_t genoa_family = 0x19;
127 constexpr uint8_t genoa_model = 0x11;
128 if (family == genoa_family && model == genoa_model)
132 constexpr uint8_t turin_family = 0x1A;
133 constexpr uint8_t turin_model = 0x01;
134 if (family == turin_family && model == turin_model)
138 throw std::logic_error(fmt::format(
139 "SEV-SNP: Unsupported CPUID family {} model {}", family, model));
158 throw std::logic_error(fmt::format(
159 "SEV-SNP: Unsupported product for CPUID: {}",
to_string(product)));
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:714
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:663
#define DECLARE_JSON_ENUM(TYPE,...)
Definition json.h:837
Definition attestation_sev_snp.h:24
std::string to_string(ProductName product)
Definition sev_snp_cpuid.h:92
ProductName
Definition sev_snp_cpuid.h:86
uint8_t AMDModel
Definition sev_snp_cpuid.h:116
ProductName get_sev_snp_product(AMDFamily family, AMDModel model)
Definition sev_snp_cpuid.h:118
uint8_t AMDFamily
Definition sev_snp_cpuid.h:115
std::string get_cpuid_of_snp_sev_product(ProductName product)
Definition sev_snp_cpuid.h:147
Definition sev_snp_cpuid.h:21
uint8_t get_family_id() const
Definition sev_snp_cpuid.h:40
uint8_t extended_model
Definition sev_snp_cpuid.h:26
uint8_t extended_family
Definition sev_snp_cpuid.h:27
std::string hex_str() const
Definition sev_snp_cpuid.h:31
uint8_t base_family
Definition sev_snp_cpuid.h:24
uint8_t get_model_id() const
Definition sev_snp_cpuid.h:44
uint8_t reserved
Definition sev_snp_cpuid.h:25
bool operator==(const CPUID &) const =default
uint8_t stepping
Definition sev_snp_cpuid.h:22
uint8_t base_model
Definition sev_snp_cpuid.h:23
uint8_t reserved2
Definition sev_snp_cpuid.h:28