blob: f6e686d1ff836e374e3dc5a25a9307b0f7b60953 [file] [log] [blame]
Peter Huewed5a36f62018-06-12 00:59:26 +02001/* SPDX-License-Identifier: BSD-2 */
Juergen Repp731135d2018-03-27 14:43:03 +02002/*******************************************************************************
3 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4 * All rights reserved.
Juergen Repp731135d2018-03-27 14:43:03 +02005 *******************************************************************************/
6
Juergen Reppbb517eb2018-06-15 16:22:28 +02007#include <stdlib.h>
8
Juergen Repp731135d2018-03-27 14:43:03 +02009#include "tss2_esys.h"
10
11#include "esys_iutil.h"
Juergen Repp16d774c2018-06-18 15:49:21 +020012#include "test-esapi.h"
Juergen Repp731135d2018-03-27 14:43:03 +020013#define LOGMODULE test
14#include "util/log.h"
15
Juergen Repp920d7cd2018-04-12 10:09:46 +020016/*
17 * Test the basic commands for PCR processing: Esys_PCR_Extend, Esys_PCR_Read,
18 * Esys_PCR_Reset, Esys_PCR_Event, and Esys_PCR_Allocate
19 */
Juergen Repp731135d2018-03-27 14:43:03 +020020
21int
22test_invoke_esapi(ESYS_CONTEXT * esys_context)
23{
Juergen Reppbb517eb2018-06-15 16:22:28 +020024 TSS2_RC r;
Juergen Repp16d774c2018-06-18 15:49:21 +020025 int failure_return = EXIT_FAILURE;
Juergen Repp731135d2018-03-27 14:43:03 +020026
Juergen Repp920d7cd2018-04-12 10:09:46 +020027 ESYS_TR pcrHandle_handle = 16;
Juergen Repp731135d2018-03-27 14:43:03 +020028 TPML_DIGEST_VALUES digests
29 = {
30 .count = 1,
31 .digests = {
32 {
33 .hashAlg = TPM2_ALG_SHA1,
34 .digest = {
Juergen Repp920d7cd2018-04-12 10:09:46 +020035 .sha1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
36 11, 12, 13, 14, 15, 16, 17, 18, 19}
Juergen Repp731135d2018-03-27 14:43:03 +020037 }
38 },
39 }};
40
Juergen Repp920d7cd2018-04-12 10:09:46 +020041 r = Esys_PCR_Extend(
Juergen Repp731135d2018-03-27 14:43:03 +020042 esys_context,
43 pcrHandle_handle,
Juergen Repp731135d2018-03-27 14:43:03 +020044 ESYS_TR_PASSWORD,
Juergen Repp731135d2018-03-27 14:43:03 +020045 ESYS_TR_NONE,
46 ESYS_TR_NONE,
47 &digests
48 );
49 goto_if_error(r, "Error: PCR_Extend", error);
50
Juergen Repp920d7cd2018-04-12 10:09:46 +020051 TPML_PCR_SELECTION pcrSelectionIn = {
52 .count = 2,
53 .pcrSelections = {
54 { .hash = TPM2_ALG_SHA1,
55 .sizeofSelect = 3,
Schwarzmeier Ricardo (IFAG CCS ESS D SW A)cf4bd782018-05-28 13:59:23 +020056 .pcrSelect = { 01, 00, 03},
Juergen Repp920d7cd2018-04-12 10:09:46 +020057 },
58 { .hash = TPM2_ALG_SHA256,
59 .sizeofSelect = 3,
Schwarzmeier Ricardo (IFAG CCS ESS D SW A)cf4bd782018-05-28 13:59:23 +020060 .pcrSelect = { 01, 00, 03}
Juergen Repp920d7cd2018-04-12 10:09:46 +020061 },
62 }
63 };
64 UINT32 pcrUpdateCounter;
65 TPML_PCR_SELECTION *pcrSelectionOut;
66 TPML_DIGEST *pcrValues;
67
68 r = Esys_PCR_Read(
69 esys_context,
70 ESYS_TR_NONE,
71 ESYS_TR_NONE,
72 ESYS_TR_NONE,
73 &pcrSelectionIn,
74 &pcrUpdateCounter,
75 &pcrSelectionOut,
76 &pcrValues);
77 goto_if_error(r, "Error: PCR_Read", error);
78
79 r = Esys_PCR_Reset(
80 esys_context,
81 pcrHandle_handle,
82 ESYS_TR_PASSWORD,
83 ESYS_TR_NONE,
84 ESYS_TR_NONE);
85
86 goto_if_error(r, "Error: PCR_Reset", error);
87
88 TPM2B_EVENT eventData = { .size = 20,
89 .buffer={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
90 1, 2, 3, 4, 5, 6, 7, 8, 9}};
91 TPML_DIGEST_VALUES *digestsEvent;
92
93 r = Esys_PCR_Event(
94 esys_context,
95 pcrHandle_handle,
96 ESYS_TR_PASSWORD,
97 ESYS_TR_NONE,
98 ESYS_TR_NONE,
99 &eventData,
100 &digestsEvent);
101
102 goto_if_error(r, "Error: PCR_Reset", error);
103
104 TPMI_YES_NO allocationSuccess;
105 UINT32 maxPCR;
106 UINT32 sizeNeeded;
107 UINT32 sizeAvailable;
108
109 r = Esys_PCR_Allocate(
110 esys_context,
111 ESYS_TR_RH_PLATFORM,
112 ESYS_TR_PASSWORD,
113 ESYS_TR_NONE,
114 ESYS_TR_NONE,
115 &pcrSelectionIn,
116 &allocationSuccess,
117 &maxPCR,
118 &sizeNeeded,
119 &sizeAvailable);
120
Juergen Reppafe25af2018-07-10 20:30:50 +0200121 if ((r & ~TPM2_RC_N_MASK) == TPM2_RC_BAD_AUTH) {
Juergen Reppbb517eb2018-06-15 16:22:28 +0200122 /* Platform authorization not possible test will be skipped */
123 LOG_WARNING("Platform authorization not possible.");
Juergen Repp16d774c2018-06-18 15:49:21 +0200124 failure_return = EXIT_SKIP;
Juergen Reppbb517eb2018-06-15 16:22:28 +0200125 }
126
Juergen Repp920d7cd2018-04-12 10:09:46 +0200127 goto_if_error(r, "Error: PCR_Allocate", error);
128
Juergen Reppbb517eb2018-06-15 16:22:28 +0200129 return EXIT_SUCCESS;
Juergen Repp731135d2018-03-27 14:43:03 +0200130
131 error:
Juergen Repp16d774c2018-06-18 15:49:21 +0200132 return failure_return;
Juergen Repp731135d2018-03-27 14:43:03 +0200133
134}