xref: /aosp_15_r20/external/tpm2-tss/src/tss2-esys/esys_iutil.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ******************************************************************************/
6*758e9fbaSOystein Eftevaag #ifndef ESYS_IUTIL_H
7*758e9fbaSOystein Eftevaag #define ESYS_IUTIL_H
8*758e9fbaSOystein Eftevaag 
9*758e9fbaSOystein Eftevaag #include <stdbool.h>
10*758e9fbaSOystein Eftevaag #include <inttypes.h>
11*758e9fbaSOystein Eftevaag #include <string.h>
12*758e9fbaSOystein Eftevaag #include "tss2_esys.h"
13*758e9fbaSOystein Eftevaag 
14*758e9fbaSOystein Eftevaag #include "esys_int.h"
15*758e9fbaSOystein Eftevaag #include "esys_crypto.h"
16*758e9fbaSOystein Eftevaag 
17*758e9fbaSOystein Eftevaag #ifdef __cplusplus
18*758e9fbaSOystein Eftevaag extern "C" {
19*758e9fbaSOystein Eftevaag #endif
20*758e9fbaSOystein Eftevaag 
21*758e9fbaSOystein Eftevaag /** An entry in a cpHash or rpHash table. */
22*758e9fbaSOystein Eftevaag typedef struct {
23*758e9fbaSOystein Eftevaag     TPM2_ALG_ID alg;                 /**< The hash algorithm. */
24*758e9fbaSOystein Eftevaag     size_t size;                     /**< The digest size. */
25*758e9fbaSOystein Eftevaag     uint8_t digest[sizeof(TPMU_HA)]; /**< The digest. */
26*758e9fbaSOystein Eftevaag } HASH_TAB_ITEM;
27*758e9fbaSOystein Eftevaag 
28*758e9fbaSOystein Eftevaag TSS2_RC init_session_tab(
29*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
30*758e9fbaSOystein Eftevaag     ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
31*758e9fbaSOystein Eftevaag 
32*758e9fbaSOystein Eftevaag void iesys_DeleteAllResourceObjects(
33*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esys_context);
34*758e9fbaSOystein Eftevaag 
35*758e9fbaSOystein Eftevaag TSS2_RC iesys_compute_encrypt_nonce(
36*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
37*758e9fbaSOystein Eftevaag     int *encryptNonceIdx,
38*758e9fbaSOystein Eftevaag     TPM2B_NONCE **encryptNonce);
39*758e9fbaSOystein Eftevaag 
40*758e9fbaSOystein Eftevaag TSS2_RC iesys_compute_cp_hashtab(
41*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
42*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name1,
43*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name2,
44*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name3,
45*758e9fbaSOystein Eftevaag     HASH_TAB_ITEM cp_hash_tab[3],
46*758e9fbaSOystein Eftevaag     uint8_t *cpHashNum);
47*758e9fbaSOystein Eftevaag 
48*758e9fbaSOystein Eftevaag TSS2_RC iesys_compute_rp_hashtab(
49*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
50*758e9fbaSOystein Eftevaag     const uint8_t *rpBuffer,
51*758e9fbaSOystein Eftevaag     size_t rpBuffer_size,
52*758e9fbaSOystein Eftevaag     HASH_TAB_ITEM rp_hash_tab[3],
53*758e9fbaSOystein Eftevaag     uint8_t *rpHashNum);
54*758e9fbaSOystein Eftevaag 
55*758e9fbaSOystein Eftevaag TSS2_RC esys_CreateResourceObject(
56*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esys_context,
57*758e9fbaSOystein Eftevaag     ESYS_TR esys_handle,
58*758e9fbaSOystein Eftevaag     RSRC_NODE_T **node);
59*758e9fbaSOystein Eftevaag 
60*758e9fbaSOystein Eftevaag TSS2_RC iesys_handle_to_tpm_handle(
61*758e9fbaSOystein Eftevaag     ESYS_TR esys_handle,
62*758e9fbaSOystein Eftevaag     TPM2_HANDLE *tpm_handle);
63*758e9fbaSOystein Eftevaag 
64*758e9fbaSOystein Eftevaag TSS2_RC esys_GetResourceObject(
65*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esys_context,
66*758e9fbaSOystein Eftevaag     ESYS_TR rsrc_handle,
67*758e9fbaSOystein Eftevaag     RSRC_NODE_T **node);
68*758e9fbaSOystein Eftevaag 
69*758e9fbaSOystein Eftevaag TPM2_HT iesys_get_handle_type(
70*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle);
71*758e9fbaSOystein Eftevaag 
72*758e9fbaSOystein Eftevaag TSS2_RC iesys_finalize(ESYS_CONTEXT *context);
73*758e9fbaSOystein Eftevaag 
74*758e9fbaSOystein Eftevaag bool iesys_compare_name(
75*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC *publicInfo,
76*758e9fbaSOystein Eftevaag     TPM2B_NAME *name);
77*758e9fbaSOystein Eftevaag 
78*758e9fbaSOystein Eftevaag TSS2_RC iesys_compute_encrypted_salt(
79*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
80*758e9fbaSOystein Eftevaag     RSRC_NODE_T *tpmKeyNode,
81*758e9fbaSOystein Eftevaag     TPM2B_ENCRYPTED_SECRET *encryptedSalt);
82*758e9fbaSOystein Eftevaag 
83*758e9fbaSOystein Eftevaag TSS2_RC iesys_gen_caller_nonces(
84*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext);
85*758e9fbaSOystein Eftevaag 
86*758e9fbaSOystein Eftevaag TSS2_RC iesys_encrypt_param(
87*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
88*758e9fbaSOystein Eftevaag     TPM2B_NONCE **decryptNonce,
89*758e9fbaSOystein Eftevaag     int *decryptNonceIdx);
90*758e9fbaSOystein Eftevaag 
91*758e9fbaSOystein Eftevaag TSS2_RC iesys_decrypt_param(
92*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext);
93*758e9fbaSOystein Eftevaag 
94*758e9fbaSOystein Eftevaag TSS2_RC iesys_check_rp_hmacs(
95*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
96*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_RESPONSE *rspAuths,
97*758e9fbaSOystein Eftevaag     HASH_TAB_ITEM rp_hash_tab[3],
98*758e9fbaSOystein Eftevaag     uint8_t rpHashNum);
99*758e9fbaSOystein Eftevaag 
100*758e9fbaSOystein Eftevaag void iesys_compute_bound_entity(
101*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name,
102*758e9fbaSOystein Eftevaag     const TPM2B_AUTH *auth,
103*758e9fbaSOystein Eftevaag     TPM2B_NAME *bound_entity);
104*758e9fbaSOystein Eftevaag 
105*758e9fbaSOystein Eftevaag bool iesys_is_object_bound(
106*758e9fbaSOystein Eftevaag     const TPM2B_NAME * name,
107*758e9fbaSOystein Eftevaag     const TPM2B_AUTH * auth,
108*758e9fbaSOystein Eftevaag     RSRC_NODE_T * session);
109*758e9fbaSOystein Eftevaag 
110*758e9fbaSOystein Eftevaag TSS2_RC iesys_check_sequence_async(
111*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext);
112*758e9fbaSOystein Eftevaag 
113*758e9fbaSOystein Eftevaag TSS2_RC check_session_feasibility(
114*758e9fbaSOystein Eftevaag     ESYS_TR shandle1,
115*758e9fbaSOystein Eftevaag     ESYS_TR shandle2,
116*758e9fbaSOystein Eftevaag     ESYS_TR shandle3,
117*758e9fbaSOystein Eftevaag     int mandatory);
118*758e9fbaSOystein Eftevaag 
119*758e9fbaSOystein Eftevaag void iesys_compute_session_value(
120*758e9fbaSOystein Eftevaag     RSRC_NODE_T *session,
121*758e9fbaSOystein Eftevaag     const TPM2B_NAME *name,
122*758e9fbaSOystein Eftevaag     const TPM2B_AUTH *auth_value);
123*758e9fbaSOystein Eftevaag 
124*758e9fbaSOystein Eftevaag TSS2_RC iesys_compute_hmac(
125*758e9fbaSOystein Eftevaag     RSRC_NODE_T *session,
126*758e9fbaSOystein Eftevaag     HASH_TAB_ITEM cp_hash_tab[3],
127*758e9fbaSOystein Eftevaag     uint8_t cpHashNum,
128*758e9fbaSOystein Eftevaag     TPM2B_NONCE *decryptNonce,
129*758e9fbaSOystein Eftevaag     TPM2B_NONCE *encryptNonce,
130*758e9fbaSOystein Eftevaag     TPMS_AUTH_COMMAND *auth);
131*758e9fbaSOystein Eftevaag 
132*758e9fbaSOystein Eftevaag TSS2_RC iesys_gen_auths(
133*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esysContext,
134*758e9fbaSOystein Eftevaag     RSRC_NODE_T *h1,
135*758e9fbaSOystein Eftevaag     RSRC_NODE_T *h2,
136*758e9fbaSOystein Eftevaag     RSRC_NODE_T *h3,
137*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_COMMAND *auths);
138*758e9fbaSOystein Eftevaag 
139*758e9fbaSOystein Eftevaag TSS2_RC iesys_check_response(
140*758e9fbaSOystein Eftevaag     ESYS_CONTEXT * esys_context);
141*758e9fbaSOystein Eftevaag 
142*758e9fbaSOystein Eftevaag TSS2_RC iesys_nv_get_name(
143*758e9fbaSOystein Eftevaag     TPM2B_NV_PUBLIC *publicInfo,
144*758e9fbaSOystein Eftevaag     TPM2B_NAME *name);
145*758e9fbaSOystein Eftevaag 
146*758e9fbaSOystein Eftevaag TSS2_RC iesys_get_name(
147*758e9fbaSOystein Eftevaag     TPM2B_PUBLIC *publicInfo,
148*758e9fbaSOystein Eftevaag     TPM2B_NAME *name);
149*758e9fbaSOystein Eftevaag 
150*758e9fbaSOystein Eftevaag bool iesys_tpm_error(
151*758e9fbaSOystein Eftevaag     TSS2_RC r);
152*758e9fbaSOystein Eftevaag 
153*758e9fbaSOystein Eftevaag #ifdef __cplusplus
154*758e9fbaSOystein Eftevaag } /* extern "C" */
155*758e9fbaSOystein Eftevaag #endif
156*758e9fbaSOystein Eftevaag 
157*758e9fbaSOystein Eftevaag #endif /* ESYS_IUTIL_H */
158