blob: 19ee8452614f9cc75ae619c9fd4708246f1efc49 [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 "SequenceUpdate_fp.h"
10//
11//
12// Error Returns Meaning
13//
14// TPM_RC_MODE sequenceHandle does not reference a hash or HMAC sequence
15// object
16//
17TPM_RC
18TPM2_SequenceUpdate(
19 SequenceUpdate_In *in // IN: input parameter list
20 )
21{
22 OBJECT *object;
23
24// Input Validation
25
26 // Get sequence object pointer
27 object = ObjectGet(in->sequenceHandle);
28
29 // Check that referenced object is a sequence object.
30 if(!ObjectIsSequence(object))
31 return TPM_RC_MODE + RC_SequenceUpdate_sequenceHandle;
32
33// Internal Data Update
34
35 if(object->attributes.eventSeq == SET)
36 {
37 // Update event sequence object
38 UINT32 i;
39 HASH_OBJECT *hashObject = (HASH_OBJECT *)object;
40 for(i = 0; i < HASH_COUNT; i++)
41 {
42 // Update sequence object
43 CryptUpdateDigest2B(&hashObject->state.hashState[i], &in->buffer.b);
44 }
45 }
46 else
47 {
48 HASH_OBJECT *hashObject = (HASH_OBJECT *)object;
49
50 // Update hash/HMAC sequence object
51 if(hashObject->attributes.hashSeq == SET)
52 {
53 // Is this the first block of the sequence
54 if(hashObject->attributes.firstBlock == CLEAR)
55 {
56 // If so, indicate that first block was received
57 hashObject->attributes.firstBlock = SET;
58
59 // Check the first block to see if the first block can contain
60 // the TPM_GENERATED_VALUE. If it does, it is not safe for
61 // a ticket.
62 if(TicketIsSafe(&in->buffer.b))
63 hashObject->attributes.ticketSafe = SET;
64 }
65 // Update sequence object hash/HMAC stack
66 CryptUpdateDigest2B(&hashObject->state.hashState[0], &in->buffer.b);
67
68 }
69 else if(object->attributes.hmacSeq == SET)
70 {
71 HASH_OBJECT *hashObject = (HASH_OBJECT *)object;
72
73 // Update sequence object hash/HMAC stack
74 CryptUpdateDigest2B(&hashObject->state.hmacState, &in->buffer.b);
75 }
76 }
77
78 return TPM_RC_SUCCESS;
79}