libtpmtss: Extend TPM 2.0 capability info
This commit is contained in:
@@ -150,14 +150,55 @@ static bool is_supported_alg(private_tpm_tss_tss2_t *this, TPM_ALG_ID alg_id)
|
|||||||
static bool get_algs_capability(private_tpm_tss_tss2_t *this)
|
static bool get_algs_capability(private_tpm_tss_tss2_t *this)
|
||||||
{
|
{
|
||||||
TPMS_CAPABILITY_DATA cap_data;
|
TPMS_CAPABILITY_DATA cap_data;
|
||||||
|
TPMS_TAGGED_PROPERTY tp;
|
||||||
TPMI_YES_NO more_data;
|
TPMI_YES_NO more_data;
|
||||||
TPM_ALG_ID alg;
|
TPM_ALG_ID alg;
|
||||||
uint32_t rval, i;
|
uint32_t rval, i, offset, revision = 0, year = 0;
|
||||||
size_t len = BUF_LEN;
|
size_t len = BUF_LEN;
|
||||||
char buf[BUF_LEN];
|
char buf[BUF_LEN], manufacturer[5], vendor_string[17];
|
||||||
char *pos = buf;
|
char *pos = buf;
|
||||||
int written;
|
int written;
|
||||||
|
|
||||||
|
/* get fixed properties */
|
||||||
|
rval = Tss2_Sys_GetCapability(this->sys_context, 0, TPM_CAP_TPM_PROPERTIES,
|
||||||
|
PT_FIXED, MAX_TPM_PROPERTIES, &more_data, &cap_data, 0);
|
||||||
|
if (rval != TPM_RC_SUCCESS)
|
||||||
|
{
|
||||||
|
DBG1(DBG_PTS, "%s GetCapability failed for TPM_CAP_TPM_PROPERTIES: 0x%06x",
|
||||||
|
LABEL, rval);
|
||||||
|
}
|
||||||
|
memset(manufacturer, '\0', sizeof(manufacturer));
|
||||||
|
memset(vendor_string, '\0', sizeof(vendor_string));
|
||||||
|
|
||||||
|
/* print fixed properties */
|
||||||
|
for (i = 0; i < cap_data.data.tpmProperties.count; i++)
|
||||||
|
{
|
||||||
|
tp = cap_data.data.tpmProperties.tpmProperty[i];
|
||||||
|
switch (tp.property)
|
||||||
|
{
|
||||||
|
case TPM_PT_REVISION:
|
||||||
|
revision = tp.value;
|
||||||
|
break;
|
||||||
|
case TPM_PT_YEAR:
|
||||||
|
year = tp.value;
|
||||||
|
break;
|
||||||
|
case TPM_PT_MANUFACTURER:
|
||||||
|
htoun32(manufacturer, tp.value);
|
||||||
|
break;
|
||||||
|
case TPM_PT_VENDOR_STRING_1:
|
||||||
|
case TPM_PT_VENDOR_STRING_2:
|
||||||
|
case TPM_PT_VENDOR_STRING_3:
|
||||||
|
case TPM_PT_VENDOR_STRING_4:
|
||||||
|
offset = 4 * (tp.property - TPM_PT_VENDOR_STRING_1);
|
||||||
|
htoun32(vendor_string + offset, tp.value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DBG2(DBG_PTS, "%s manufacturer: %s (%s) rev: %05.2f %u", LABEL, manufacturer,
|
||||||
|
vendor_string, (float)revision/100, year);
|
||||||
|
|
||||||
/* get supported algorithms */
|
/* get supported algorithms */
|
||||||
rval = Tss2_Sys_GetCapability(this->sys_context, 0, TPM_CAP_ALGS,
|
rval = Tss2_Sys_GetCapability(this->sys_context, 0, TPM_CAP_ALGS,
|
||||||
0, TPM_PT_ALGORITHM_SET, &more_data, &cap_data, 0);
|
0, TPM_PT_ALGORITHM_SET, &more_data, &cap_data, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user