return rc;
}
-static TPM_RC tpm2_get_bound_handle(TSS_CONTEXT *tssContext, TPM_HANDLE *handle,
- TPM_HANDLE bind, const char *auth)
+static TPM_RC tpm2_get_session_handle(TSS_CONTEXT *tssContext, TPM_HANDLE *handle,
+ TPM_HANDLE bind, const char *auth,
+ TPM_HANDLE salt_key)
{
TPM_RC rc;
StartAuthSession_In in;
in.symmetric.algorithm = TPM_ALG_AES;
in.symmetric.keyBits.aes = 128;
in.symmetric.mode.aes = TPM_ALG_CFB;
- rc = TSS_Execute(tssContext,
- (RESPONSE_PARAMETERS *)&out,
- (COMMAND_PARAMETERS *)&in,
- (EXTRA_PARAMETERS *)&extra,
- TPM_CC_StartAuthSession,
- TPM_RH_NULL, NULL, 0);
- if (rc) {
- tpm2_error(rc, "TPM2_StartAuthSession");
- return rc;
- }
-
- *handle = out.sessionHandle;
-
- return TPM_RC_SUCCESS;
-}
-
-static TPM_RC tpm2_get_session_handle(TSS_CONTEXT *tssContext, TPM_HANDLE *handle,
- TPM_HANDLE salt_key, TPM_SE sessionType)
-{
- TPM_RC rc;
- StartAuthSession_In in;
- StartAuthSession_Out out;
- StartAuthSession_Extra extra;
-
- memset(&in, 0, sizeof(in));
- memset(&extra, 0 , sizeof(extra));
- in.bind = TPM_RH_NULL;
- in.sessionType = sessionType;
- in.authHash = TPM_ALG_SHA256;
- in.tpmKey = TPM_RH_NULL;
- in.symmetric.algorithm = TPM_ALG_AES;
- in.symmetric.keyBits.aes = 128;
- in.symmetric.mode.aes = TPM_ALG_CFB;
if (salt_key) {
/* For the TSS to use a key as salt, it must have
* access to the public part. It does this by keeping
/* use a bound session here because we have no known key objects
* to encrypt a salt to */
- rc = tpm2_get_bound_handle(tssContext, &session, hierarchy, auth);
+ rc = tpm2_get_session_handle(tssContext, &session, hierarchy, auth, 0);
if (rc)
return rc;
if (rc)
goto out;
}
- rc = tpm2_get_session_handle(tssContext, &session, in.parentHandle,
- TPM_SE_HMAC);
+ rc = tpm2_get_session_handle(tssContext, &session, 0, NULL, in.parentHandle);
if (rc)
goto out_flush_srk;
if (!in.keyHandle)
return GNUTLS_E_PK_SIGN_FAILED;
- rc = tpm2_get_session_handle(tssContext, &authHandle, 0, TPM_SE_HMAC);
+ rc = tpm2_get_session_handle(tssContext, &authHandle, 0, NULL, 0);
if (rc)
goto out;
if (!in.keyHandle)
return GNUTLS_E_PK_SIGN_FAILED;
- rc = tpm2_get_session_handle(tssContext, &authHandle, 0, TPM_SE_HMAC);
+ rc = tpm2_get_session_handle(tssContext, &authHandle, 0, NULL, 0);
if (rc)
goto out;