Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions src/fwtpm/fwtpm_command.c
Original file line number Diff line number Diff line change
Expand Up @@ -9726,6 +9726,7 @@ static TPM_RC FwCmd_PolicyAuthorize(FWTPM_CTX* ctx, TPM2_Packet* cmd,
byte ccBuf[4];
UINT32 cc = TPM_CC_PolicyAuthorize;
TPMI_ALG_HASH keyNameAlg = TPM_ALG_SHA256; /* from keySignName */
int keyNameDigestSz = 0;
(void)cmdSize;

FWTPM_ALLOC_VAR(hashCtx, wc_HashAlg);
Expand Down Expand Up @@ -9760,11 +9761,25 @@ static TPM_RC FwCmd_PolicyAuthorize(FWTPM_CTX* ctx, TPM2_Packet* cmd,
TPM2_Packet_ParseBytes(cmd, keySignName, keySignNameSz);

/* Extract nameAlg from keySignName (first 2 bytes, big-endian).
* This determines the hash algorithm for aHash and ticket HMAC. */
* This determines the hash algorithm for aHash and ticket HMAC. A
* valid Name is a supported hash selector followed by exactly that
* algorithm's digest. */
if (keySignNameSz >= 2) {
keyNameAlg = (TPMI_ALG_HASH)(
((UINT16)keySignName[0] << 8) | keySignName[1]);
keyNameDigestSz = TPM2_GetHashDigestSize(keyNameAlg);
if (keyNameDigestSz <= 0) {
rc = TPM_RC_HASH;
}
else if (keySignNameSz != (UINT16)(2 + keyNameDigestSz)) {
rc = TPM_RC_SIZE;
}
}
else {
rc = TPM_RC_SIZE;
}
}
if (rc == 0) {

/* checkTicket: TPMT_TK_VERIFIED: tag(2) + hierarchy(4) + digest(TPM2B)
* Per TPM 2.0 Part 3 Section 23.16: verify ticket was produced by
Expand Down Expand Up @@ -9875,7 +9890,7 @@ static TPM_RC FwCmd_PolicyAuthorize(FWTPM_CTX* ctx, TPM2_Packet* cmd,
"(tag=0x%x, hier=0x%x, ticketSz=%d, expectedSz=%d)\n",
ticketTag, ticketHier, ticketDigestSz, expectedSz);
#endif
rc = TPM_RC_POLICY_FAIL;
rc = TPM_RC_VALUE;
}
}
TPM2_ForceZero(aHash, sizeof(aHash));
Expand Down Expand Up @@ -9918,7 +9933,7 @@ static TPM_RC FwCmd_PolicyAuthorize(FWTPM_CTX* ctx, TPM2_Packet* cmd,
printf("fwTPM: PolicyAuthorize: "
"approvedPolicy != policyDigest\n");
#endif
rc = TPM_RC_POLICY_FAIL;
rc = TPM_RC_VALUE;
}
}
}
Expand Down
Loading