35 auto* buf_ptr =
reinterpret_cast<uint8_t*
>(&buf);
36 const std::span<const uint8_t> tcb_bytes{
37 buf_ptr, buf_ptr +
sizeof(
CPUID)};
39 "{:02x}", fmt::join(tcb_bytes.rbegin(), tcb_bytes.rend(),
""));
53 CPUID, stepping, base_model, base_family, extended_model, extended_family);
55 sizeof(
CPUID) ==
sizeof(uint32_t),
"Cannot cast CPUID to uint32_t");
56 static CPUID cpuid_from_hex(
const std::string& hex_str)
59 auto* buf_ptr =
reinterpret_cast<uint8_t*
>(&ret);
60 ccf::ds::from_hex(hex_str, buf_ptr, buf_ptr +
sizeof(CPUID));
62 buf_ptr, buf_ptr +
sizeof(CPUID));
68 static CPUID get_cpuid_untrusted()
80 :
"=a"(oeax),
"=b"(oebx),
"=c"(oecx),
"=d"(oedx)
81 :
"a"(ieax),
"b"(iebx),
"c"(iecx),
"d"(iedx));
82 auto cpuid = *
reinterpret_cast<CPUID*
>(&oeax);
104 throw std::logic_error(
"Unknown SEV-SNP product");
121 constexpr uint8_t milan_family = 0x19;
122 constexpr uint8_t milan_model = 0x01;
123 if (family == milan_family && model == milan_model)
127 constexpr uint8_t genoa_family = 0x19;
128 constexpr uint8_t genoa_model = 0x11;
129 if (family == genoa_family && model == genoa_model)
133 constexpr uint8_t turin_family = 0x1A;
134 constexpr uint8_t turin_model = 0x02;
135 if (family == turin_family && model == turin_model)
139 throw std::logic_error(fmt::format(
140 "SEV-SNP: Unsupported CPUID family {} model {}", family, model));
159 throw std::logic_error(fmt::format(
160 "SEV-SNP: Unsupported product for CPUID: {}",
to_string(product)));
#define DECLARE_JSON_REQUIRED_FIELDS(TYPE,...)
Definition json.h:718
#define DECLARE_JSON_TYPE(TYPE)
Definition json.h:667
#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
uint8_t AMDModel
Definition sev_snp_cpuid.h:117
ProductName get_sev_snp_product(AMDFamily family, AMDModel model)
Definition sev_snp_cpuid.h:119
uint8_t AMDFamily
Definition sev_snp_cpuid.h:116
ProductName
Definition sev_snp_cpuid.h:87
std::string get_cpuid_of_snp_sev_product(ProductName product)
Definition sev_snp_cpuid.h:148
Definition sev_snp_cpuid.h:22
uint8_t get_family_id() const
Definition sev_snp_cpuid.h:41
uint8_t extended_model
Definition sev_snp_cpuid.h:27
uint8_t extended_family
Definition sev_snp_cpuid.h:28
std::string hex_str() const
Definition sev_snp_cpuid.h:32
uint8_t base_family
Definition sev_snp_cpuid.h:25
uint8_t get_model_id() const
Definition sev_snp_cpuid.h:45
uint8_t reserved
Definition sev_snp_cpuid.h:26
bool operator==(const CPUID &) const =default
uint8_t stepping
Definition sev_snp_cpuid.h:23
uint8_t base_model
Definition sev_snp_cpuid.h:24
uint8_t reserved2
Definition sev_snp_cpuid.h:29