tpm2-tss  3.2.1
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  ESYS_CRYPTO_CALLBACKS *crypto_cb,
93  TPM2B_PUBLIC *publicInfo,
94  TPM2B_NAME *name);
95 
96 TSS2_RC iesys_compute_encrypted_salt(
97  ESYS_CONTEXT *esysContext,
98  RSRC_NODE_T *tpmKeyNode,
99  TPM2B_ENCRYPTED_SECRET *encryptedSalt);
100 
101 TSS2_RC iesys_gen_caller_nonces(
102  ESYS_CONTEXT *esysContext);
103 
104 TSS2_RC iesys_encrypt_param(
105  ESYS_CONTEXT *esysContext,
106  TPM2B_NONCE **decryptNonce,
107  int *decryptNonceIdx);
108 
109 TSS2_RC iesys_decrypt_param(
110  ESYS_CONTEXT *esysContext);
111 
112 TSS2_RC iesys_check_rp_hmacs(
113  ESYS_CONTEXT *esysContext,
114  TSS2L_SYS_AUTH_RESPONSE *rspAuths,
115  HASH_TAB_ITEM rp_hash_tab[3],
116  uint8_t rpHashNum);
117 
118 void iesys_compute_bound_entity(
119  const TPM2B_NAME *name,
120  const TPM2B_AUTH *auth,
121  TPM2B_NAME *bound_entity);
122 
123 bool iesys_is_object_bound(
124  const TPM2B_NAME * name,
125  const TPM2B_AUTH * auth,
126  RSRC_NODE_T * session);
127 
128 TSS2_RC iesys_check_sequence_async(
129  ESYS_CONTEXT *esysContext);
130 
131 TSS2_RC check_session_feasibility(
132  ESYS_TR shandle1,
133  ESYS_TR shandle2,
134  ESYS_TR shandle3,
135  int mandatory);
136 
137 void iesys_compute_session_value(
138  RSRC_NODE_T *session,
139  const TPM2B_NAME *name,
140  const TPM2B_AUTH *auth_value);
141 
142 TSS2_RC iesys_compute_hmac(
143  ESYS_CONTEXT *esys_context,
144  RSRC_NODE_T *session,
145  HASH_TAB_ITEM cp_hash_tab[3],
146  uint8_t cpHashNum,
147  TPM2B_NONCE *decryptNonce,
148  TPM2B_NONCE *encryptNonce,
149  TPMS_AUTH_COMMAND *auth);
150 
151 TSS2_RC iesys_gen_auths(
152  ESYS_CONTEXT *esysContext,
153  RSRC_NODE_T *h1,
154  RSRC_NODE_T *h2,
155  RSRC_NODE_T *h3,
156  TSS2L_SYS_AUTH_COMMAND *auths);
157 
158 TSS2_RC iesys_check_response(
159  ESYS_CONTEXT * esys_context);
160 
161 TSS2_RC iesys_nv_get_name(
162  ESYS_CRYPTO_CALLBACKS *crypto_cb,
163  TPM2B_NV_PUBLIC *publicInfo,
164  TPM2B_NAME *name);
165 
166 TSS2_RC iesys_get_name(
167  ESYS_CRYPTO_CALLBACKS *crypto_cb,
168  TPM2B_PUBLIC *publicInfo,
169  TPM2B_NAME *name);
170 
171 bool iesys_tpm_error(
172  TSS2_RC r);
173 
174 TSS2_RC iesys_hash_long_auth_values(
175  ESYS_CRYPTO_CALLBACKS *crypto_cb,
176  TPM2B_AUTH *auth_value,
177  TPMI_ALG_HASH hash_alg);
178 
179 #ifdef __cplusplus
180 } /* extern "C" */
181 #endif
182 
183 #endif /* ESYS_IUTIL_H */
uint32_t ESYS_TR
Definition: tss2_esys.h:16
Definition: esys_int.h:161
Definition: esys_int.h:22
size_t size
Definition: esys_iutil.h:37
TPM2_ALG_ID alg
Definition: esys_iutil.h:36
Definition: esys_iutil.h:35
Definition: tss2_esys.h:408