diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c index 69511d1..7545d51 100644 --- a/tpm/tpm_cmd_handler.c +++ b/tpm/tpm_cmd_handler.c @@ -3347,12 +3347,13 @@ static TPM_RESULT execute_TPM_DeepQuote(TPM_REQUEST *req, TPM_RESPONSE *rsp) { TPM_NONCE nonce; TPM_RESULT res; - UINT32 sigSize; - BYTE *sig; + UINT32 quote_blob_size; + BYTE *quote_blob; BYTE *ptr; UINT32 len; TPM_PCR_SELECTION myPCR; TPM_PCR_SELECTION ptPCR; + UINT32 extraInfoFlags = 0; tpm_compute_in_param_digest(req); @@ -3361,17 +3362,19 @@ static TPM_RESULT execute_TPM_DeepQuote(TPM_REQUEST *req, TPM_RESPONSE *rsp) if (tpm_unmarshal_TPM_NONCE(&ptr, &len, &nonce) || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &myPCR) || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &ptPCR) + || tpm_unmarshal_TPM_DEEP_QUOTE_INFO(&ptr, &len, &extraInfoFlags) || len != 0) return TPM_BAD_PARAMETER; - res = TPM_DeepQuote(&nonce, &myPCR, &ptPCR, &req->auth1, &sigSize, &sig); + res = TPM_DeepQuote(&nonce, &myPCR, &ptPCR, &req->auth1, extraInfoFlags, + "e_blob_size, "e_blob); if (res != TPM_SUCCESS) return res; - rsp->paramSize = len = sigSize; + rsp->paramSize = len = quote_blob_size; rsp->param = ptr = tpm_malloc(len); - if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, sig, sigSize)) { + if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, quote_blob, quote_blob_size)) { tpm_free(rsp->param); res = TPM_FAIL; } - tpm_free(sig); + tpm_free(quote_blob); return res; } diff --git a/tpm/tpm_commands.h b/tpm/tpm_commands.h index 328d1be..a56dd5f 100644 --- a/tpm/tpm_commands.h +++ b/tpm/tpm_commands.h @@ -3077,6 +3077,7 @@ TPM_RESULT TPM_ParentSignEK( * @myPCR: [in] PCR selection for the virtual TPM * @ptPCR: [in] PCR selection for the hardware TPM * @auth1: [in, out] Authorization protocol parameters + * @extraInfoFlags [in] Flags for including, kernel hash, group info, etc * @sigSize: [out] The length of the returned digital signature * @sig: [out] The resulting digital signature and PCR values * Returns: TPM_SUCCESS on success, a TPM error code otherwise. @@ -3086,6 +3087,7 @@ TPM_RESULT TPM_DeepQuote( TPM_PCR_SELECTION *myPCR, TPM_PCR_SELECTION *ptPCR, TPM_AUTH *auth1, + UINT32 extraInfoFlags, UINT32 *sigSize, BYTE **sig ); diff --git a/tpm/tpm_credentials.c b/tpm/tpm_credentials.c index c0d62e7..6586c22 100644 --- a/tpm/tpm_credentials.c +++ b/tpm/tpm_credentials.c @@ -183,7 +183,8 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_KEY_HANDLE keyHandle, TPM_AUTH *auth1, int endorsementKeyFresh = 0; -TPM_RESULT VTPM_GetParentQuote(TPM_DIGEST* data, TPM_PCR_SELECTION *sel, UINT32 *sigSize, BYTE **sig); +TPM_RESULT VTPM_GetParentQuote(TPM_NONCE *data, TPM_PCR_SELECTION *sel, + UINT32 extraInfoFlags, UINT32 *sigSize, BYTE **sig); TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, TPM_AUTH *auth1, UINT32 *sigSize, BYTE **sig) @@ -191,7 +192,7 @@ TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, TPM_PUBKEY pubKey; TPM_RESULT res; TPM_DIGEST hres; - + UINT32 extraInfoFlags = 0; info("TPM_ParentSignEK()"); res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER); @@ -206,7 +207,7 @@ TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, res = TPM_FAIL; if (res == TPM_SUCCESS) - res = VTPM_GetParentQuote(&hres, sel, sigSize, sig); + res = VTPM_GetParentQuote((TPM_NONCE*)&hres, sel, extraInfoFlags, sigSize, sig); free_TPM_PUBKEY(pubKey); return res; @@ -218,7 +219,7 @@ static const BYTE dquot_hdr[] = { TPM_RESULT TPM_DeepQuote(TPM_NONCE *externalData, TPM_PCR_SELECTION *myPCR, TPM_PCR_SELECTION *ptPCR, TPM_AUTH *auth1, - UINT32 *sigSize, BYTE **sig) + UINT32 extraInfoFlags, UINT32 *quote_blob_size, BYTE **quote_blob) { TPM_RESULT res; TPM_DIGEST hres; @@ -253,7 +254,7 @@ TPM_RESULT TPM_DeepQuote(TPM_NONCE *externalData, TPM_PCR_SELECTION *myPCR, tpm_free(buf); - res = VTPM_GetParentQuote(&hres, ptPCR, sigSize, sig); + res = VTPM_GetParentQuote((TPM_NONCE*)&hres, ptPCR, extraInfoFlags, quote_blob_size, quote_blob); return res; } diff --git a/tpm/tpm_marshalling.h b/tpm/tpm_marshalling.h index d510ebe..2e0c008 100644 --- a/tpm/tpm_marshalling.h +++ b/tpm/tpm_marshalling.h @@ -268,6 +268,8 @@ static inline int tpm_unmarshal_BOOL(BYTE **ptr, UINT32 *length, BOOL *v) #define tpm_unmarshal_TPM_REDIR_COMMAND tpm_unmarshal_UINT32 #define tpm_marshal_DAAHANDLE tpm_marshal_UINT32 #define tpm_unmarshal_DAAHANDLE tpm_unmarshal_UINT32 +#define tpm_marshal_TPM_DEEP_QUOTE_INFO tpm_marshal_UINT32 +#define tpm_unmarshal_TPM_DEEP_QUOTE_INFO tpm_unmarshal_UINT32 int tpm_marshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n); int tpm_unmarshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n);