aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c')
-rw-r--r--roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c b/roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c
new file mode 100644
index 000000000..7af51312a
--- /dev/null
+++ b/roms/skiboot/libstb/secvar/storage/gen_tpmnv_public_name.c
@@ -0,0 +1,107 @@
+#include <mbedtls/sha256.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <ibmtss/TPM_Types.h>
+#include <ibmtss/tssmarshal.h>
+#include <netinet/in.h>
+
+#define TPM_TPM20
+#include "../../tss2/ibmtpm20tss/utils/tssmarshal.c"
+#include "../../tss2/ibmtpm20tss/utils/Unmarshal.c"
+
+#define zalloc(a) calloc(1,a)
+// Silence linking complaints
+int verbose;
+
+#define COPYRIGHT_YEAR "2020"
+
+
+TPMS_NV_PUBLIC vars = {
+ .nvIndex = 0x01c10190,
+ .nameAlg = TPM_ALG_SHA256,
+ .dataSize = 2048,
+ .attributes.val = TPMA_NVA_PPWRITE |
+ TPMA_NVA_ORDINARY |
+ TPMA_NVA_WRITE_STCLEAR |
+ TPMA_NVA_AUTHREAD |
+ TPMA_NVA_NO_DA |
+ TPMA_NVA_WRITTEN |
+ TPMA_NVA_PLATFORMCREATE,
+};
+
+TPMS_NV_PUBLIC control = {
+ .nvIndex = 0x01c10191,
+ .nameAlg = TPM_ALG_SHA256,
+ .dataSize = 73,
+ .attributes.val = TPMA_NVA_PPWRITE |
+ TPMA_NVA_ORDINARY |
+ TPMA_NVA_WRITE_STCLEAR |
+ TPMA_NVA_AUTHREAD |
+ TPMA_NVA_NO_DA |
+ TPMA_NVA_WRITTEN |
+ TPMA_NVA_PLATFORMCREATE,
+};
+
+int calc_hash(TPMS_NV_PUBLIC *public, char *name)
+{
+ uint16_t written = 0;
+ uint32_t size = 4096;
+ unsigned char *buffer = zalloc(size);
+ unsigned char *buffer_tmp = buffer;
+ char output[34];
+ mbedtls_sha256_context cxt;
+ int ret = 0;
+ int i;
+
+ // Output hash includes the hash algorithm in the first two bytes
+ *((uint16_t *) output) = htons(public->nameAlg);
+
+ // Serialize the NV Public struct
+ ret = TSS_TPMS_NV_PUBLIC_Marshalu(public, &written, &buffer_tmp, &size);
+ if (ret) return ret;
+
+ // Hash it
+ mbedtls_sha256_init(&cxt);
+ ret = mbedtls_sha256_starts_ret(&cxt, 0);
+ if (ret) return ret;
+
+ ret = mbedtls_sha256_update_ret(&cxt, buffer, written);
+ if (ret) return ret;
+
+ mbedtls_sha256_finish_ret(&cxt, output+2);
+ mbedtls_sha256_free(&cxt);
+
+ free(buffer);
+
+ // Print it
+ printf("\nconst uint8_t tpmnv_%s_name[] = {", name);
+ for (i = 0; i < sizeof(output); i++) {
+ if (!(i % 13))
+ printf("\n\t");
+ printf("0x%02x, ", output[i] & 0xff);
+ }
+ printf("\n};\n");
+
+ return 0;
+}
+
+
+int main()
+{
+ printf("// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later\n");
+ printf("/* Copyright " COPYRIGHT_YEAR " IBM Corp. */\n");
+
+ printf("#ifndef _SECBOOT_TPM_PUBLIC_NAME_H_\n");
+ printf("#define _SECBOOT_TPM_PUBLIC_NAME_H_\n");
+
+ calc_hash(&vars, "vars");
+ calc_hash(&control, "control");
+
+ printf("\n");
+ printf("#endif\n");
+
+ return 0;
+}
+