[PATCH] cmd: tpm-v2: add get_random
Oleksandr Suvorov
oleksandr.suvorov at foundries.io
Wed Aug 17 12:27:16 CEST 2022
From: Jorge Ramirez-Ortiz <jorge at foundries.io>
Enable getting randomness from the tpm command line.
Signed-off-by: Jorge Ramirez-Ortiz <jorge at foundries.io>
Co-developed-by: Oleksandr Suvorov <oleksandr.suvorov at foundries.io>
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov at foundries.io>
---
cmd/tpm-v2.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/cmd/tpm-v2.c b/cmd/tpm-v2.c
index 4ea5f9f094f..5b53953e207 100644
--- a/cmd/tpm-v2.c
+++ b/cmd/tpm-v2.c
@@ -6,8 +6,10 @@
#include <common.h>
#include <command.h>
+#include <display_options.h>
#include <dm.h>
#include <log.h>
+#include <malloc.h>
#include <mapmem.h>
#include <tpm-common.h>
#include <tpm-v2.h>
@@ -206,6 +208,37 @@ unmap_data:
return report_return_code(rc);
}
+static int do_tpm2_get_random(struct cmd_tbl *cmdtp, int flag, int argc,
+ char *const argv[])
+{
+ struct udevice *dev;
+ char *buffer;
+ u32 len;
+ int ret;
+
+ ret = get_tpm(&dev);
+ if (ret) {
+ printf("Can't get tpm\n");
+ return ret;
+ }
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ len = simple_strtoul(argv[1], NULL, 10);
+ buffer = calloc(1, len);
+ if (!buffer)
+ return -ENOMEM;
+
+ ret = tpm2_get_random(dev, buffer, len);
+ if (!ret)
+ print_buffer(0, buffer, 1, len, 0);
+
+ free(buffer);
+
+ return report_return_code(ret);
+}
+
static int do_tpm_dam_reset(struct cmd_tbl *cmdtp, int flag, int argc,
char *const argv[])
{
@@ -366,6 +399,7 @@ static struct cmd_tbl tpm2_commands[] = {
U_BOOT_CMD_MKENT(pcr_extend, 0, 1, do_tpm2_pcr_extend, "", ""),
U_BOOT_CMD_MKENT(pcr_read, 0, 1, do_tpm_pcr_read, "", ""),
U_BOOT_CMD_MKENT(get_capability, 0, 1, do_tpm_get_capability, "", ""),
+ U_BOOT_CMD_MKENT(get_random, 0, 1, do_tpm2_get_random, "", ""),
U_BOOT_CMD_MKENT(dam_reset, 0, 1, do_tpm_dam_reset, "", ""),
U_BOOT_CMD_MKENT(dam_parameters, 0, 1, do_tpm_dam_parameters, "", ""),
U_BOOT_CMD_MKENT(change_auth, 0, 1, do_tpm_change_auth, "", ""),
@@ -421,6 +455,8 @@ U_BOOT_CMD(tpm2, CONFIG_SYS_MAXARGS, 1, do_tpm, "Issue a TPMv2.x command",
" <property>: property\n"
" <addr>: address to store <count> entries of 4 bytes\n"
" <count>: number of entries to retrieve\n"
+"get_random <len>\n"
+" Get <len> random bytes.\n"
"dam_reset [<password>]\n"
" If the TPM is not in a LOCKOUT state, reset the internal error counter.\n"
" <password>: optional password\n"
--
2.37.2
More information about the U-Boot
mailing list