• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 /** An entry in a cpHash or rpHash table. */
22 typedef struct {
23     TPM2_ALG_ID alg;                 /**< The hash algorithm. */
24     size_t size;                     /**< The digest size. */
25     uint8_t digest[sizeof(TPMU_HA)]; /**< The digest. */
26 } HASH_TAB_ITEM;
27 
28 TSS2_RC init_session_tab(
29     ESYS_CONTEXT *esysContext,
30     ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
31 
32 void iesys_DeleteAllResourceObjects(
33     ESYS_CONTEXT *esys_context);
34 
35 TSS2_RC iesys_compute_encrypt_nonce(
36     ESYS_CONTEXT *esysContext,
37     int *encryptNonceIdx,
38     TPM2B_NONCE **encryptNonce);
39 
40 TSS2_RC iesys_compute_cp_hashtab(
41     ESYS_CONTEXT *esysContext,
42     const TPM2B_NAME *name1,
43     const TPM2B_NAME *name2,
44     const TPM2B_NAME *name3,
45     HASH_TAB_ITEM cp_hash_tab[3],
46     uint8_t *cpHashNum);
47 
48 TSS2_RC iesys_compute_rp_hashtab(
49     ESYS_CONTEXT *esysContext,
50     const uint8_t *rpBuffer,
51     size_t rpBuffer_size,
52     HASH_TAB_ITEM rp_hash_tab[3],
53     uint8_t *rpHashNum);
54 
55 TSS2_RC esys_CreateResourceObject(
56     ESYS_CONTEXT *esys_context,
57     ESYS_TR esys_handle,
58     RSRC_NODE_T **node);
59 
60 TSS2_RC iesys_handle_to_tpm_handle(
61     ESYS_TR esys_handle,
62     TPM2_HANDLE *tpm_handle);
63 
64 TSS2_RC esys_GetResourceObject(
65     ESYS_CONTEXT *esys_context,
66     ESYS_TR rsrc_handle,
67     RSRC_NODE_T **node);
68 
69 TPM2_HT iesys_get_handle_type(
70     TPM2_HANDLE handle);
71 
72 TSS2_RC iesys_finalize(ESYS_CONTEXT *context);
73 
74 bool iesys_compare_name(
75     TPM2B_PUBLIC *publicInfo,
76     TPM2B_NAME *name);
77 
78 TSS2_RC iesys_compute_encrypted_salt(
79     ESYS_CONTEXT *esysContext,
80     RSRC_NODE_T *tpmKeyNode,
81     TPM2B_ENCRYPTED_SECRET *encryptedSalt);
82 
83 TSS2_RC iesys_gen_caller_nonces(
84     ESYS_CONTEXT *esysContext);
85 
86 TSS2_RC iesys_encrypt_param(
87     ESYS_CONTEXT *esysContext,
88     TPM2B_NONCE **decryptNonce,
89     int *decryptNonceIdx);
90 
91 TSS2_RC iesys_decrypt_param(
92     ESYS_CONTEXT *esysContext);
93 
94 TSS2_RC iesys_check_rp_hmacs(
95     ESYS_CONTEXT *esysContext,
96     TSS2L_SYS_AUTH_RESPONSE *rspAuths,
97     HASH_TAB_ITEM rp_hash_tab[3],
98     uint8_t rpHashNum);
99 
100 void iesys_compute_bound_entity(
101     const TPM2B_NAME *name,
102     const TPM2B_AUTH *auth,
103     TPM2B_NAME *bound_entity);
104 
105 bool iesys_is_object_bound(
106     const TPM2B_NAME * name,
107     const TPM2B_AUTH * auth,
108     RSRC_NODE_T * session);
109 
110 TSS2_RC iesys_check_sequence_async(
111     ESYS_CONTEXT *esysContext);
112 
113 TSS2_RC check_session_feasibility(
114     ESYS_TR shandle1,
115     ESYS_TR shandle2,
116     ESYS_TR shandle3,
117     int mandatory);
118 
119 void iesys_compute_session_value(
120     RSRC_NODE_T *session,
121     const TPM2B_NAME *name,
122     const TPM2B_AUTH *auth_value);
123 
124 TSS2_RC iesys_compute_hmac(
125     RSRC_NODE_T *session,
126     HASH_TAB_ITEM cp_hash_tab[3],
127     uint8_t cpHashNum,
128     TPM2B_NONCE *decryptNonce,
129     TPM2B_NONCE *encryptNonce,
130     TPMS_AUTH_COMMAND *auth);
131 
132 TSS2_RC iesys_gen_auths(
133     ESYS_CONTEXT *esysContext,
134     RSRC_NODE_T *h1,
135     RSRC_NODE_T *h2,
136     RSRC_NODE_T *h3,
137     TSS2L_SYS_AUTH_COMMAND *auths);
138 
139 TSS2_RC iesys_check_response(
140     ESYS_CONTEXT * esys_context);
141 
142 TSS2_RC iesys_nv_get_name(
143     TPM2B_NV_PUBLIC *publicInfo,
144     TPM2B_NAME *name);
145 
146 TSS2_RC iesys_get_name(
147     TPM2B_PUBLIC *publicInfo,
148     TPM2B_NAME *name);
149 
150 bool iesys_tpm_error(
151     TSS2_RC r);
152 
153 #ifdef __cplusplus
154 } /* extern "C" */
155 #endif
156 
157 #endif /* ESYS_IUTIL_H */
158