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_crypto.h"
11 #include "esys_types.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
22 typedef struct RSRC_NODE_T {
25  TPM2B_AUTH auth;
27  struct RSRC_NODE_T * next;
29 
30 typedef struct {
31  ESYS_TR tpmKey;
32  ESYS_TR bind;
33  TPM2_SE sessionType;
34  TPMI_ALG_HASH authHash;
35  TPM2B_NONCE *nonceCaller;
36  TPM2B_NONCE nonceCallerData;
37  TPMT_SYM_DEF *symmetric;
38  TPMT_SYM_DEF symmetricData;
39 } StartAuthSession_IN;
40 
41 typedef struct {
42  TPM2B_SENSITIVE_CREATE *inSensitive;
43  TPM2B_SENSITIVE_CREATE inSensitiveData;
44 } CreatePrimary_IN;
45 
46 typedef struct {
47  TPM2B_SENSITIVE_CREATE *inSensitive;
48  TPM2B_SENSITIVE_CREATE inSensitiveData;
49 } Create_IN;
50 
51 typedef struct {
52  ESYS_TR saveHandle;
53 } ContextSave_IN;
54 
55 typedef struct {
56  TPMS_CONTEXT *context;
57  TPMS_CONTEXT contextData;
58 } ContextLoad_IN;
59 
60 typedef struct {
61  TPM2B_PUBLIC *inPublic;
62  TPM2B_PUBLIC inPublicData;
63 } Load_IN;
64 
65 typedef struct {
66  TPM2B_PUBLIC *inPublic;
67  TPM2B_PUBLIC inPublicData;
68 } LoadExternal_IN;
69 
70 typedef struct {
71  TPM2B_SENSITIVE_CREATE *inSensitive;
72  TPM2B_SENSITIVE_CREATE inSensitiveData;
73  TPM2B_TEMPLATE *inPublic;
74  TPM2B_TEMPLATE inPublicData;
75 } CreateLoaded_IN;
76 
77 typedef struct {
78  ESYS_TR objectHandle;
79  TPMI_DH_PERSISTENT persistentHandle;
80 } EvictControl_IN;
81 
82 typedef struct {
83  TPM2B_AUTH authData;
84 } HMAC_Start_IN;
85 
86 typedef HMAC_Start_IN MAC_Start_IN;
87 
88 typedef struct {
89  ESYS_TR authHandle;
90  TPM2B_AUTH newAuth;
91 } HierarchyChangeAuth_IN;
92 
93 typedef struct {
94  ESYS_TR sequenceHandle;
95 } SequenceComplete_IN;
96 
97 typedef struct {
98  ESYS_TR policySession;
99 } Policy_IN;
100 
101 typedef struct {
102  ESYS_TR nvIndex;
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  MAC_Start_IN MAC_Start;
134  HierarchyChangeAuth_IN HierarchyChangeAuth;
135  SequenceComplete_IN SequenceComplete;
136  Policy_IN Policy;
137  NV_IN NV;
138  FlushContext_IN FlushContext;
139  PCR_IN PCR;
140 } IESYS_CMD_IN_PARAM;
141 
143 enum _ESYS_STATE {
144  _ESYS_STATE_INIT = 0,
147  _ESYS_STATE_SENT,
149  _ESYS_STATE_RESUBMISSION,
151  _ESYS_STATE_INTERNALERROR
153 };
154 
161 struct ESYS_CONTEXT {
162  enum _ESYS_STATE state;
163  TSS2_SYS_CONTEXT *sys;
167  int32_t timeout;
174  TPM2B_NONCE *encryptNonce;
180  TPM2B_DATA salt;
181  IESYS_CMD_IN_PARAM in;
185  TSS2_TCTI_CONTEXT *tcti_app_param;
188  void *dlhandle;
195  ESYS_TR sav_session2;
196  ESYS_TR sav_session3;
197 
200 };
201 
207 #define _ESYS_MAX_SUBMISSIONS 5
208 
211 #define _ESYS_ASSERT_NON_NULL(x) \
212  if (x == NULL) { \
213  LOG_ERROR(str(x) " == NULL."); \
214  return TSS2_ESYS_RC_BAD_REFERENCE; \
215  }
216 
217 #ifdef __cplusplus
218 }
219 #endif
220 #endif /* ESYS_INT_H */
uint32_t ESYS_TR
Definition: tss2_esys.h:16
IESYS_SESSION * enc_session
Definition: esys_int.h:190
int32_t timeout
Definition: esys_int.h:167
int encryptNonceIdx
Definition: esys_int.h:173
IESYS_CMD_IN_PARAM in
Definition: esys_int.h:181
TSS2_TCTI_CONTEXT * tcti_app_param
Definition: esys_int.h:185
IESYS_RESOURCE rsrc
Definition: esys_int.h:26
enum _ESYS_STATE state
Definition: esys_int.h:162
void * dlhandle
Definition: esys_int.h:188
TSS2_SYS_CONTEXT * sys
Definition: esys_int.h:163
RSRC_NODE_T * session_tab[3]
Definition: esys_int.h:171
struct RSRC_NODE_T * next
Definition: esys_int.h:27
ESYS_TR esys_handle
Definition: esys_int.h:23
ESYS_TR esys_handle_cnt
Definition: esys_int.h:165
TPM2B_AUTH auth
Definition: esys_int.h:25
ESYS_TR session_type[3]
Definition: esys_int.h:169
RSRC_NODE_T * rsrc_list
Definition: esys_int.h:166
ESYS_CRYPTO_CALLBACKS crypto_backend
Definition: esys_int.h:198
TPM2B_NONCE * encryptNonce
Definition: esys_int.h:174
ESYS_TR sav_session1
Definition: esys_int.h:192
int submissionCount
Definition: esys_int.h:178
int authsCount
Definition: esys_int.h:176
TPM2B_DATA salt
Definition: esys_int.h:180
struct RSRC_NODE_T RSRC_NODE_T
Definition: esys_int.h:161
Definition: esys_types.h:86
Definition: esys_types.h:51
Definition: esys_int.h:22
Definition: tss2_esys.h:408