tpm2-tss  3.2.0
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;
27 } RSRC_NODE_T;
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 
117 typedef union {
118  StartAuthSession_IN StartAuthSession;
119  CreatePrimary_IN CreatePrimary;
120  Create_IN Create;
121  ContextSave_IN ContextSave;
122  ContextLoad_IN ContextLoad;
123  Load_IN Load;
124  LoadExternal_IN LoadExternal;
125  CreateLoaded_IN CreateLoaded;
126  EvictControl_IN EvictControl;
127  HMAC_Start_IN HMAC_Start;
128  HierarchyChangeAuth_IN HierarchyChangeAuth;
129  SequenceComplete_IN SequenceComplete;
130  Policy_IN Policy;
131  NV_IN NV;
132  FlushContext_IN FlushContext;
133 } IESYS_CMD_IN_PARAM;
134 
137  _ESYS_STATE_INIT = 0,
140  _ESYS_STATE_SENT,
142  _ESYS_STATE_RESUBMISSION,
144  _ESYS_STATE_INTERNALERROR
146 };
147 
154 struct ESYS_CONTEXT {
155  enum _ESYS_STATE state;
156  TSS2_SYS_CONTEXT *sys;
160  int32_t timeout;
162  ESYS_TR session_type[3];
164  RSRC_NODE_T *session_tab[3];
167  TPM2B_NONCE *encryptNonce;
173  TPM2B_DATA salt;
174  IESYS_CMD_IN_PARAM in;
178  TSS2_TCTI_CONTEXT *tcti_app_param;
181  void *dlhandle;
185 };
186 
192 #define _ESYS_MAX_SUBMISSIONS 5
193 
196 #define _ESYS_ASSERT_NON_NULL(x) \
197  if (x == NULL) { \
198  LOG_ERROR(str(x) " == NULL."); \
199  return TSS2_ESYS_RC_BAD_REFERENCE; \
200  }
201 
202 #ifdef __cplusplus
203 }
204 #endif
205 #endif /* ESYS_INT_H */
TPM2B_NONCE * encryptNonce
Definition: esys_int.h:167
int submissionCount
Definition: esys_int.h:171
int authsCount
Definition: esys_int.h:169
_ESYS_STATE
Definition: esys_int.h:136
Definition: esys_types.h:86
Definition: esys_int.h:154
int32_t timeout
Definition: esys_int.h:160
RSRC_NODE_T * rsrc_list
Definition: esys_int.h:159
IESYS_CMD_IN_PARAM in
Definition: esys_int.h:174
uint32_t ESYS_TR
Definition: tss2_esys.h:16
ESYS_TR esys_handle_cnt
Definition: esys_int.h:158
IESYS_RESOURCE rsrc
Definition: esys_int.h:25
int encryptNonceIdx
Definition: esys_int.h:166
struct RSRC_NODE_T RSRC_NODE_T
struct RSRC_NODE_T * next
Definition: esys_int.h:26
TPM2B_DATA salt
Definition: esys_int.h:173
Definition: esys_types.h:51
IESYS_SESSION * enc_session
Definition: esys_int.h:183
TPM2B_AUTH auth
Definition: esys_int.h:24
TSS2_SYS_CONTEXT * sys
Definition: esys_int.h:156
Definition: esys_int.h:21
TSS2_TCTI_CONTEXT * tcti_app_param
Definition: esys_int.h:178
ESYS_TR esys_handle
Definition: esys_int.h:22
void * dlhandle
Definition: esys_int.h:181