internal override TpmRc Execute(Tpm2 tpm, AuthSession authSession, PolicyTree policy)
{
TpmRc res;
byte[] nonceTpm = UseNonceTpm ? Globs.CopyData(authSession.NonceTpm) : new byte[0];
if (AuthVal == null)
{
SessionBase session;
TpmHandle authorizedEntity;
bool flushHandleOnCompletion;
AssociatedPolicy.ExecutePolicySecretCallback(this,
out session,
out authorizedEntity,
out flushHandleOnCompletion);
Timeout = tpm[session].PolicySecret(authorizedEntity,
authSession,
nonceTpm,
CpHash,
PolicyRef,
ExpirationTime,
out PolicyTicket);
res = tpm._GetLastResponseCode();
if (flushHandleOnCompletion)
{
tpm.FlushContext(authorizedEntity);
}
if (!(session is Pwap))
{
tpm.FlushContext(session);
}
}
else
{
Timeout = tpm[AuthVal].PolicySecret(AuthorityHandle,
authSession,
nonceTpm,
CpHash,
PolicyRef,
ExpirationTime,
out PolicyTicket);
res = tpm._GetLastResponseCode();
}
return res;
}