123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /* SPDX-License-Identifier: BSD-3-Clause */
- #include "files.h"
- #include "log.h"
- #include "tpm2.h"
- #include "tpm2_tool.h"
- #include "tpm2_options.h"
- /* Spec enforce input data to be not longer than 128 bytes */
- #define MAX_SIZE_TO_READ 128
- typedef struct tpm_stirrandom_ctx tpm_stirrandom_ctx;
- struct tpm_stirrandom_ctx {
- TPM2B_SENSITIVE_DATA in_data;
- char *in_file;
- };
- static tpm_stirrandom_ctx ctx = {
- .in_data = { .size = MAX_SIZE_TO_READ }
- };
- static bool on_args(int argc, char **argv) {
- if (argc != 1) {
- LOG_ERR("Only supports one FILE_INPUT file, got %d arguments", argc);
- return false;
- }
- ctx.in_file = argv[0];
- return true;
- }
- static bool tpm2_tool_onstart(tpm2_options **opts) {
- *opts = tpm2_options_new(NULL, 0, NULL, NULL, on_args, 0);
- return *opts != NULL;
- }
- static bool load_sensitive(void) {
- bool res = files_load_bytes_from_buffer_or_file_or_stdin(NULL, ctx.in_file,
- &ctx.in_data.size, ctx.in_data.buffer);
- if (!res) {
- LOG_ERR("Error while reading data from file or stdin");
- return false;
- }
- if (ctx.in_data.size == 0) {
- LOG_ERR("Data size to send is zero");
- return false;
- }
- LOG_INFO("Submitting %d bytes to TPM", ctx.in_data.size);
- return true;
- }
- static tool_rc tpm2_tool_onrun(ESYS_CONTEXT *ectx, tpm2_option_flags flags) {
- UNUSED(flags);
- if (!load_sensitive()) {
- return tool_rc_general_error;
- }
- return tpm2_stirrandom(ectx, &ctx.in_data);
- }
- // Register this tool with tpm2_tool.c
- TPM2_TOOL_REGISTER("stirrandom", tpm2_tool_onstart, tpm2_tool_onrun, NULL, NULL)
|