/* SPDX-License-Identifier: BSD-2-Clause */ /******************************************************************************* * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG * All rights reserved. *******************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "tss2_fapi.h" #include "test-fapi.h" #define LOGMODULE test #include "util/log.h" #include "util/aux_util.h" #define EVENT_SIZE 10 /* This is a list of expected value from the test. Possible returns (for different PCR bank configurations) are concatenated into a long string and the test uses strstr() to find a match.*/ const char *log_exp[] = { "[\n\ {\n\ \"recnum\":1,\n\ \"pcr\":16,\n\ \"digests\":[\n\ {\n\ \"hashAlg\":\"SHA1\",\n\ \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA256\",\n\ \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA384\",\n\ \"digest\":\"182e95266adff49059e706c61483478fe0688150c8d08b95fab5cfde961f12d903aaf44104af4ce72ba6a4bf20302b2e\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA512\",\n\ \"digest\":\"0f89ee1fcb7b0a4f7809d1267a029719004c5a5e5ec323a7c3523a20974f9a3f202f56fadba4cd9e8d654ab9f2e96dc5c795ea176fa20ede8d854c342f903533\"\n\ }\n\ ],\n\ \"type\":\"tss2\",\n\ \"sub_event\":{\n\ \"data\":\"00010203040506070809\",\n\ \"event\":{\n\ \"test\":\"myfile\"\n\ }\n\ }\n\ }\n\ ]", "[\n\ {\n\ \"recnum\":1,\n\ \"pcr\":16,\n\ \"digests\":[\n\ {\n\ \"hashAlg\":\"SHA1\",\n\ \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA256\",\n\ \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA384\",\n\ \"digest\":\"182e95266adff49059e706c61483478fe0688150c8d08b95fab5cfde961f12d903aaf44104af4ce72ba6a4bf20302b2e\"\n\ }\n\ ],\n\ \"type\":\"tss2\",\n\ \"sub_event\":{\n\ \"data\":\"00010203040506070809\",\n\ \"event\":{\n\ \"test\":\"myfile\"\n\ }\n\ }\n\ }\n\ ]", "[\n\ {\n\ \"recnum\":1,\n\ \"pcr\":16,\n\ \"digests\":[\n\ {\n\ \"hashAlg\":\"SHA1\",\n\ \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\ },\n\ {\n\ \"hashAlg\":\"SHA256\",\n\ \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\ }\n\ ],\n\ \"type\":\"tss2\",\n\ \"sub_event\":{\n\ \"data\":\"00010203040506070809\",\n\ \"event\":{\n\ \"test\":\"myfile\"\n\ }\n\ }\n\ }\n\ ]", "[\n\ {\n\ \"recnum\":1,\n\ \"pcr\":16,\n\ \"digests\":[\n\ {\n\ \"hashAlg\":\"SHA1\",\n\ \"digest\":\"494179714a6cd627239dfededf2de9ef994caf03\"\n\ }\n\ ],\n\ \"type\":\"tss2\",\n\ \"sub_event\":{\n\ \"data\":\"00010203040506070809\",\n\ \"event\":{\n\ \"test\":\"myfile\"\n\ }\n\ }\n\ }\n\ ]", "[\n\ {\n\ \"recnum\":1,\n\ \"pcr\":16,\n\ \"digests\":[\n\ {\n\ \"hashAlg\":\"SHA256\",\n\ \"digest\":\"1f825aa2f0020ef7cf91dfa30da4668d791c5d4824fc8e41354b89ec05795ab3\"\n\ }\n\ ],\n\ \"type\":\"tss2\",\n\ \"sub_event\":{\n\ \"data\":\"00010203040506070809\",\n\ \"event\":{\n\ \"test\":\"myfile\"\n\ }\n\ }\n\ }\n\ ]" }; /** Test the FAPI function FAPI_PcrExtend and Read. * * Tested FAPI commands: * - Fapi_Provision() * - Fapi_PcrExtend() * - Fapi_PcrRead() * - Fapi_Delete() * * @param[in,out] context The FAPI_CONTEXT. * @retval EXIT_FAILURE * @retval EXIT_SUCCESS */ int test_fapi_pcr_test(FAPI_CONTEXT *context) { TSS2_RC r; size_t i; uint8_t data[EVENT_SIZE] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; size_t pcr_digest_size; uint8_t *pcr_digest = NULL; char *log = NULL; r = Fapi_Provision(context, NULL, NULL, NULL); goto_if_error(r, "Error Fapi_Provision", error); r = pcr_reset(context, 16); goto_if_error(r, "Error pcr_reset", error); r = Fapi_PcrExtend(context, 16, data, EVENT_SIZE, "{ \"test\": \"myfile\" }"); goto_if_error(r, "Error Fapi_PcrExtend", error); r = Fapi_PcrRead(context, 16, &pcr_digest, &pcr_digest_size, &log); goto_if_error(r, "Error Fapi_PcrRead", error); for (i = 0; i < ( sizeof(log_exp) / sizeof(log_exp[0]) ); i++) if (strcmp(log_exp[i], log) == 0) break; if (i >= 3) { LOG_ERROR("Log mismatch. Received: %s", log); goto error; } fprintf(stderr, "\n\Event Log:\n%s\n", log); SAFE_FREE(pcr_digest); SAFE_FREE(log); r = pcr_reset(context, 16); goto_if_error(r, "Error pcr_reset", error); r = Fapi_PcrRead(context, 16, &pcr_digest, &pcr_digest_size, &log); goto_if_error(r, "Error Fapi_PcrRead", error); r = Fapi_Delete(context, "/HS/SRK"); goto_if_error(r, "Error Fapi_Delete", error); SAFE_FREE(pcr_digest); SAFE_FREE(log); return EXIT_SUCCESS; error: Fapi_Delete(context, "/HS/SRK"); SAFE_FREE(pcr_digest); SAFE_FREE(log); return EXIT_FAILURE; } int test_invoke_fapi(FAPI_CONTEXT *context) { return test_fapi_pcr_test(context); }