tpm2-tss  3.2.1
TPM Software stack 2.0 TCG spec compliant implementation
esys_int.h
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*******************************************************************************
3  * Copyright 2017, Fraunhofer SIT sponsored by Infineon Technologies AG
4  * All rights reserved.
5  *******************************************************************************/
6 #ifndef ESYS_INT_H
7 #define ESYS_INT_H
8 
9 #include <stdint.h>
10 #include "esys_types.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
21 typedef struct RSRC_NODE_T {
24  TPM2B_AUTH auth;
26  struct RSRC_NODE_T * next;
28 
29 typedef struct {
30  ESYS_TR tpmKey;
31  ESYS_TR bind;
32  TPM2_SE sessionType;
33  TPMI_ALG_HASH authHash;
34  TPM2B_NONCE *nonceCaller;
35  TPM2B_NONCE nonceCallerData;
36  TPMT_SYM_DEF *symmetric;
37  TPMT_SYM_DEF symmetricData;
38 } StartAuthSession_IN;
39 
40 typedef struct {
41  TPM2B_SENSITIVE_CREATE *inSensitive;
42  TPM2B_SENSITIVE_CREATE inSensitiveData;
43 } CreatePrimary_IN;
44 
45 typedef struct {
46  TPM2B_SENSITIVE_CREATE *inSensitive;
47  TPM2B_SENSITIVE_CREATE inSensitiveData;
48 } Create_IN;
49 
50 typedef struct {
51  ESYS_TR saveHandle;
52 } ContextSave_IN;
53 
54 typedef struct {
55  TPMS_CONTEXT *context;
56  TPMS_CONTEXT contextData;
57 } ContextLoad_IN;
58 
59 typedef struct {
60  TPM2B_PUBLIC *inPublic;
61  TPM2B_PUBLIC inPublicData;
62 } Load_IN;
63 
64 typedef struct {
65  TPM2B_PUBLIC *inPublic;
66  TPM2B_PUBLIC inPublicData;
67 } LoadExternal_IN;
68 
69 typedef struct {
70  TPM2B_SENSITIVE_CREATE *inSensitive;
71  TPM2B_SENSITIVE_CREATE inSensitiveData;
72  TPM2B_TEMPLATE *inPublic;
73  TPM2B_TEMPLATE inPublicData;
74 } CreateLoaded_IN;
75 
76 typedef struct {
77  ESYS_TR objectHandle;
78  TPMI_DH_PERSISTENT persistentHandle;
79 } EvictControl_IN;
80 
81 typedef struct {
82  TPM2B_AUTH *auth;
83  TPM2B_AUTH authData;
84 } HMAC_Start_IN;
85 
86 typedef struct {
87  ESYS_TR authHandle;
88  TPM2B_AUTH *newAuth;
89  TPM2B_AUTH newAuthData;
90 } HierarchyChangeAuth_IN;
91 
92 typedef struct {
93  ESYS_TR sequenceHandle;
94 } SequenceComplete_IN;
95 
96 typedef struct {
97  ESYS_TR policySession;
98 } Policy_IN;
99 
100 typedef struct {
101  ESYS_TR nvIndex;
102  TPM2B_AUTH *auth;
103  TPM2B_AUTH authData;
104  TPM2B_NV_PUBLIC *publicInfo;
105  TPM2B_NV_PUBLIC publicInfoData;
106 } NV_IN;
107 
108 typedef struct {
109  ESYS_TR flushHandle;
110 } FlushContext_IN;
111 
112 typedef struct {
113  ESYS_TR pcrHandle;
114  TPM2B_AUTH authData;
115 } PCR_IN;
116 
122 typedef union {
123  StartAuthSession_IN StartAuthSession;
124  CreatePrimary_IN CreatePrimary;
125  Create_IN Create;
126  ContextSave_IN ContextSave;
127  ContextLoad_IN ContextLoad;
128  Load_IN Load;
129  LoadExternal_IN LoadExternal;
130  CreateLoaded_IN CreateLoaded;
131  EvictControl_IN EvictControl;
132  HMAC_Start_IN HMAC_Start;
133  HierarchyChangeAuth_IN HierarchyChangeAuth;
134  SequenceComplete_IN SequenceComplete;
135  Policy_IN Policy;
136  NV_IN NV;
137  FlushContext_IN FlushContext;
138  PCR_IN PCR;
139 } IESYS_CMD_IN_PARAM;
140 
142 enum _ESYS_STATE {
143  _ESYS_STATE_INIT = 0,
146  _ESYS_STATE_SENT,
148  _ESYS_STATE_RESUBMISSION,
150  _ESYS_STATE_INTERNALERROR
152 };
153 
160 struct ESYS_CONTEXT {
161  enum _ESYS_STATE state;
162  TSS2_SYS_CONTEXT *sys;
166  int32_t timeout;
173  TPM2B_NONCE *encryptNonce;
179  TPM2B_DATA salt;
180  IESYS_CMD_IN_PARAM in;
184  TSS2_TCTI_CONTEXT *tcti_app_param;
187  void *dlhandle;
194  ESYS_TR sav_session2;
195  ESYS_TR sav_session3;
196 };
197 
203 #define _ESYS_MAX_SUBMISSIONS 5
204 
207 #define _ESYS_ASSERT_NON_NULL(x) \
208  if (x == NULL) { \
209  LOG_ERROR(str(x) " == NULL."); \
210  return TSS2_ESYS_RC_BAD_REFERENCE; \
211  }
212 
213 #ifdef __cplusplus
214 }
215 #endif
216 #endif /* ESYS_INT_H */
uint32_t ESYS_TR
Definition: tss2_esys.h:16
IESYS_SESSION * enc_session
Definition: esys_int.h:189
int32_t timeout
Definition: esys_int.h:166
int encryptNonceIdx
Definition: esys_int.h:172
IESYS_CMD_IN_PARAM in
Definition: esys_int.h:180
TSS2_TCTI_CONTEXT * tcti_app_param
Definition: esys_int.h:184
IESYS_RESOURCE rsrc
Definition: esys_int.h:25
enum _ESYS_STATE state
Definition: esys_int.h:161
void * dlhandle
Definition: esys_int.h:187
TSS2_SYS_CONTEXT * sys
Definition: esys_int.h:162
RSRC_NODE_T * session_tab[3]
Definition: esys_int.h:170
struct RSRC_NODE_T * next
Definition: esys_int.h:26
ESYS_TR esys_handle
Definition: esys_int.h:22
ESYS_TR esys_handle_cnt
Definition: esys_int.h:164
TPM2B_AUTH auth
Definition: esys_int.h:24
ESYS_TR session_type[3]
Definition: esys_int.h:168
RSRC_NODE_T * rsrc_list
Definition: esys_int.h:165
TPM2B_NONCE * encryptNonce
Definition: esys_int.h:173
ESYS_TR sav_session1
Definition: esys_int.h:191
int submissionCount
Definition: esys_int.h:177
int authsCount
Definition: esys_int.h:175
TPM2B_DATA salt
Definition: esys_int.h:179
struct RSRC_NODE_T RSRC_NODE_T
Definition: esys_int.h:160
Definition: esys_types.h:86
Definition: esys_types.h:51
Definition: esys_int.h:21