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
18extern "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
35typedef struct {
36 TPM2_ALG_ID alg;
37 size_t size;
38 uint8_t digest[sizeof(TPMU_HA)];
40
41TSS2_RC init_session_tab(
42 ESYS_CONTEXT *esysContext,
43 ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
44
45void iesys_DeleteAllResourceObjects(
46 ESYS_CONTEXT *esys_context);
47
48TSS2_RC iesys_compute_encrypt_nonce(
49 ESYS_CONTEXT *esysContext,
50 int *encryptNonceIdx,
51 TPM2B_NONCE **encryptNonce);
52
53TSS2_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
61TSS2_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
68TSS2_RC esys_CreateResourceObject(
69 ESYS_CONTEXT *esys_context,
70 ESYS_TR esys_handle,
71 RSRC_NODE_T **node);
72
73TSS2_RC iesys_handle_to_tpm_handle(
74 ESYS_TR esys_handle,
75 TPM2_HANDLE *tpm_handle);
76
77bool
78iesys_is_platform_handle(
79 ESYS_TR handle);
80
81TSS2_RC esys_GetResourceObject(
82 ESYS_CONTEXT *esys_context,
83 ESYS_TR rsrc_handle,
84 RSRC_NODE_T **node);
85
86TPM2_HT iesys_get_handle_type(
87 TPM2_HANDLE handle);
88
89TSS2_RC iesys_finalize(ESYS_CONTEXT *context);
90
91bool iesys_compare_name(
92 TPM2B_PUBLIC *publicInfo,
93 TPM2B_NAME *name);
94
95TSS2_RC iesys_compute_encrypted_salt(
96 ESYS_CONTEXT *esysContext,
97 RSRC_NODE_T *tpmKeyNode,
98 TPM2B_ENCRYPTED_SECRET *encryptedSalt);
99
100TSS2_RC iesys_gen_caller_nonces(
101 ESYS_CONTEXT *esysContext);
102
103TSS2_RC iesys_encrypt_param(
104 ESYS_CONTEXT *esysContext,
105 TPM2B_NONCE **decryptNonce,
106 int *decryptNonceIdx);
107
108TSS2_RC iesys_decrypt_param(
109 ESYS_CONTEXT *esysContext);
110
111TSS2_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
117void iesys_compute_bound_entity(
118 const TPM2B_NAME *name,
119 const TPM2B_AUTH *auth,
120 TPM2B_NAME *bound_entity);
121
122bool iesys_is_object_bound(
123 const TPM2B_NAME * name,
124 const TPM2B_AUTH * auth,
125 RSRC_NODE_T * session);
126
127TSS2_RC iesys_check_sequence_async(
128 ESYS_CONTEXT *esysContext);
129
130TSS2_RC check_session_feasibility(
131 ESYS_TR shandle1,
132 ESYS_TR shandle2,
133 ESYS_TR shandle3,
134 int mandatory);
135
136void iesys_compute_session_value(
137 RSRC_NODE_T *session,
138 const TPM2B_NAME *name,
139 const TPM2B_AUTH *auth_value);
140
141TSS2_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
149TSS2_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
156TSS2_RC iesys_check_response(
157 ESYS_CONTEXT * esys_context);
158
159TSS2_RC iesys_nv_get_name(
160 TPM2B_NV_PUBLIC *publicInfo,
161 TPM2B_NAME *name);
162
163TSS2_RC iesys_get_name(
164 TPM2B_PUBLIC *publicInfo,
165 TPM2B_NAME *name);
166
167bool iesys_tpm_error(
168 TSS2_RC r);
169
170TSS2_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 */
uint32_t ESYS_TR
Definition: tss2_esys.h:16
Definition: esys_int.h:160
Definition: esys_int.h:21
size_t size
Definition: esys_iutil.h:37
TPM2_ALG_ID alg
Definition: esys_iutil.h:36
Definition: esys_iutil.h:35