tpm2-tss 4.0.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 ESYS_CRYPTO_CALLBACKS *crypto_cb,
93 TPM2B_PUBLIC *publicInfo,
94 TPM2B_NAME *name);
95
96TSS2_RC iesys_compute_encrypted_salt(
97 ESYS_CONTEXT *esysContext,
98 RSRC_NODE_T *tpmKeyNode,
99 TPM2B_ENCRYPTED_SECRET *encryptedSalt);
100
101TSS2_RC iesys_gen_caller_nonces(
102 ESYS_CONTEXT *esysContext);
103
104TSS2_RC iesys_encrypt_param(
105 ESYS_CONTEXT *esysContext,
106 TPM2B_NONCE **decryptNonce,
107 int *decryptNonceIdx);
108
109TSS2_RC iesys_decrypt_param(
110 ESYS_CONTEXT *esysContext);
111
112TSS2_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
118void iesys_compute_bound_entity(
119 const TPM2B_NAME *name,
120 const TPM2B_AUTH *auth,
121 TPM2B_NAME *bound_entity);
122
123bool iesys_is_object_bound(
124 const TPM2B_NAME * name,
125 const TPM2B_AUTH * auth,
126 RSRC_NODE_T * session);
127
128TSS2_RC iesys_check_sequence_async(
129 ESYS_CONTEXT *esysContext);
130
131TSS2_RC check_session_feasibility(
132 ESYS_TR shandle1,
133 ESYS_TR shandle2,
134 ESYS_TR shandle3,
135 int mandatory);
136
137void iesys_compute_session_value(
138 RSRC_NODE_T *session,
139 const TPM2B_NAME *name,
140 const TPM2B_AUTH *auth_value);
141
142TSS2_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
151TSS2_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
158TSS2_RC iesys_check_response(
159 ESYS_CONTEXT * esys_context);
160
161TSS2_RC iesys_nv_get_name(
162 ESYS_CRYPTO_CALLBACKS *crypto_cb,
163 TPM2B_NV_PUBLIC *publicInfo,
164 TPM2B_NAME *name);
165
166TSS2_RC iesys_get_name(
167 ESYS_CRYPTO_CALLBACKS *crypto_cb,
168 TPM2B_PUBLIC *publicInfo,
169 TPM2B_NAME *name);
170
171bool iesys_tpm_error(
172 TSS2_RC r);
173
174TSS2_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:356