xref: /aosp_15_r20/external/tpm2-tss/test/integration/fapi-nv-extend.int.c (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 
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag 
11*758e9fbaSOystein Eftevaag #include <stdlib.h>
12*758e9fbaSOystein Eftevaag #include <stdio.h>
13*758e9fbaSOystein Eftevaag #include <inttypes.h>
14*758e9fbaSOystein Eftevaag #include <string.h>
15*758e9fbaSOystein Eftevaag 
16*758e9fbaSOystein Eftevaag #include "tss2_fapi.h"
17*758e9fbaSOystein Eftevaag 
18*758e9fbaSOystein Eftevaag #define LOGMODULE test
19*758e9fbaSOystein Eftevaag #include "util/log.h"
20*758e9fbaSOystein Eftevaag #include "util/aux_util.h"
21*758e9fbaSOystein Eftevaag 
22*758e9fbaSOystein Eftevaag #define NV_SIZE 32
23*758e9fbaSOystein Eftevaag 
24*758e9fbaSOystein Eftevaag #define PASSWORD "abc"
25*758e9fbaSOystein Eftevaag 
26*758e9fbaSOystein Eftevaag static char *password;
27*758e9fbaSOystein Eftevaag 
28*758e9fbaSOystein Eftevaag static TSS2_RC
auth_callback(FAPI_CONTEXT * context,char const * description,char ** auth,void * userData)29*758e9fbaSOystein Eftevaag auth_callback(
30*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
31*758e9fbaSOystein Eftevaag     char const *description,
32*758e9fbaSOystein Eftevaag     char **auth,
33*758e9fbaSOystein Eftevaag     void *userData)
34*758e9fbaSOystein Eftevaag {
35*758e9fbaSOystein Eftevaag     (void)description;
36*758e9fbaSOystein Eftevaag     (void)userData;
37*758e9fbaSOystein Eftevaag     *auth = strdup(password);
38*758e9fbaSOystein Eftevaag     return_if_null(*auth, "Out of memory.", TSS2_FAPI_RC_MEMORY);
39*758e9fbaSOystein Eftevaag     return TSS2_RC_SUCCESS;
40*758e9fbaSOystein Eftevaag }
41*758e9fbaSOystein Eftevaag 
42*758e9fbaSOystein Eftevaag 
43*758e9fbaSOystein Eftevaag /** Test the FAPI function FAPI_NvExtend.
44*758e9fbaSOystein Eftevaag  *
45*758e9fbaSOystein Eftevaag  * Tested FAPI commands:
46*758e9fbaSOystein Eftevaag  *  - Fapi_Provision()
47*758e9fbaSOystein Eftevaag  *  - Fapi_CreateNv()
48*758e9fbaSOystein Eftevaag  *  - Fapi_NvExtend()
49*758e9fbaSOystein Eftevaag  *  - Fapi_Delete()
50*758e9fbaSOystein Eftevaag  *  - Fapi_SetAuthCB()
51*758e9fbaSOystein Eftevaag  *
52*758e9fbaSOystein Eftevaag  * @param[in,out] context The FAPI_CONTEXT.
53*758e9fbaSOystein Eftevaag  * @retval EXIT_FAILURE
54*758e9fbaSOystein Eftevaag  * @retval EXIT_SUCCESS
55*758e9fbaSOystein Eftevaag  */
56*758e9fbaSOystein Eftevaag int
test_fapi_nv_extend(FAPI_CONTEXT * context)57*758e9fbaSOystein Eftevaag test_fapi_nv_extend(FAPI_CONTEXT *context)
58*758e9fbaSOystein Eftevaag {
59*758e9fbaSOystein Eftevaag     TSS2_RC r;
60*758e9fbaSOystein Eftevaag     char *nvPathExtend = "/nv/Owner/myNVextend";
61*758e9fbaSOystein Eftevaag     uint8_t *data_dest = NULL;
62*758e9fbaSOystein Eftevaag     char *log = NULL;
63*758e9fbaSOystein Eftevaag     size_t dest_size;
64*758e9fbaSOystein Eftevaag 
65*758e9fbaSOystein Eftevaag     r = Fapi_Provision(context, NULL, NULL, NULL);
66*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_Provision", error);
67*758e9fbaSOystein Eftevaag 
68*758e9fbaSOystein Eftevaag     /* Test no password, noda set */
69*758e9fbaSOystein Eftevaag     r = Fapi_CreateNv(context, nvPathExtend, "pcr, noda", 0, "", "");
70*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_CreateNv", error);
71*758e9fbaSOystein Eftevaag 
72*758e9fbaSOystein Eftevaag     uint8_t data_src[NV_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
73*758e9fbaSOystein Eftevaag                                  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
74*758e9fbaSOystein Eftevaag                                  0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
75*758e9fbaSOystein Eftevaag                                  0, 1
76*758e9fbaSOystein Eftevaag                                 };
77*758e9fbaSOystein Eftevaag 
78*758e9fbaSOystein Eftevaag 
79*758e9fbaSOystein Eftevaag     r = Fapi_NvExtend(context, nvPathExtend, &data_src[0], NV_SIZE, "{ \"test\": \"myfile\" }");
80*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_EXTEND", error);
81*758e9fbaSOystein Eftevaag 
82*758e9fbaSOystein Eftevaag     r = Fapi_NvRead(context, nvPathExtend, &data_dest, &dest_size, &log);
83*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NvRead", error);
84*758e9fbaSOystein Eftevaag 
85*758e9fbaSOystein Eftevaag     fprintf(stderr, "\nLog:\n%s\n", log);
86*758e9fbaSOystein Eftevaag     SAFE_FREE(data_dest);
87*758e9fbaSOystein Eftevaag 
88*758e9fbaSOystein Eftevaag     r = Fapi_NvExtend(context, nvPathExtend, &data_src[0], NV_SIZE, "{ \"test\": \"myfile\" }");
89*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_EXTEND", error);
90*758e9fbaSOystein Eftevaag 
91*758e9fbaSOystein Eftevaag     SAFE_FREE(log);
92*758e9fbaSOystein Eftevaag     r = Fapi_NvRead(context, nvPathExtend, &data_dest, &dest_size, &log);
93*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NvRead", error);
94*758e9fbaSOystein Eftevaag 
95*758e9fbaSOystein Eftevaag     fprintf(stderr, "\nLog:\n%s\n", log);
96*758e9fbaSOystein Eftevaag 
97*758e9fbaSOystein Eftevaag     r = Fapi_Delete(context, nvPathExtend);
98*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_Undefine", error);
99*758e9fbaSOystein Eftevaag 
100*758e9fbaSOystein Eftevaag     r = Fapi_SetAuthCB(context, auth_callback, "");
101*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error SetPolicyAuthCallback", error);
102*758e9fbaSOystein Eftevaag 
103*758e9fbaSOystein Eftevaag     /* Test with password noda  set */
104*758e9fbaSOystein Eftevaag     password = PASSWORD;
105*758e9fbaSOystein Eftevaag     r = Fapi_CreateNv(context, nvPathExtend, "pcr, noda", 0, "", PASSWORD);
106*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_CreateNv", error);
107*758e9fbaSOystein Eftevaag 
108*758e9fbaSOystein Eftevaag     r = Fapi_SetAuthCB(context, auth_callback, "");
109*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error SetPolicyAuthCallback", error);
110*758e9fbaSOystein Eftevaag 
111*758e9fbaSOystein Eftevaag     r = Fapi_NvExtend(context, nvPathExtend, &data_src[0], NV_SIZE, "{ \"test\": \"myfile\" }");
112*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_EXTEN", error);
113*758e9fbaSOystein Eftevaag 
114*758e9fbaSOystein Eftevaag     r = Fapi_Delete(context, nvPathExtend);
115*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_Undefine", error);
116*758e9fbaSOystein Eftevaag 
117*758e9fbaSOystein Eftevaag     /* Test no password, noda clear */
118*758e9fbaSOystein Eftevaag     password = "";
119*758e9fbaSOystein Eftevaag     r = Fapi_CreateNv(context, nvPathExtend, "pcr", 0, "", "");
120*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_CreateNv", error);
121*758e9fbaSOystein Eftevaag 
122*758e9fbaSOystein Eftevaag     r = Fapi_NvExtend(context, nvPathExtend, &data_src[0], NV_SIZE, "{ \"test\": \"myfile\" }");
123*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_EXTEN", error);
124*758e9fbaSOystein Eftevaag 
125*758e9fbaSOystein Eftevaag     r = Fapi_Delete(context, nvPathExtend);
126*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_Undefine", error);
127*758e9fbaSOystein Eftevaag 
128*758e9fbaSOystein Eftevaag     /* Test with password noda clear */
129*758e9fbaSOystein Eftevaag     password = PASSWORD;
130*758e9fbaSOystein Eftevaag     r = Fapi_CreateNv(context, nvPathExtend, "pcr", 0, "", PASSWORD);
131*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_CreateNv", error);
132*758e9fbaSOystein Eftevaag 
133*758e9fbaSOystein Eftevaag     r = Fapi_SetAuthCB(context, auth_callback, "");
134*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error SetPolicyAuthCallback", error);
135*758e9fbaSOystein Eftevaag 
136*758e9fbaSOystein Eftevaag     r = Fapi_NvExtend(context, nvPathExtend, &data_src[0], NV_SIZE, "{ \"test\": \"myfile\" }");
137*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_EXTEN", error);
138*758e9fbaSOystein Eftevaag 
139*758e9fbaSOystein Eftevaag     r = Fapi_Delete(context, nvPathExtend);
140*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_NV_Undefine", error);
141*758e9fbaSOystein Eftevaag 
142*758e9fbaSOystein Eftevaag     r = Fapi_Delete(context, "/");
143*758e9fbaSOystein Eftevaag     goto_if_error(r, "Error Fapi_Delete", error);
144*758e9fbaSOystein Eftevaag 
145*758e9fbaSOystein Eftevaag     SAFE_FREE(log);
146*758e9fbaSOystein Eftevaag     SAFE_FREE(data_dest);
147*758e9fbaSOystein Eftevaag     return EXIT_SUCCESS;
148*758e9fbaSOystein Eftevaag 
149*758e9fbaSOystein Eftevaag error:
150*758e9fbaSOystein Eftevaag     SAFE_FREE(log);
151*758e9fbaSOystein Eftevaag     SAFE_FREE(data_dest);
152*758e9fbaSOystein Eftevaag     return EXIT_FAILURE;
153*758e9fbaSOystein Eftevaag }
154*758e9fbaSOystein Eftevaag 
155*758e9fbaSOystein Eftevaag int
test_invoke_fapi(FAPI_CONTEXT * context)156*758e9fbaSOystein Eftevaag test_invoke_fapi(FAPI_CONTEXT *context)
157*758e9fbaSOystein Eftevaag {
158*758e9fbaSOystein Eftevaag     return test_fapi_nv_extend(context);
159*758e9fbaSOystein Eftevaag }
160