blob: 63a9959055b14ae8a0e96ba50109e674fa75833d [file] [log] [blame]
Tadeusz Strukcbde8662018-03-08 15:11:47 -08001/*
2 * Copyright (c) 2018, Intel Corporation
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
18 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24 * THE POSSIBILITY OF SUCH DAMAGE.
25 */
Philip Tricca8ffd3c42018-03-09 16:27:24 -080026#include "tss2_tcti_mssim.h"
Tadeusz Strukcbde8662018-03-08 15:11:47 -080027#define LOGMODULE test
28#include "log/log.h"
29#include "sapi-util.h"
30#include "test.h"
31
32
33/* Test copmmand cancel functionality.
34 * Create a primary object, which should pass. Then send a cancel on platform
35 * command and try to create a primary object again - this should fial with
36 * TPM_CANCEL rc. Then send a Cancel off command and try to create the object
37 * for the third time. This time it should pass again. */
38
39int
40test_invoke (TSS2_SYS_CONTEXT *sapi_context)
41{
42 TPM2_HANDLE handle = 0;
43 TSS2_TCTI_CONTEXT *tcti_context;
44 TSS2_RC rc;
45 TPM2B_SENSITIVE_CREATE in_sensitive = { 0 };
46 TPM2B_PUBLIC in_public = { 0 };
47 TPM2B_DATA outside_info = { 0 };
48 TPML_PCR_SELECTION creation_pcr = { 0 };
49 TPM2B_PUBLIC out_public = { 0 };
50 TPM2B_CREATION_DATA creation_data = { 0 };
51 TPM2B_DIGEST creation_hash = TPM2B_DIGEST_INIT;
52 TPMT_TK_CREATION creation_ticket = { 0 };
53 TPM2B_NAME name = TPM2B_NAME_INIT;
54 TSS2L_SYS_AUTH_COMMAND sessions_cmd = {
55 .auths = {{ .sessionHandle = TPM2_RS_PW }},
56 .count = 1
57 };
58 TSS2L_SYS_AUTH_RESPONSE sessions_rsp = { 0 };
59
60 in_public.publicArea.type = TPM2_ALG_RSA;
61 in_public.publicArea.nameAlg = TPM2_ALG_SHA256;
62 in_public.publicArea.objectAttributes |= TPMA_OBJECT_RESTRICTED;
63 in_public.publicArea.objectAttributes |= TPMA_OBJECT_USERWITHAUTH;
64 in_public.publicArea.objectAttributes |= TPMA_OBJECT_DECRYPT;
65 in_public.publicArea.objectAttributes |= TPMA_OBJECT_FIXEDTPM;
66 in_public.publicArea.objectAttributes |= TPMA_OBJECT_FIXEDPARENT;
67 in_public.publicArea.objectAttributes |= TPMA_OBJECT_SENSITIVEDATAORIGIN;
68 in_public.publicArea.parameters.rsaDetail.symmetric.algorithm = TPM2_ALG_AES;
69 in_public.publicArea.parameters.rsaDetail.symmetric.keyBits.aes = 128;
70 in_public.publicArea.parameters.rsaDetail.symmetric.mode.aes = TPM2_ALG_CFB;
71 in_public.publicArea.parameters.rsaDetail.scheme.scheme = TPM2_ALG_NULL;
72 in_public.publicArea.parameters.rsaDetail.keyBits = 2048;
73
74 rc = Tss2_Sys_GetTctiContext(sapi_context, &tcti_context);
75 if (rc != TPM2_RC_SUCCESS) {
76 LOG_ERROR("GetTctiContext FAILED! Response Code : 0x%x", rc);
77 exit(1);
78 }
79 LOG_DEBUG("GetTctiContext SUCCESS!");
80
81 rc = create_primary_rsa_2048_aes_128_cfb (sapi_context, &handle);
82 if (rc != TPM2_RC_SUCCESS) {
83 LOG_ERROR("CreatePrimary FAILED! Response Code : 0x%x", rc);
84 exit(1);
85 }
86 LOG_DEBUG("create_primary SUCCESS!");
87
88 rc = Tss2_Sys_FlushContext(sapi_context, handle);
89 if (rc != TPM2_RC_SUCCESS) {
90 LOG_ERROR("FlushContext FAILED! Response Code : 0x%x", rc);
91 exit(1);
92 }
93 LOG_DEBUG("FlushContext SUCCESS!");
94
Tadeusz Struk105c1a02018-03-09 11:10:36 -080095 rc = tcti_platform_command(tcti_context, MS_SIM_CANCEL_ON);
Tadeusz Strukcbde8662018-03-08 15:11:47 -080096 if (rc != TPM2_RC_SUCCESS) {
Tadeusz Struk105c1a02018-03-09 11:10:36 -080097 LOG_ERROR("tcti_platform_command FAILED! Response Code : 0x%x", rc);
Tadeusz Strukcbde8662018-03-08 15:11:47 -080098 exit(1);
99 }
Tadeusz Struk105c1a02018-03-09 11:10:36 -0800100 LOG_DEBUG("tcti_platform_command CANCEL_ON SUCCESS!");
Tadeusz Strukcbde8662018-03-08 15:11:47 -0800101
102 rc = Tss2_Sys_CreatePrimary (sapi_context,
103 TPM2_RH_OWNER,
104 &sessions_cmd,
105 &in_sensitive,
106 &in_public,
107 &outside_info,
108 &creation_pcr,
109 &handle,
110 &out_public,
111 &creation_data,
112 &creation_hash,
113 &creation_ticket,
114 &name,
115 &sessions_rsp);
116 if (rc != TPM2_RC_CANCELED) {
117 LOG_DEBUG("CreatePrimary returned unexpected rc 0x%x, expected 0x%x", rc,
118 TPM2_RC_CANCELED);
119 exit(1);
120 }
121 LOG_DEBUG("create_primary returned rc cancelled!");
122
Tadeusz Struk105c1a02018-03-09 11:10:36 -0800123 rc = tcti_platform_command(tcti_context, MS_SIM_CANCEL_OFF);
Tadeusz Strukcbde8662018-03-08 15:11:47 -0800124 if (rc != TPM2_RC_SUCCESS) {
125 LOG_ERROR("FlushContext FAILED! Response Code : 0x%x", rc);
126 exit(1);
127 }
Tadeusz Struk105c1a02018-03-09 11:10:36 -0800128 LOG_DEBUG("tcti_platform_command CANCEL_OFF SUCCESS!");
Tadeusz Strukcbde8662018-03-08 15:11:47 -0800129
130 rc = create_primary_rsa_2048_aes_128_cfb(sapi_context, &handle);
131 if (rc != TPM2_RC_SUCCESS) {
132 LOG_ERROR("create_primary FAILED! Response Code : 0x%x", rc);
133 exit(1);
134 }
135 LOG_DEBUG("create_primary SUCCESS!");
136
137 rc = Tss2_Sys_FlushContext(sapi_context, handle);
138 if (rc != TPM2_RC_SUCCESS) {
139 LOG_ERROR("FlushContext FAILED! Response Code : 0x%x", rc);
140 exit(1);
141 }
142 LOG_DEBUG("FlushContext SUCCESS!");
143 return 0;
144}