xref: /aosp_15_r20/external/tpm2-tss/test/integration/session-util.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /***********************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright (c) 2017-2018, Intel Corporation
4*758e9fbaSOystein Eftevaag  *
5*758e9fbaSOystein Eftevaag  * All rights reserved.
6*758e9fbaSOystein Eftevaag  ***********************************************************************/
7*758e9fbaSOystein Eftevaag #ifndef _SESSION_UTIL_H_
8*758e9fbaSOystein Eftevaag #define _SESSION_UTIL_H_
9*758e9fbaSOystein Eftevaag 
10*758e9fbaSOystein Eftevaag #include <stdbool.h>
11*758e9fbaSOystein Eftevaag #include <uthash.h>
12*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h"
13*758e9fbaSOystein Eftevaag #include "tss2_sys.h"
14*758e9fbaSOystein Eftevaag #include "util/tpm2b.h"
15*758e9fbaSOystein Eftevaag 
16*758e9fbaSOystein Eftevaag typedef struct {
17*758e9fbaSOystein Eftevaag     TPMI_DH_OBJECT tpmKey;
18*758e9fbaSOystein Eftevaag     TPMI_DH_ENTITY bind;
19*758e9fbaSOystein Eftevaag     TPM2B_ENCRYPTED_SECRET encryptedSalt;
20*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER salt;
21*758e9fbaSOystein Eftevaag     TPM2_SE sessionType;
22*758e9fbaSOystein Eftevaag     TPMT_SYM_DEF symmetric;
23*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH authHash;
24*758e9fbaSOystein Eftevaag     TPMI_SH_AUTH_SESSION sessionHandle;
25*758e9fbaSOystein Eftevaag     TPM2B_NONCE nonceTPM;
26*758e9fbaSOystein Eftevaag     TPM2B_DIGEST sessionKey;
27*758e9fbaSOystein Eftevaag     TPM2B_DIGEST authValueBind;
28*758e9fbaSOystein Eftevaag     TPM2B_NONCE nonceNewer;
29*758e9fbaSOystein Eftevaag     TPM2B_NONCE nonceOlder;
30*758e9fbaSOystein Eftevaag     TPM2B_NONCE nonceTpmDecrypt;
31*758e9fbaSOystein Eftevaag     TPM2B_NONCE nonceTpmEncrypt;
32*758e9fbaSOystein Eftevaag     TPM2B_NAME name;
33*758e9fbaSOystein Eftevaag     void *hmacPtr;
34*758e9fbaSOystein Eftevaag     UT_hash_handle hh;
35*758e9fbaSOystein Eftevaag } SESSION;
36*758e9fbaSOystein Eftevaag 
37*758e9fbaSOystein Eftevaag typedef struct{
38*758e9fbaSOystein Eftevaag     TPM2_HANDLE entityHandle;
39*758e9fbaSOystein Eftevaag     TPM2B_AUTH entityAuth;
40*758e9fbaSOystein Eftevaag     UT_hash_handle hh;
41*758e9fbaSOystein Eftevaag } ENTITY;
42*758e9fbaSOystein Eftevaag 
43*758e9fbaSOystein Eftevaag /*
44*758e9fbaSOystein Eftevaag  * Helper function used to calculate cpHash and rpHash
45*758e9fbaSOystein Eftevaag  * if command is true cpHash is calculated,
46*758e9fbaSOystein Eftevaag  * otherwise rpHash rpHash is calculated.
47*758e9fbaSOystein Eftevaag  */
48*758e9fbaSOystein Eftevaag TSS2_RC
49*758e9fbaSOystein Eftevaag tpm_calc_phash(
50*758e9fbaSOystein Eftevaag     TSS2_SYS_CONTEXT *sysContext,
51*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle1,
52*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle2,
53*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle3,
54*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH auth_hash,
55*758e9fbaSOystein Eftevaag     bool command,
56*758e9fbaSOystein Eftevaag     TPM2B_DIGEST *result);
57*758e9fbaSOystein Eftevaag 
58*758e9fbaSOystein Eftevaag UINT32
59*758e9fbaSOystein Eftevaag tpm_handle_to_name(
60*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tcti_context,
61*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle,
62*758e9fbaSOystein Eftevaag     TPM2B_NAME *name);
63*758e9fbaSOystein Eftevaag 
64*758e9fbaSOystein Eftevaag void
65*758e9fbaSOystein Eftevaag roll_nonces(
66*758e9fbaSOystein Eftevaag     SESSION *session,
67*758e9fbaSOystein Eftevaag     TPM2B_NONCE *new_nonce);
68*758e9fbaSOystein Eftevaag 
69*758e9fbaSOystein Eftevaag TSS2_RC
70*758e9fbaSOystein Eftevaag KDFa(TPMI_ALG_HASH hash,
71*758e9fbaSOystein Eftevaag      TPM2B *key,
72*758e9fbaSOystein Eftevaag      const char *label,
73*758e9fbaSOystein Eftevaag      TPM2B *contextU,
74*758e9fbaSOystein Eftevaag      TPM2B *contextV,
75*758e9fbaSOystein Eftevaag      UINT16 bits,
76*758e9fbaSOystein Eftevaag      TPM2B_MAX_BUFFER *resultKey );
77*758e9fbaSOystein Eftevaag 
78*758e9fbaSOystein Eftevaag SESSION *
79*758e9fbaSOystein Eftevaag get_session(TPMI_SH_AUTH_SESSION hndl);
80*758e9fbaSOystein Eftevaag 
81*758e9fbaSOystein Eftevaag TSS2_RC create_auth_session(
82*758e9fbaSOystein Eftevaag     SESSION **psession,
83*758e9fbaSOystein Eftevaag     TPMI_DH_OBJECT tpmKey,
84*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER *salt,
85*758e9fbaSOystein Eftevaag     TPMI_DH_ENTITY bind,
86*758e9fbaSOystein Eftevaag     TPM2B_AUTH *bindAuth,
87*758e9fbaSOystein Eftevaag     TPM2B_NONCE *nonceCaller,
88*758e9fbaSOystein Eftevaag     TPM2B_ENCRYPTED_SECRET *encryptedSalt,
89*758e9fbaSOystein Eftevaag     TPM2_SE sessionType,
90*758e9fbaSOystein Eftevaag     TPMT_SYM_DEF *symmetric,
91*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH algId,
92*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tctiContext);
93*758e9fbaSOystein Eftevaag 
94*758e9fbaSOystein Eftevaag TSS2_RC
95*758e9fbaSOystein Eftevaag compute_command_hmac(
96*758e9fbaSOystein Eftevaag     TSS2_SYS_CONTEXT *sysContext,
97*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle1,
98*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle2,
99*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle3,
100*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_COMMAND *pSessionsDataIn);
101*758e9fbaSOystein Eftevaag 
102*758e9fbaSOystein Eftevaag TSS2_RC
103*758e9fbaSOystein Eftevaag check_response_hmac(
104*758e9fbaSOystein Eftevaag     TSS2_SYS_CONTEXT *sysContext,
105*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_COMMAND *pSessionsDataIn,
106*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle1,
107*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle2,
108*758e9fbaSOystein Eftevaag     TPM2_HANDLE handle3,
109*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_RESPONSE *pSessionsDataOut);
110*758e9fbaSOystein Eftevaag 
111*758e9fbaSOystein Eftevaag void
112*758e9fbaSOystein Eftevaag end_auth_session(SESSION *session);
113*758e9fbaSOystein Eftevaag 
114*758e9fbaSOystein Eftevaag int
115*758e9fbaSOystein Eftevaag AddEntity(TPM2_HANDLE handle, TPM2B_AUTH *auth);
116*758e9fbaSOystein Eftevaag 
117*758e9fbaSOystein Eftevaag void
118*758e9fbaSOystein Eftevaag DeleteEntity(TPM2_HANDLE handle);
119*758e9fbaSOystein Eftevaag 
120*758e9fbaSOystein Eftevaag int
121*758e9fbaSOystein Eftevaag GetEntityAuth(TPM2_HANDLE handle, TPM2B_AUTH *auth);
122*758e9fbaSOystein Eftevaag 
123*758e9fbaSOystein Eftevaag ENTITY *
124*758e9fbaSOystein Eftevaag GetEntity(TPM2_HANDLE handle);
125*758e9fbaSOystein Eftevaag 
126*758e9fbaSOystein Eftevaag TSS2_RC
127*758e9fbaSOystein Eftevaag encrypt_command_param(
128*758e9fbaSOystein Eftevaag     SESSION *session,
129*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER *encryptedData,
130*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER *clearData,
131*758e9fbaSOystein Eftevaag     TPM2B_AUTH *authValue);
132*758e9fbaSOystein Eftevaag 
133*758e9fbaSOystein Eftevaag TSS2_RC
134*758e9fbaSOystein Eftevaag decrypt_response_param(
135*758e9fbaSOystein Eftevaag     SESSION *session,
136*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER *clearData,
137*758e9fbaSOystein Eftevaag     TPM2B_MAX_BUFFER *encryptedData,
138*758e9fbaSOystein Eftevaag     TPM2B_AUTH *authValue);
139*758e9fbaSOystein Eftevaag 
140*758e9fbaSOystein Eftevaag #endif
141