Add TPM2_PrintPublicArea to help debugging

Signed-off-by: Dimitar Tomov <dimi@wolfssl.com>
pull/143/head
Dimitar Tomov 2021-03-05 17:54:29 +02:00 committed by David Garske
parent daa690293d
commit dfb65753e1
3 changed files with 84 additions and 0 deletions

View File

@ -5785,6 +5785,87 @@ void TPM2_PrintAuth(const TPMS_AUTH_COMMAND* authCmd)
printf("hmacSize=%u hmacBuffer:\n", authCmd->hmac.size);
TPM2_PrintBin(authCmd->hmac.buffer, authCmd->hmac.size);
}
void TPM2_PrintPublicArea(const TPM2B_PUBLIC* pub)
{
printf("publicArea:\n");
printf("Total public area size is = %d\n", pub->size);
/* Sanity check */
if (pub->size > (sizeof(TPM2B_PUBLIC)) || pub->size == 0) {
printf("Incorrect publicArea size. Aborting debug print\n");
return;
}
printf("algType = 0x%2.2X\n", pub->publicArea.type);
printf("nameAlg = 0x%2.2X\n", pub->publicArea.nameAlg);
printf("objectAttributes = 0x%X\n", pub->publicArea.objectAttributes);
printf("authPolicy size = %d\n", pub->publicArea.authPolicy.size);
/* authPolicy is optional */
if (pub->publicArea.authPolicy.size > 0 &&
pub->publicArea.authPolicy.size < sizeof(pub->publicArea.authPolicy)) {
TPM2_PrintBin(pub->publicArea.authPolicy.buffer,
pub->publicArea.authPolicy.size);
}
else {
printf("authPolicy size is incorrect = %d\n", pub->publicArea.authPolicy.size);
}
/* parameters and unique field depend on algType */
switch(pub->publicArea.type) {
case TPM_ALG_KEYEDHASH:
printf("KeyedHash scheme = 0x%2.2X\n", pub->publicArea.parameters.keyedHashDetail.scheme.scheme);
printf("KeyedHash details = 0x%2.2X\n", pub->publicArea.parameters.keyedHashDetail.scheme.details.hmac.hashAlg);
printf("KeyedHash unique\n");
TPM2_PrintBin(pub->publicArea.unique.keyedHash.buffer, pub->publicArea.unique.keyedHash.size);
break;
case TPM_ALG_SYMCIPHER:
printf("symDetail algorithm = 0x%2.2X\n", pub->publicArea.parameters.symDetail.sym.algorithm);
printf("symDetail keyBits = 0x%2.2X\n", pub->publicArea.parameters.symDetail.sym.keyBits.sym);
printf("symDetail mode = 0x%2.2X\n", pub->publicArea.parameters.symDetail.sym.mode.sym);
printf("symDetail unique\n");
TPM2_PrintBin(pub->publicArea.unique.sym.buffer, pub->publicArea.unique.sym.size);
break;
case TPM_ALG_RSA:
printf("rsaDetail algorithm = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.symmetric.algorithm);
printf("rsaDetail keyBits = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.symmetric.keyBits.sym);
printf("rsaDetail mode = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.symmetric.mode.sym);
printf("rsaDetail scheme = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.scheme.scheme);
printf("rsaDetail scheme details = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.scheme.details.anySig.hashAlg);
printf("rsaDetail keyBits = 0x%2.2X\n", pub->publicArea.parameters.rsaDetail.keyBits);
printf("rsaDetail exponent = 0x%X\n", pub->publicArea.parameters.rsaDetail.exponent);
printf("RSA Detail unique\n");
TPM2_PrintBin(pub->publicArea.unique.rsa.buffer, pub->publicArea.unique.rsa.size);
break;
case TPM_ALG_ECC:
printf("eccDetail algorithm = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.symmetric.algorithm);
printf("eccDetail keyBits = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.symmetric.keyBits.sym);
printf("eccDetail mode = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.symmetric.mode.sym);
printf("eccDetail scheme = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.scheme.scheme);
printf("eccDetail scheme details = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.scheme.details.any.hashAlg);
printf("eccDetail curveID = 0x%2.2X\n", pub->publicArea.parameters.eccDetail.curveID);
printf("eccDetail KDF scheme = 0x%X\n", pub->publicArea.parameters.eccDetail.kdf.scheme);
printf("eccDetail KDF details = 0x%X\n", pub->publicArea.parameters.eccDetail.kdf.details.any.hashAlg);
printf("ECC Detail unique X\n");
TPM2_PrintBin(pub->publicArea.unique.ecc.x.buffer, pub->publicArea.unique.ecc.x.size);
printf("ECC Detail unique Y\n");
TPM2_PrintBin(pub->publicArea.unique.ecc.y.buffer, pub->publicArea.unique.ecc.y.size);
break;
default:
/* derive does not seem to have specific fields in the parameters struct */
printf("Derive unique label\n");
TPM2_PrintBin(pub->publicArea.unique.derive.label.buffer, pub->publicArea.unique.derive.label.size);
printf("Derive unique context\n");
TPM2_PrintBin(pub->publicArea.unique.derive.context.buffer, pub->publicArea.unique.derive.context.size);
break;
}
}
#endif
/******************************************************************************/

View File

@ -955,6 +955,7 @@ int wolfTPM2_CreateKey(WOLFTPM2_DEV* dev, WOLFTPM2_KEYBLOB* keyBlob,
printf("TPM2_Create key: pub %d, priv %d\n",
createOut.outPublic.size, createOut.outPrivate.size);
TPM2_PrintBin(createOut.outPrivate.buffer, createOut.outPrivate.size);
TPM2_PrintPublicArea(&createOut.outPublic);
#endif
keyBlob->handle.auth = createIn.inSensitive.sensitive.userAuth;

View File

@ -2821,9 +2821,11 @@ WOLFTPM_API UINT16 TPM2_GetVendorID(void);
#ifdef DEBUG_WOLFTPM
WOLFTPM_API void TPM2_PrintBin(const byte* buffer, word32 length);
WOLFTPM_API void TPM2_PrintAuth(const TPMS_AUTH_COMMAND* authCmd);
WOLFTPM_API void TPM2_PrintPublicArea(const TPM2B_PUBLIC* pub);
#else
#define TPM2_PrintBin(b, l)
#define TPM2_PrintAuth(b, l)
#define TPM2_PrintPublicArea(b)
#endif
#ifdef __cplusplus