xref: /aosp_15_r20/external/tpm2-tss/src/tss2-sys/sysapi_util.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /***********************************************************************;
3*758e9fbaSOystein Eftevaag  * Copyright (c) 2015 - 2018, Intel Corporation
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ***********************************************************************/
6*758e9fbaSOystein Eftevaag 
7*758e9fbaSOystein Eftevaag #ifndef TSS2_SYSAPI_UTIL_H
8*758e9fbaSOystein Eftevaag #define TSS2_SYSAPI_UTIL_H
9*758e9fbaSOystein Eftevaag #include <stdbool.h>
10*758e9fbaSOystein Eftevaag 
11*758e9fbaSOystein Eftevaag #include "tss2_tpm2_types.h"
12*758e9fbaSOystein Eftevaag #include "tss2_tcti.h"
13*758e9fbaSOystein Eftevaag #include "tss2_sys.h"
14*758e9fbaSOystein Eftevaag #include "util/tpm2b.h"
15*758e9fbaSOystein Eftevaag 
16*758e9fbaSOystein Eftevaag enum cmdStates {CMD_STAGE_INITIALIZE,
17*758e9fbaSOystein Eftevaag                 CMD_STAGE_PREPARE,
18*758e9fbaSOystein Eftevaag                 CMD_STAGE_SEND_COMMAND,
19*758e9fbaSOystein Eftevaag                 CMD_STAGE_RECEIVE_RESPONSE,
20*758e9fbaSOystein Eftevaag                 CMD_STAGE_ALL = 0xff };
21*758e9fbaSOystein Eftevaag 
22*758e9fbaSOystein Eftevaag #pragma pack(push, 1)
23*758e9fbaSOystein Eftevaag typedef struct _TPM20_Header_In {
24*758e9fbaSOystein Eftevaag   TPM2_ST tag;
25*758e9fbaSOystein Eftevaag   UINT32 commandSize;
26*758e9fbaSOystein Eftevaag   UINT32 commandCode;
27*758e9fbaSOystein Eftevaag } TPM20_Header_In;
28*758e9fbaSOystein Eftevaag 
29*758e9fbaSOystein Eftevaag typedef struct _TPM20_Header_Out {
30*758e9fbaSOystein Eftevaag   TPM2_ST tag;
31*758e9fbaSOystein Eftevaag   UINT32 responseSize;
32*758e9fbaSOystein Eftevaag   UINT32 responseCode;
33*758e9fbaSOystein Eftevaag } TPM20_Header_Out;
34*758e9fbaSOystein Eftevaag #pragma pack(pop)
35*758e9fbaSOystein Eftevaag 
36*758e9fbaSOystein Eftevaag typedef struct {
37*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT *tctiContext;
38*758e9fbaSOystein Eftevaag     UINT8 *cmdBuffer;
39*758e9fbaSOystein Eftevaag     UINT32 maxCmdSize;
40*758e9fbaSOystein Eftevaag     UINT8 cmd_header[sizeof(TPM20_Header_In)]; /* Copy of the cmd header to allow reissue */
41*758e9fbaSOystein Eftevaag     TPM20_Header_Out rsp_header;
42*758e9fbaSOystein Eftevaag 
43*758e9fbaSOystein Eftevaag     TPM2_CC commandCode;    /* In host endian */
44*758e9fbaSOystein Eftevaag     UINT32 cpBufferUsedSize;
45*758e9fbaSOystein Eftevaag     UINT8 *cpBuffer;
46*758e9fbaSOystein Eftevaag     UINT32 *rspParamsSize;
47*758e9fbaSOystein Eftevaag     UINT8 previousStage;
48*758e9fbaSOystein Eftevaag     UINT8 authsCount;
49*758e9fbaSOystein Eftevaag     UINT8 numResponseHandles;
50*758e9fbaSOystein Eftevaag 
51*758e9fbaSOystein Eftevaag     struct
52*758e9fbaSOystein Eftevaag     {
53*758e9fbaSOystein Eftevaag         UINT16 decryptAllowed:1;
54*758e9fbaSOystein Eftevaag         UINT16 encryptAllowed:1;
55*758e9fbaSOystein Eftevaag         UINT16 decryptNull:1;
56*758e9fbaSOystein Eftevaag         UINT16 authAllowed:1;
57*758e9fbaSOystein Eftevaag     };
58*758e9fbaSOystein Eftevaag 
59*758e9fbaSOystein Eftevaag     /* Offset to next data in command/response buffer. */
60*758e9fbaSOystein Eftevaag     size_t nextData;
61*758e9fbaSOystein Eftevaag } _TSS2_SYS_CONTEXT_BLOB;
62*758e9fbaSOystein Eftevaag 
63*758e9fbaSOystein Eftevaag static inline _TSS2_SYS_CONTEXT_BLOB *
syscontext_cast(TSS2_SYS_CONTEXT * ctx)64*758e9fbaSOystein Eftevaag syscontext_cast(TSS2_SYS_CONTEXT *ctx)
65*758e9fbaSOystein Eftevaag {
66*758e9fbaSOystein Eftevaag     return (_TSS2_SYS_CONTEXT_BLOB*) ctx;
67*758e9fbaSOystein Eftevaag }
68*758e9fbaSOystein Eftevaag 
69*758e9fbaSOystein Eftevaag static inline TPM20_Header_Out *
resp_header_from_cxt(_TSS2_SYS_CONTEXT_BLOB * ctx)70*758e9fbaSOystein Eftevaag resp_header_from_cxt(_TSS2_SYS_CONTEXT_BLOB *ctx)
71*758e9fbaSOystein Eftevaag {
72*758e9fbaSOystein Eftevaag     return (TPM20_Header_Out *)ctx->cmdBuffer;
73*758e9fbaSOystein Eftevaag }
74*758e9fbaSOystein Eftevaag 
75*758e9fbaSOystein Eftevaag static inline TPM20_Header_In *
req_header_from_cxt(_TSS2_SYS_CONTEXT_BLOB * ctx)76*758e9fbaSOystein Eftevaag req_header_from_cxt(_TSS2_SYS_CONTEXT_BLOB *ctx)
77*758e9fbaSOystein Eftevaag {
78*758e9fbaSOystein Eftevaag     return (TPM20_Header_In *)ctx->cmdBuffer;
79*758e9fbaSOystein Eftevaag }
80*758e9fbaSOystein Eftevaag 
81*758e9fbaSOystein Eftevaag typedef struct {
82*758e9fbaSOystein Eftevaag     TPM2_CC commandCode;
83*758e9fbaSOystein Eftevaag     int numCommandHandles;
84*758e9fbaSOystein Eftevaag     int numResponseHandles;
85*758e9fbaSOystein Eftevaag } COMMAND_HANDLES;
86*758e9fbaSOystein Eftevaag 
87*758e9fbaSOystein Eftevaag #ifdef __cplusplus
88*758e9fbaSOystein Eftevaag extern "C" {
89*758e9fbaSOystein Eftevaag #endif
90*758e9fbaSOystein Eftevaag 
91*758e9fbaSOystein Eftevaag TSS2_RC CopyCommandHeader(_TSS2_SYS_CONTEXT_BLOB *ctx, TPM2_CC commandCode);
92*758e9fbaSOystein Eftevaag UINT32 GetCommandSize(_TSS2_SYS_CONTEXT_BLOB *ctx);
93*758e9fbaSOystein Eftevaag void InitSysContextFields(_TSS2_SYS_CONTEXT_BLOB *ctx);
94*758e9fbaSOystein Eftevaag void InitSysContextPtrs(_TSS2_SYS_CONTEXT_BLOB *ctx, size_t contextSize);
95*758e9fbaSOystein Eftevaag TSS2_RC CompleteChecks(_TSS2_SYS_CONTEXT_BLOB *ctx);
96*758e9fbaSOystein Eftevaag TSS2_RC CommonComplete(_TSS2_SYS_CONTEXT_BLOB *ctx);
97*758e9fbaSOystein Eftevaag 
98*758e9fbaSOystein Eftevaag TSS2_RC CommonOneCall(
99*758e9fbaSOystein Eftevaag     _TSS2_SYS_CONTEXT_BLOB *ctx,
100*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_COMMAND const *cmdAuthsArray,
101*758e9fbaSOystein Eftevaag     TSS2L_SYS_AUTH_RESPONSE *rspAuthsArray);
102*758e9fbaSOystein Eftevaag 
103*758e9fbaSOystein Eftevaag TSS2_RC CommonPreparePrologue(
104*758e9fbaSOystein Eftevaag     _TSS2_SYS_CONTEXT_BLOB *ctx,
105*758e9fbaSOystein Eftevaag     TPM2_CC commandCode);
106*758e9fbaSOystein Eftevaag 
107*758e9fbaSOystein Eftevaag TSS2_RC CommonPrepareEpilogue(_TSS2_SYS_CONTEXT_BLOB *ctx);
108*758e9fbaSOystein Eftevaag bool IsAlgorithmWeak(TPM2_ALG_ID algorith, TPM2_KEY_SIZE key_size);
109*758e9fbaSOystein Eftevaag TSS2_RC ValidatePublicTemplate(const TPM2B_PUBLIC *pub);
110*758e9fbaSOystein Eftevaag TSS2_RC ValidateNV_Public(const TPM2B_NV_PUBLIC *nv_public_info);
111*758e9fbaSOystein Eftevaag TSS2_RC ValidateTPML_PCR_SELECTION(const TPML_PCR_SELECTION *pcr_selection);
112*758e9fbaSOystein Eftevaag 
113*758e9fbaSOystein Eftevaag #ifdef __cplusplus
114*758e9fbaSOystein Eftevaag }
115*758e9fbaSOystein Eftevaag #endif
116*758e9fbaSOystein Eftevaag #endif
117