123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /* SPDX-License-Identifier: BSD-3-Clause */
- #include "log.h"
- #include "tpm2.h"
- #include "tpm2_tool.h"
- /*
- * Both the Microsoft and IBM TPM2 simulators require some specific setup
- * before they can be used by the SAPI. This setup is specific to the
- * simulators and is something that the low-level hardware / firmware does
- * for a discrete TPM.
- * NOTE: In the code that interacts with a TPM this can be a very ugly
- * abstraction leak.
- */
- typedef struct tpm2_startup_ctx tpm2_startup_ctx;
- struct tpm2_startup_ctx {
- UINT8 clear :1;
- };
- static tpm2_startup_ctx ctx;
- static bool on_option(char key, char *value) {
- UNUSED(value);
- switch (key) {
- case 'c':
- ctx.clear = 1;
- break;
- /*no default */
- }
- return true;
- }
- static bool tpm2_tool_onstart(tpm2_options **opts) {
- static struct option topts [] = {
- { "clear", no_argument, NULL, 'c' },
- };
- *opts = tpm2_options_new("c", ARRAY_LEN(topts), topts, on_option, NULL, 0);
- return *opts != NULL;
- }
- static tool_rc tpm2_tool_onrun(ESYS_CONTEXT *context, tpm2_option_flags flags) {
- UNUSED(flags);
- TPM2_SU startup_type = ctx.clear ? TPM2_SU_CLEAR : TPM2_SU_STATE;
- LOG_INFO("Sending TPM_Startup command with type: %s",
- ctx.clear ? "TPM2_SU_CLEAR" : "TPM2_SU_STATE");
- return tpm2_startup(context, startup_type);
- }
- // Register this tool with tpm2_tool.c
- TPM2_TOOL_REGISTER("startup", tpm2_tool_onstart, tpm2_tool_onrun, NULL, NULL)
|