blob: 420047e512d546025f05967161b985cdacdc34f7 [file] [log] [blame]
Vadim Bendebury56797522015-05-20 10:32:25 -07001// This file was extracted from the TCG Published
2// Trusted Platform Module Library
3// Part 3: Commands
4// Family "2.0"
5// Level 00 Revision 01.16
6// October 30, 2014
7
8#include "InternalRoutines.h"
9#include "PolicyOR_fp.h"
10#include "Policy_spt_fp.h"
11//
12//
13// Error Returns Meaning
14//
15// TPM_RC_VALUE no digest in pHashList matched the current value of policyDigest for
16// policySession
17//
18TPM_RC
19TPM2_PolicyOR(
20 PolicyOR_In *in // IN: input parameter list
21 )
22{
23 SESSION *session;
24 UINT32 i;
25
26// Input Validation and Update
27
28 // Get pointer to the session structure
29 session = SessionGet(in->policySession);
30
31 // Compare and Update Internal Session policy if match
32 for(i = 0; i < in->pHashList.count; i++)
33 {
34 if( session->attributes.isTrialPolicy == SET
35 || (Memory2BEqual(&session->u2.policyDigest.b,
36 &in->pHashList.digests[i].b))
37 )
38 {
39 // Found a match
40 HASH_STATE hashState;
41 TPM_CC commandCode = TPM_CC_PolicyOR;
42
43 // Start hash
44 session->u2.policyDigest.t.size = CryptStartHash(session->authHashAlg,
45 &hashState);
46 // Set policyDigest to 0 string and add it to hash
47 MemorySet(session->u2.policyDigest.t.buffer, 0,
48 session->u2.policyDigest.t.size);
49 CryptUpdateDigest2B(&hashState, &session->u2.policyDigest.b);
50
51 // add command code
52 CryptUpdateDigestInt(&hashState, sizeof(TPM_CC), &commandCode);
53
54 // Add each of the hashes in the list
55 for(i = 0; i < in->pHashList.count; i++)
56 {
57 // Extend policyDigest
58 CryptUpdateDigest2B(&hashState, &in->pHashList.digests[i].b);
59 }
60 // Complete digest
61 CryptCompleteHash2B(&hashState, &session->u2.policyDigest.b);
62
63 return TPM_RC_SUCCESS;
64 }
65 }
66 // None of the values in the list matched the current policyDigest
67 return TPM_RC_VALUE + RC_PolicyOR_pHashList;
68}