blob: ffd0b4de69d60a61e39505ec30092fdc73d8e7f3 [file] [log] [blame]
Peter Huewed5a36f62018-06-12 00:59:26 +02001/* SPDX-License-Identifier: BSD-2 */
Juergen Reppecd44eb2018-02-23 13:41:16 +01002/*******************************************************************************
3 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG All
4 * rights reserved.
Juergen Reppecd44eb2018-02-23 13:41:16 +01005 *******************************************************************************/
6
Philip Tricca910f17c2018-03-15 12:38:37 -07007#include "tss2_esys.h"
8
Andreas Fuchsc60541b2018-03-19 16:54:24 +01009#include "esys_iutil.h"
Juergen Reppecd44eb2018-02-23 13:41:16 +010010#define LOGMODULE test
Philip Triccaa7c51ce2018-03-10 18:28:25 -080011#include "util/log.h"
Juergen Reppecd44eb2018-02-23 13:41:16 +010012
13/*
14 * This test is intended to test the quote command with password
15 * authentication.
16 * We create a RSA primary signing key which will be used
17 * for signing.
18 */
19
20int
21test_invoke_esapi(ESYS_CONTEXT * esys_context)
22{
23 uint32_t r = 0;
24
25 TPM2B_AUTH authValuePrimary = {
26 .size = 5,
27 .buffer = {1, 2, 3, 4, 5}
28 };
29
30 TPM2B_SENSITIVE_CREATE inSensitivePrimary = {
31 .size = 4,
32 .sensitive = {
33 .userAuth = {
34 .size = 0,
35 .buffer = {0},
36 },
37 .data = {
38 .size = 0,
39 .buffer = {0},
40 },
41 },
42 };
43
44 inSensitivePrimary.sensitive.userAuth = authValuePrimary;
45
46 TPM2B_PUBLIC inPublic = {
47 .size = 0,
48 .publicArea = {
49 .type = TPM2_ALG_RSA,
50 .nameAlg = TPM2_ALG_SHA1,
51 .objectAttributes = (
52 TPMA_OBJECT_USERWITHAUTH |
53 TPMA_OBJECT_RESTRICTED |
54 TPMA_OBJECT_SIGN_ENCRYPT |
55 TPMA_OBJECT_FIXEDTPM |
56 TPMA_OBJECT_FIXEDPARENT |
57 TPMA_OBJECT_SENSITIVEDATAORIGIN
58 ),
59 .authPolicy = {
60 .size = 0,
61 },
62 .parameters.rsaDetail = {
63 .symmetric = {
64 .algorithm = TPM2_ALG_NULL,
65 .keyBits.aes = 128,
Juergen Reppb8afa372018-06-12 17:25:22 +020066 .mode.aes = TPM2_ALG_CFB,
Juergen Reppecd44eb2018-02-23 13:41:16 +010067 },
68 .scheme = {
69 .scheme = TPM2_ALG_RSASSA,
70 .details = { .rsassa = { .hashAlg = TPM2_ALG_SHA1 }},
71
72 },
73 .keyBits = 2048,
74 .exponent = 0,
75 },
76 .unique.rsa = {
77 .size = 0,
78 .buffer = {},
79 },
80 },
81 };
82
83 TPM2B_AUTH authValue = {
84 .size = 0,
85 .buffer = {}
86 };
87
88
89 TPM2B_DATA outsideInfo = {
90 .size = 0,
91 .buffer = {},
92 };
93
94
95 TPML_PCR_SELECTION creationPCR = {
96 .count = 0,
97 };
98
99 LOG_INFO("\nRSA key will be created.");
100
101 r = Esys_TR_SetAuth(esys_context, ESYS_TR_RH_OWNER, &authValue);
102 goto_if_error(r, "Error: TR_SetAuth", error);
103
104 ESYS_TR primaryHandle_handle;
105 RSRC_NODE_T *primaryHandle_node;
106 TPM2B_PUBLIC *outPublic;
107 TPM2B_CREATION_DATA *creationData;
108 TPM2B_DIGEST *creationHash;
109 TPMT_TK_CREATION *creationTicket;
110
111 r = Esys_CreatePrimary(esys_context, ESYS_TR_RH_OWNER, ESYS_TR_PASSWORD,
112 ESYS_TR_NONE, ESYS_TR_NONE, &inSensitivePrimary,
113 &inPublic, &outsideInfo, &creationPCR,
114 &primaryHandle_handle, &outPublic, &creationData,
115 &creationHash, &creationTicket);
116 goto_if_error(r, "Error esys create primary", error);
117
118 r = esys_GetResourceObject(esys_context, primaryHandle_handle,
119 &primaryHandle_node);
120 goto_if_error(r, "Error Esys GetResourceObject", error);
121
122 LOG_INFO("Created Primary with handle 0x%08x...",
123 primaryHandle_node->rsrc.handle);
124
125 r = Esys_TR_SetAuth(esys_context, primaryHandle_handle,
126 &authValuePrimary);
127 goto_if_error(r, "Error: TR_SetAuth", error);
128
129 TPM2B_DATA qualifyingData = { .size = 0, .buffer = {}};
130 TPMT_SIG_SCHEME sig_scheme = { .scheme = TPM2_ALG_NULL };
131
132 TPML_PCR_SELECTION pcr_selection = {
133 .count = 2,
134 .pcrSelections = {
135 {
136 .hash = TPM2_ALG_SHA1,
137 .sizeofSelect = 3,
138 .pcrSelect = { 0,4,0 } },
139 {
140 .hash = TPM2_ALG_SHA256,
141 .sizeofSelect = 3,
142 .pcrSelect = { 0,4,0 } },
143 }};
144
145 TPM2B_ATTEST *attest;
146 TPMT_SIGNATURE *signature;
147
148 r = Esys_Quote(esys_context, primaryHandle_handle,
149 ESYS_TR_PASSWORD, ESYS_TR_NONE, ESYS_TR_NONE,
150 &qualifyingData, &sig_scheme, &pcr_selection,
151 &attest, &signature);
dantpma13b9582018-04-06 15:28:22 -0700152 goto_if_error(r, "Error Esys Quote", error);
Juergen Reppecd44eb2018-02-23 13:41:16 +0100153
Andreas Fuchsfd6f9652018-03-28 15:32:00 +0200154 r = Esys_FlushContext(esys_context, primaryHandle_handle);
155 goto_if_error(r, "Error: FlushContext", error);
156
Juergen Reppecd44eb2018-02-23 13:41:16 +0100157 return 0;
158
159 error:
160 return 1;
161}