blob: 7af51312a37c2b4b6a9e1d2e75b88528d97f42d8 [file] [log] [blame]
#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;
}