tpm2-tss  3.2.0
TPM Software stack 2.0 TCG spec compliant implementation
esys_iutil.h
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*******************************************************************************
3  * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4  * All rights reserved.
5  ******************************************************************************/
6 #ifndef ESYS_IUTIL_H
7 #define ESYS_IUTIL_H
8 
9 #include <stdbool.h>
10 #include <inttypes.h>
11 #include <string.h>
12 #include "tss2_esys.h"
13 
14 #include "esys_int.h"
15 #include "esys_crypto.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /*
22  * Start issuing ESYS_TR objects past the TPM2_RH_LAST namespace
23  * and give ourselves 0x1000 handle space in case of differing
24  * header files between the library build and the client build.
25  *
26  * Due to an API mistake, TPM2_RH constants are valid for a few
27  * select ESYS API calls.
28  *
29  * More details can be found here:
30  * - https://github.com/tpm2-software/tpm2-tss/issues/1750
31  */
32 #define ESYS_TR_MIN_OBJECT (TPM2_RH_LAST + 1 + 0x1000)
33 
35 typedef struct {
36  TPM2_ALG_ID alg;
37  size_t size;
38  uint8_t digest[sizeof(TPMU_HA)];
40 
41 TSS2_RC init_session_tab(
42  ESYS_CONTEXT *esysContext,
43  ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
44 
45 void iesys_DeleteAllResourceObjects(
46  ESYS_CONTEXT *esys_context);
47 
48 TSS2_RC iesys_compute_encrypt_nonce(
49  ESYS_CONTEXT *esysContext,
50  int *encryptNonceIdx,
51  TPM2B_NONCE **encryptNonce);
52 
53 TSS2_RC iesys_compute_cp_hashtab(
54  ESYS_CONTEXT *esysContext,
55  const TPM2B_NAME *name1,
56  const TPM2B_NAME *name2,
57  const TPM2B_NAME *name3,
58  HASH_TAB_ITEM cp_hash_tab[3],
59  uint8_t *cpHashNum);
60 
61 TSS2_RC iesys_compute_rp_hashtab(
62  ESYS_CONTEXT *esysContext,
63  const uint8_t *rpBuffer,
64  size_t rpBuffer_size,
65  HASH_TAB_ITEM rp_hash_tab[3],
66  uint8_t *rpHashNum);
67 
68 TSS2_RC esys_CreateResourceObject(
69  ESYS_CONTEXT *esys_context,
70  ESYS_TR esys_handle,
71  RSRC_NODE_T **node);
72 
73 TSS2_RC iesys_handle_to_tpm_handle(
74  ESYS_TR esys_handle,
75  TPM2_HANDLE *tpm_handle);
76 
77 bool
78 iesys_is_platform_handle(
79  ESYS_TR handle);
80 
81 TSS2_RC esys_GetResourceObject(
82  ESYS_CONTEXT *esys_context,
83  ESYS_TR rsrc_handle,
84  RSRC_NODE_T **node);
85 
86 TPM2_HT iesys_get_handle_type(
87  TPM2_HANDLE handle);
88 
89 TSS2_RC iesys_finalize(ESYS_CONTEXT *context);
90 
91 bool iesys_compare_name(
92  TPM2B_PUBLIC *publicInfo,
93  TPM2B_NAME *name);
94 
95 TSS2_RC iesys_compute_encrypted_salt(
96  ESYS_CONTEXT *esysContext,
97  RSRC_NODE_T *tpmKeyNode,
98  TPM2B_ENCRYPTED_SECRET *encryptedSalt);
99 
100 TSS2_RC iesys_gen_caller_nonces(
101  ESYS_CONTEXT *esysContext);
102 
103 TSS2_RC iesys_encrypt_param(
104  ESYS_CONTEXT *esysContext,
105  TPM2B_NONCE **decryptNonce,
106  int *decryptNonceIdx);
107 
108 TSS2_RC iesys_decrypt_param(
109  ESYS_CONTEXT *esysContext);
110 
111 TSS2_RC iesys_check_rp_hmacs(
112  ESYS_CONTEXT *esysContext,
113  TSS2L_SYS_AUTH_RESPONSE *rspAuths,
114  HASH_TAB_ITEM rp_hash_tab[3],
115  uint8_t rpHashNum);
116 
117 void iesys_compute_bound_entity(
118  const TPM2B_NAME *name,
119  const TPM2B_AUTH *auth,
120  TPM2B_NAME *bound_entity);
121 
122 bool iesys_is_object_bound(
123  const TPM2B_NAME * name,
124  const TPM2B_AUTH * auth,
125  RSRC_NODE_T * session);
126 
127 TSS2_RC iesys_check_sequence_async(
128  ESYS_CONTEXT *esysContext);
129 
130 TSS2_RC check_session_feasibility(
131  ESYS_TR shandle1,
132  ESYS_TR shandle2,
133  ESYS_TR shandle3,
134  int mandatory);
135 
136 void iesys_compute_session_value(
137  RSRC_NODE_T *session,
138  const TPM2B_NAME *name,
139  const TPM2B_AUTH *auth_value);
140 
141 TSS2_RC iesys_compute_hmac(
142  RSRC_NODE_T *session,
143  HASH_TAB_ITEM cp_hash_tab[3],
144  uint8_t cpHashNum,
145  TPM2B_NONCE *decryptNonce,
146  TPM2B_NONCE *encryptNonce,
147  TPMS_AUTH_COMMAND *auth);
148 
149 TSS2_RC iesys_gen_auths(
150  ESYS_CONTEXT *esysContext,
151  RSRC_NODE_T *h1,
152  RSRC_NODE_T *h2,
153  RSRC_NODE_T *h3,
154  TSS2L_SYS_AUTH_COMMAND *auths);
155 
156 TSS2_RC iesys_check_response(
157  ESYS_CONTEXT * esys_context);
158 
159 TSS2_RC iesys_nv_get_name(
160  TPM2B_NV_PUBLIC *publicInfo,
161  TPM2B_NAME *name);
162 
163 TSS2_RC iesys_get_name(
164  TPM2B_PUBLIC *publicInfo,
165  TPM2B_NAME *name);
166 
167 bool iesys_tpm_error(
168  TSS2_RC r);
169 
170 TSS2_RC iesys_hash_long_auth_values(
171  TPM2B_AUTH *auth_value,
172  TPMI_ALG_HASH hash_alg);
173 
174 #ifdef __cplusplus
175 } /* extern "C" */
176 #endif
177 
178 #endif /* ESYS_IUTIL_H */
size_t size
Definition: esys_iutil.h:37
Definition: esys_int.h:154
uint32_t ESYS_TR
Definition: tss2_esys.h:16
TPM2_ALG_ID alg
Definition: esys_iutil.h:36
Definition: esys_int.h:21
Definition: esys_iutil.h:35