tpm2-tss 4.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 <inttypes.h> // for uint8_t
10#include <stdbool.h> // for bool
11#include <string.h> // for size_t
12
13#include "esys_int.h" // for RSRC_NODE_T
14#include "tss2_common.h" // for TSS2_RC
15#include "tss2_esys.h" // for ESYS_CONTEXT, ESYS_TR, ESYS_CRYPTO_CALL...
16#include "tss2_sys.h" // for TSS2L_SYS_AUTH_COMMAND, TSS2L_SYS_AUTH_...
17#include "tss2_tpm2_types.h" // for TPM2B_NAME, TPM2B_AUTH, TPM2_RH_LAST
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23/*
24 * Start issuing ESYS_TR objects past the TPM2_RH_LAST namespace
25 * and give ourselves 0x1000 handle space in case of differing
26 * header files between the library build and the client build.
27 *
28 * Due to an API mistake, TPM2_RH constants are valid for a few
29 * select ESYS API calls.
30 *
31 * More details can be found here:
32 * - https://github.com/tpm2-software/tpm2-tss/issues/1750
33 */
34#define ESYS_TR_MIN_OBJECT (TPM2_RH_LAST + 1 + 0x1000)
35
36TSS2_RC
37init_session_tab(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
38
39void iesys_DeleteAllResourceObjects(ESYS_CONTEXT *esys_context);
40
41TSS2_RC iesys_compute_encrypt_nonce(ESYS_CONTEXT *esysContext,
42 int *encryptNonceIdx,
43 TPM2B_NONCE **encryptNonce);
44
45TSS2_RC
46esys_CreateResourceObject(ESYS_CONTEXT *esys_context, ESYS_TR esys_handle, RSRC_NODE_T **node);
47
48TSS2_RC iesys_handle_to_tpm_handle(ESYS_TR esys_handle, TPM2_HANDLE *tpm_handle);
49
50bool iesys_is_platform_handle(ESYS_TR handle);
51
52TSS2_RC esys_GetResourceObject(ESYS_CONTEXT *esys_context, ESYS_TR rsrc_handle, RSRC_NODE_T **node);
53
54TPM2_HT iesys_get_handle_type(TPM2_HANDLE handle);
55
56TSS2_RC iesys_finalize(ESYS_CONTEXT *context);
57
58bool
59iesys_compare_name(ESYS_CRYPTO_CALLBACKS *crypto_cb, TPM2B_PUBLIC *publicInfo, TPM2B_NAME *name);
60
61TSS2_RC iesys_compute_encrypted_salt(ESYS_CONTEXT *esysContext,
62 RSRC_NODE_T *tpmKeyNode,
63 TPM2B_ENCRYPTED_SECRET *encryptedSalt);
64
65TSS2_RC iesys_gen_caller_nonces(ESYS_CONTEXT *esysContext);
66
67TSS2_RC
68iesys_encrypt_param(ESYS_CONTEXT *esysContext, TPM2B_NONCE **decryptNonce, int *decryptNonceIdx);
69
70TSS2_RC iesys_decrypt_param(ESYS_CONTEXT *esysContext);
71
72TSS2_RC iesys_check_rp_hmacs(ESYS_CONTEXT *esysContext, TSS2L_SYS_AUTH_RESPONSE *rspAuths);
73
74void iesys_compute_bound_entity(const TPM2B_NAME *name,
75 const TPM2B_AUTH *auth,
76 TPM2B_NAME *bound_entity);
77
78bool iesys_is_object_bound(const TPM2B_NAME *name, const TPM2B_AUTH *auth, RSRC_NODE_T *session);
79
80TSS2_RC iesys_check_sequence_async(ESYS_CONTEXT *esysContext);
81
82TSS2_RC
83check_session_feasibility(ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, int mandatory);
84
85void iesys_compute_session_value(RSRC_NODE_T *session,
86 const TPM2B_NAME *name,
87 const TPM2B_AUTH *auth_value);
88
89TSS2_RC iesys_compute_hmac(ESYS_CONTEXT *esys_context,
90 RSRC_NODE_T *session,
91 TPM2B_NONCE *decryptNonce,
92 TPM2B_NONCE *encryptNonce,
93 TPMS_AUTH_COMMAND *auth);
94
95TSS2_RC iesys_gen_auths(ESYS_CONTEXT *esysContext,
96 RSRC_NODE_T *h1,
97 RSRC_NODE_T *h2,
98 RSRC_NODE_T *h3,
99 TSS2L_SYS_AUTH_COMMAND *auths);
100
101TSS2_RC iesys_check_response(ESYS_CONTEXT *esys_context);
102
103TSS2_RC
104iesys_nv_get_name(ESYS_CRYPTO_CALLBACKS *crypto_cb, TPM2B_NV_PUBLIC *publicInfo, TPM2B_NAME *name);
105
106TSS2_RC
107iesys_get_name(ESYS_CRYPTO_CALLBACKS *crypto_cb, TPM2B_PUBLIC *publicInfo, TPM2B_NAME *name);
108
109bool iesys_tpm_error(TSS2_RC r);
110
111TSS2_RC iesys_adapt_auth_value(ESYS_CRYPTO_CALLBACKS *crypto_cb,
112 TPM2B_AUTH *auth_value,
113 TPMI_ALG_HASH hash_alg);
114
115void iesys_strip_trailing_zeros(TPM2B_AUTH *auth_value);
116
117TSS2_RC iesys_compute_cp_hash(ESYS_CONTEXT *esys_context,
118 TPMI_ALG_HASH hash_alg,
119 uint8_t *cp_hash,
120 size_t *cp_hash_size);
121
122TSS2_RC iesys_compute_rp_hash(ESYS_CONTEXT *esys_context,
123 TPMI_ALG_HASH hash_alg,
124 uint8_t *rp_hash,
125 size_t *rp_hash_size);
126
127#ifdef __cplusplus
128} /* extern "C" */
129#endif
130
131#endif /* ESYS_IUTIL_H */
uint32_t ESYS_TR
Definition tss2_esys.h:16
Definition esys_int.h:168
Definition esys_int.h:28
Definition tss2_esys.h:384