Cover the ST33 command set probe in unit tests

pull/586/head
David Garske 2026-08-31 10:26:12 -07:00
parent 4ae80c56dd
commit 50dfdcec95
4 changed files with 40 additions and 0 deletions

View File

@ -41,6 +41,8 @@ int st33_blob0_family(word32 fwVerMajor)
case 9: /* ST33KTPM2X */
case 10: /* ST33KTPM2A */
return ST33_BLOB0_FAMILY_KTPM;
/* Uncharacterized majors stay unknown so no size or family rule is
* asserted against them, even ones the tool can name */
default:
return ST33_BLOB0_FAMILY_UNKNOWN;
}

View File

@ -289,6 +289,7 @@ static const char* TPM2_ST33_PartLine(word16 fwVerMajor)
case 74: return "ST33TPHF2X (older firmware line)";
case 9: return "ST33KTPM2X";
case 10: return "ST33KTPM2A";
/* Named for display only, and left out of the family classifiers */
case 11: return "ST33KTPMQ";
default: return "unrecognized ST33 firmware line";
}

View File

@ -11974,6 +11974,8 @@ static int tpm2_st33_family(word16 fwVerMajor)
case 9: /* ST33KTPM2X */
case 10: /* ST33KTPM2A */
return ST33_FW_FAMILY_KTPM;
/* Uncharacterized majors stay unknown so no size or family rule is
* asserted against them, even ones the tool can name */
default:
return ST33_FW_FAMILY_UNKNOWN;
}

View File

@ -284,6 +284,9 @@ static void test_wolfTPM2_ST33_FirmwareUpgrade(void)
{
int rc;
int rcEx;
int isImpl;
int fromTpm = 0;
TPM_CC ccStart, ccData, ccStartRule, ccDataRule;
WOLFTPM2_DEV dev;
WOLFTPM2_CAPS caps;
#if !defined(WOLFTPM2_NO_WOLFCRYPT) && defined(WOLFSSL_SHA384)
@ -392,6 +395,38 @@ static void test_wolfTPM2_ST33_FirmwareUpgrade(void)
}
#endif /* !WOLFTPM2_NO_WOLFCRYPT && WOLFSSL_SHA384 */
/* The probe rebuilds a command code from TPMA_CC. Every TPM implements
* GetCapability and none a top of range vendor code, so no ST33 needed */
isImpl = -1;
AssertIntEQ(wolfTPM2_ST33_CmdImplemented(TPM_CC_GetCapability, &isImpl),
TPM_RC_SUCCESS);
AssertIntEQ(isImpl, 1);
isImpl = -1;
AssertIntEQ(wolfTPM2_ST33_CmdImplemented((TPM_CC)(CC_VEND + 0x7FFE),
&isImpl), TPM_RC_SUCCESS);
AssertIntEQ(isImpl, 0);
AssertIntEQ(wolfTPM2_ST33_CmdImplemented(TPM_CC_GetCapability, NULL),
BAD_FUNC_ARG);
/* Selection stays self consistent on any TPM: a settled command list
* gives a real pair, an unsettled one gives exactly the version rule */
AssertIntEQ(wolfTPM2_ST33_GetFwUpgradeCommands(&caps, 9, &ccStart, &ccData,
&fromTpm), TPM_RC_SUCCESS);
if (fromTpm) {
AssertIntEQ(ccStart == TPM_CC_FieldUpgradeStartVendor_ST33 ||
ccStart == TPM_CC_FieldUpgradeStart, 1);
AssertIntEQ(ccData == TPM_CC_FieldUpgradeDataVendor_ST33 ||
ccData == TPM_CC_FieldUpgradeData, 1);
}
else {
AssertIntEQ(wolfTPM2_ST33_FwUpgradeCommands(caps.fwVerMinor, 1, 9,
&ccStartRule, &ccDataRule), TPM_RC_SUCCESS);
AssertIntEQ((int)ccStart, (int)ccStartRule);
AssertIntEQ((int)ccData, (int)ccDataRule);
}
AssertIntEQ(wolfTPM2_ST33_GetFwUpgradeCommands(&caps, 9, NULL, &ccData,
NULL), BAD_FUNC_ARG);
wolfTPM2_Cleanup(&dev);
printf("Test ST33 FW: %-40s Passed\n", "API Availability:");