15679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// This file was extracted from the TCG Published
25679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Trusted Platform Module Library
35679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Part 3: Commands
45679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Family "2.0"
55679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Level 00 Revision 01.16
65679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// October 30, 2014
75679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
85679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "InternalRoutines.h"
95679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "PolicyPassword_fp.h"
105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "Policy_spt_fp.h"
115679752bf24c21135884e987c4077e2f7184897Vadim BendeburyTPM_RC
125679752bf24c21135884e987c4077e2f7184897Vadim BendeburyTPM2_PolicyPassword(
135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   PolicyPassword_In     *in            // IN: input parameter list
145679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   )
155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury{
165679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   SESSION               *session;
175679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   TPM_CC                 commandCode = TPM_CC_PolicyAuthValue;
185679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   HASH_STATE             hashState;
195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
205679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// Internal Data Update
215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // Get pointer to the session structure
235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   session = SessionGet(in->policySession);
245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // Update policy hash
265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // policyDigestnew = hash(policyDigestold || TPM_CC_PolicyAuthValue)
275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // Start hash
285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   CryptStartHash(session->authHashAlg, &hashState);
295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
305679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // add old digest
315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   CryptUpdateDigest2B(&hashState, &session->u2.policyDigest.b);
325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // add commandCode
345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   CryptUpdateDigestInt(&hashState, sizeof(TPM_CC), &commandCode);
355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // complete the digest
375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   CryptCompleteHash2B(&hashState, &session->u2.policyDigest.b);
385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   // Update isPasswordNeeded bit
405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   session->attributes.isPasswordNeeded = SET;
415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   session->attributes.isAuthValueNeeded = CLEAR;
425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury   return TPM_RC_SUCCESS;
445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury}
45