1 //
2 // Copyright (C) 2014 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 #include "trunks/mock_tpm.h"
18
19 #include "trunks/tpm_utility.h"
20
21 using testing::_;
22 using testing::DoAll;
23 using testing::Return;
24 using testing::SetArgPointee;
25
26 namespace trunks {
27
MockTpm()28 MockTpm::MockTpm() : Tpm(nullptr) {
29 ON_CALL(*this, PCR_AllocateSync(_, _, _, _, _, _, _, _))
30 .WillByDefault(DoAll(SetArgPointee<3>(YES),
31 Return(TPM_RC_SUCCESS)));
32 }
33
~MockTpm()34 MockTpm::~MockTpm() {}
35
StartAuthSession(const TPMI_DH_OBJECT & tpm_key,const std::string & tpm_key_name,const TPMI_DH_ENTITY & bind,const std::string & bind_name,const TPM2B_NONCE & nonce_caller,const TPM2B_ENCRYPTED_SECRET & encrypted_salt,const TPM_SE & session_type,const TPMT_SYM_DEF & symmetric,const TPMI_ALG_HASH & auth_hash,AuthorizationDelegate * authorization_delegate,const StartAuthSessionResponse & callback)36 void MockTpm::StartAuthSession(
37 const TPMI_DH_OBJECT& tpm_key,
38 const std::string& tpm_key_name,
39 const TPMI_DH_ENTITY& bind,
40 const std::string& bind_name,
41 const TPM2B_NONCE& nonce_caller,
42 const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
43 const TPM_SE& session_type,
44 const TPMT_SYM_DEF& symmetric,
45 const TPMI_ALG_HASH& auth_hash,
46 AuthorizationDelegate* authorization_delegate,
47 const StartAuthSessionResponse& callback) {
48 StartAuthSessionShort(tpm_key, bind, nonce_caller, encrypted_salt,
49 session_type, symmetric, auth_hash,
50 authorization_delegate, callback);
51 }
52
StartAuthSessionSync(const TPMI_DH_OBJECT & tpm_key,const std::string & tpm_key_name,const TPMI_DH_ENTITY & bind,const std::string & bind_name,const TPM2B_NONCE & nonce_caller,const TPM2B_ENCRYPTED_SECRET & encrypted_salt,const TPM_SE & session_type,const TPMT_SYM_DEF & symmetric,const TPMI_ALG_HASH & auth_hash,TPMI_SH_AUTH_SESSION * session_handle,TPM2B_NONCE * nonce_tpm,AuthorizationDelegate * authorization_delegate)53 TPM_RC MockTpm::StartAuthSessionSync(
54 const TPMI_DH_OBJECT& tpm_key,
55 const std::string& tpm_key_name,
56 const TPMI_DH_ENTITY& bind,
57 const std::string& bind_name,
58 const TPM2B_NONCE& nonce_caller,
59 const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
60 const TPM_SE& session_type,
61 const TPMT_SYM_DEF& symmetric,
62 const TPMI_ALG_HASH& auth_hash,
63 TPMI_SH_AUTH_SESSION* session_handle,
64 TPM2B_NONCE* nonce_tpm,
65 AuthorizationDelegate* authorization_delegate) {
66 return StartAuthSessionSyncShort(tpm_key, bind, nonce_caller,
67 encrypted_salt, session_type, symmetric,
68 auth_hash, session_handle, nonce_tpm,
69 authorization_delegate);
70 }
CreateSync(const TPMI_DH_OBJECT & parent_handle,const std::string & parent_handle_name,const TPM2B_SENSITIVE_CREATE & in_sensitive,const TPM2B_PUBLIC & in_public,const TPM2B_DATA & outside_info,const TPML_PCR_SELECTION & creation_pcr,TPM2B_PRIVATE * out_private,TPM2B_PUBLIC * out_public,TPM2B_CREATION_DATA * creation_data,TPM2B_DIGEST * creation_hash,TPMT_TK_CREATION * creation_ticket,AuthorizationDelegate * authorization_delegate)71 TPM_RC MockTpm::CreateSync(
72 const TPMI_DH_OBJECT& parent_handle,
73 const std::string& parent_handle_name,
74 const TPM2B_SENSITIVE_CREATE& in_sensitive,
75 const TPM2B_PUBLIC& in_public,
76 const TPM2B_DATA& outside_info,
77 const TPML_PCR_SELECTION& creation_pcr,
78 TPM2B_PRIVATE* out_private,
79 TPM2B_PUBLIC* out_public,
80 TPM2B_CREATION_DATA* creation_data,
81 TPM2B_DIGEST* creation_hash,
82 TPMT_TK_CREATION* creation_ticket,
83 AuthorizationDelegate* authorization_delegate) {
84 return CreateSyncShort(parent_handle, in_sensitive, in_public, creation_pcr,
85 out_private, out_public, creation_data,
86 creation_hash, creation_ticket,
87 authorization_delegate);
88 }
CertifyCreationSync(const TPMI_DH_OBJECT & sign_handle,const std::string & sign_handle_name,const TPMI_DH_OBJECT & object_handle,const std::string & object_handle_name,const TPM2B_DATA & qualifying_data,const TPM2B_DIGEST & creation_hash,const TPMT_SIG_SCHEME & in_scheme,const TPMT_TK_CREATION & creation_ticket,TPM2B_ATTEST * certify_info,TPMT_SIGNATURE * signature,AuthorizationDelegate * authorization_delegate)89 TPM_RC MockTpm::CertifyCreationSync(
90 const TPMI_DH_OBJECT& sign_handle,
91 const std::string& sign_handle_name,
92 const TPMI_DH_OBJECT& object_handle,
93 const std::string& object_handle_name,
94 const TPM2B_DATA& qualifying_data,
95 const TPM2B_DIGEST& creation_hash,
96 const TPMT_SIG_SCHEME& in_scheme,
97 const TPMT_TK_CREATION& creation_ticket,
98 TPM2B_ATTEST* certify_info,
99 TPMT_SIGNATURE* signature,
100 AuthorizationDelegate* authorization_delegate) {
101 return CertifyCreationSyncShort(sign_handle, object_handle,
102 qualifying_data, creation_hash, in_scheme,
103 creation_ticket, certify_info, signature,
104 authorization_delegate);
105 }
GetSessionAuditDigestSync(const TPMI_RH_ENDORSEMENT & privacy_admin_handle,const std::string & privacy_admin_handle_name,const TPMI_DH_OBJECT & sign_handle,const std::string & sign_handle_name,const TPMI_SH_HMAC & session_handle,const std::string & session_handle_name,const TPM2B_DATA & qualifying_data,const TPMT_SIG_SCHEME & in_scheme,TPM2B_ATTEST * audit_info,TPMT_SIGNATURE * signature,AuthorizationDelegate * authorization_delegate)106 TPM_RC MockTpm::GetSessionAuditDigestSync(
107 const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
108 const std::string& privacy_admin_handle_name,
109 const TPMI_DH_OBJECT& sign_handle,
110 const std::string& sign_handle_name,
111 const TPMI_SH_HMAC& session_handle,
112 const std::string& session_handle_name,
113 const TPM2B_DATA& qualifying_data,
114 const TPMT_SIG_SCHEME& in_scheme,
115 TPM2B_ATTEST* audit_info,
116 TPMT_SIGNATURE* signature,
117 AuthorizationDelegate* authorization_delegate) {
118 return GetSessionAuditDigestSyncShort(privacy_admin_handle, sign_handle,
119 session_handle, qualifying_data,
120 in_scheme, audit_info, signature,
121 authorization_delegate);
122 }
CommitSync(const TPMI_DH_OBJECT & sign_handle,const std::string & sign_handle_name,const UINT32 & param_size,const TPM2B_ECC_POINT & p1,const TPM2B_SENSITIVE_DATA & s2,const TPM2B_ECC_PARAMETER & y2,UINT32 * param_size_out,TPM2B_ECC_POINT * k,TPM2B_ECC_POINT * l,TPM2B_ECC_POINT * e,UINT16 * counter,AuthorizationDelegate * authorization_delegate)123 TPM_RC MockTpm::CommitSync(
124 const TPMI_DH_OBJECT& sign_handle,
125 const std::string& sign_handle_name,
126 const UINT32& param_size,
127 const TPM2B_ECC_POINT& p1,
128 const TPM2B_SENSITIVE_DATA& s2,
129 const TPM2B_ECC_PARAMETER& y2,
130 UINT32* param_size_out,
131 TPM2B_ECC_POINT* k,
132 TPM2B_ECC_POINT* l,
133 TPM2B_ECC_POINT* e,
134 UINT16* counter,
135 AuthorizationDelegate* authorization_delegate) {
136 return CommitSyncShort(sign_handle, param_size, p1, y2, param_size_out, k,
137 l, e, counter, authorization_delegate);
138 }
PolicySigned(const TPMI_DH_OBJECT & auth_object,const std::string & auth_object_name,const TPMI_SH_POLICY & policy_session,const std::string & policy_session_name,const TPM2B_NONCE & nonce_tpm,const TPM2B_DIGEST & cp_hash_a,const TPM2B_NONCE & policy_ref,const INT32 & expiration,const TPMT_SIGNATURE & auth,AuthorizationDelegate * authorization_delegate,const PolicySignedResponse & callback)139 void MockTpm::PolicySigned(
140 const TPMI_DH_OBJECT& auth_object,
141 const std::string& auth_object_name,
142 const TPMI_SH_POLICY& policy_session,
143 const std::string& policy_session_name,
144 const TPM2B_NONCE& nonce_tpm,
145 const TPM2B_DIGEST& cp_hash_a,
146 const TPM2B_NONCE& policy_ref,
147 const INT32& expiration,
148 const TPMT_SIGNATURE& auth,
149 AuthorizationDelegate* authorization_delegate,
150 const PolicySignedResponse& callback) {
151 PolicySignedShort(auth_object, policy_session, nonce_tpm, cp_hash_a,
152 policy_ref, expiration, auth, authorization_delegate,
153 callback);
154 }
PolicySignedSync(const TPMI_DH_OBJECT & auth_object,const std::string & auth_object_name,const TPMI_SH_POLICY & policy_session,const std::string & policy_session_name,const TPM2B_NONCE & nonce_tpm,const TPM2B_DIGEST & cp_hash_a,const TPM2B_NONCE & policy_ref,const INT32 & expiration,const TPMT_SIGNATURE & auth,TPM2B_TIMEOUT * timeout,TPMT_TK_AUTH * policy_ticket,AuthorizationDelegate * authorization_delegate)155 TPM_RC MockTpm::PolicySignedSync(
156 const TPMI_DH_OBJECT& auth_object,
157 const std::string& auth_object_name,
158 const TPMI_SH_POLICY& policy_session,
159 const std::string& policy_session_name,
160 const TPM2B_NONCE& nonce_tpm,
161 const TPM2B_DIGEST& cp_hash_a,
162 const TPM2B_NONCE& policy_ref,
163 const INT32& expiration,
164 const TPMT_SIGNATURE& auth,
165 TPM2B_TIMEOUT* timeout,
166 TPMT_TK_AUTH* policy_ticket,
167 AuthorizationDelegate* authorization_delegate) {
168 return PolicySignedSyncShort(auth_object, policy_session, nonce_tpm,
169 cp_hash_a, policy_ref, expiration, auth, timeout,
170 policy_ticket, authorization_delegate);
171 }
PolicySecretSync(const TPMI_DH_ENTITY & auth_handle,const std::string & auth_handle_name,const TPMI_SH_POLICY & policy_session,const std::string & policy_session_name,const TPM2B_NONCE & nonce_tpm,const TPM2B_DIGEST & cp_hash_a,const TPM2B_NONCE & policy_ref,const INT32 & expiration,TPM2B_TIMEOUT * timeout,TPMT_TK_AUTH * policy_ticket,AuthorizationDelegate * authorization_delegate)172 TPM_RC MockTpm::PolicySecretSync(
173 const TPMI_DH_ENTITY& auth_handle,
174 const std::string& auth_handle_name,
175 const TPMI_SH_POLICY& policy_session,
176 const std::string& policy_session_name,
177 const TPM2B_NONCE& nonce_tpm,
178 const TPM2B_DIGEST& cp_hash_a,
179 const TPM2B_NONCE& policy_ref,
180 const INT32& expiration,
181 TPM2B_TIMEOUT* timeout,
182 TPMT_TK_AUTH* policy_ticket,
183 AuthorizationDelegate* authorization_delegate) {
184 return PolicySecretSyncShort(auth_handle, policy_session, nonce_tpm,
185 cp_hash_a, policy_ref, expiration, timeout,
186 policy_ticket, authorization_delegate);
187 }
PolicyNV(const TPMI_RH_NV_AUTH & auth_handle,const std::string & auth_handle_name,const TPMI_RH_NV_INDEX & nv_index,const std::string & nv_index_name,const TPMI_SH_POLICY & policy_session,const std::string & policy_session_name,const TPM2B_OPERAND & operand_b,const UINT16 & offset,const TPM_EO & operation,AuthorizationDelegate * authorization_delegate,const PolicyNVResponse & callback)188 void MockTpm::PolicyNV(const TPMI_RH_NV_AUTH& auth_handle,
189 const std::string& auth_handle_name,
190 const TPMI_RH_NV_INDEX& nv_index,
191 const std::string& nv_index_name,
192 const TPMI_SH_POLICY& policy_session,
193 const std::string& policy_session_name,
194 const TPM2B_OPERAND& operand_b,
195 const UINT16& offset,
196 const TPM_EO& operation,
197 AuthorizationDelegate* authorization_delegate,
198 const PolicyNVResponse& callback) {
199 PolicyNVShort(auth_handle, nv_index, policy_session, operand_b, offset,
200 operation, authorization_delegate, callback);
201 }
CreatePrimarySync(const TPMI_RH_HIERARCHY & primary_handle,const std::string & primary_handle_name,const TPM2B_SENSITIVE_CREATE & in_sensitive,const TPM2B_PUBLIC & in_public,const TPM2B_DATA & outside_info,const TPML_PCR_SELECTION & creation_pcr,TPM_HANDLE * object_handle,TPM2B_PUBLIC * out_public,TPM2B_CREATION_DATA * creation_data,TPM2B_DIGEST * creation_hash,TPMT_TK_CREATION * creation_ticket,TPM2B_NAME * name,AuthorizationDelegate * authorization_delegate)202 TPM_RC MockTpm::CreatePrimarySync(
203 const TPMI_RH_HIERARCHY& primary_handle,
204 const std::string& primary_handle_name,
205 const TPM2B_SENSITIVE_CREATE& in_sensitive,
206 const TPM2B_PUBLIC& in_public,
207 const TPM2B_DATA& outside_info,
208 const TPML_PCR_SELECTION& creation_pcr,
209 TPM_HANDLE* object_handle,
210 TPM2B_PUBLIC* out_public,
211 TPM2B_CREATION_DATA* creation_data,
212 TPM2B_DIGEST* creation_hash,
213 TPMT_TK_CREATION* creation_ticket,
214 TPM2B_NAME* name,
215 AuthorizationDelegate* authorization_delegate) {
216 return CreatePrimarySyncShort(primary_handle, in_public, creation_pcr,
217 object_handle, out_public, creation_data,
218 creation_hash, creation_ticket, name,
219 authorization_delegate);
220 }
NV_Certify(const TPMI_DH_OBJECT & sign_handle,const std::string & sign_handle_name,const TPMI_RH_NV_AUTH & auth_handle,const std::string & auth_handle_name,const TPMI_RH_NV_INDEX & nv_index,const std::string & nv_index_name,const TPM2B_DATA & qualifying_data,const TPMT_SIG_SCHEME & in_scheme,const UINT16 & size,const UINT16 & offset,AuthorizationDelegate * authorization_delegate,const NV_CertifyResponse & callback)221 void MockTpm::NV_Certify(const TPMI_DH_OBJECT& sign_handle,
222 const std::string& sign_handle_name,
223 const TPMI_RH_NV_AUTH& auth_handle,
224 const std::string& auth_handle_name,
225 const TPMI_RH_NV_INDEX& nv_index,
226 const std::string& nv_index_name,
227 const TPM2B_DATA& qualifying_data,
228 const TPMT_SIG_SCHEME& in_scheme,
229 const UINT16& size,
230 const UINT16& offset,
231 AuthorizationDelegate* authorization_delegate,
232 const NV_CertifyResponse& callback) {
233 NV_CertifyShort(sign_handle, auth_handle, nv_index, qualifying_data,
234 in_scheme, size, offset, authorization_delegate, callback);
235 }
NV_CertifySync(const TPMI_DH_OBJECT & sign_handle,const std::string & sign_handle_name,const TPMI_RH_NV_AUTH & auth_handle,const std::string & auth_handle_name,const TPMI_RH_NV_INDEX & nv_index,const std::string & nv_index_name,const TPM2B_DATA & qualifying_data,const TPMT_SIG_SCHEME & in_scheme,const UINT16 & size,const UINT16 & offset,TPM2B_ATTEST * certify_info,TPMT_SIGNATURE * signature,AuthorizationDelegate * authorization_delegate)236 TPM_RC MockTpm::NV_CertifySync(
237 const TPMI_DH_OBJECT& sign_handle,
238 const std::string& sign_handle_name,
239 const TPMI_RH_NV_AUTH& auth_handle,
240 const std::string& auth_handle_name,
241 const TPMI_RH_NV_INDEX& nv_index,
242 const std::string& nv_index_name,
243 const TPM2B_DATA& qualifying_data,
244 const TPMT_SIG_SCHEME& in_scheme,
245 const UINT16& size,
246 const UINT16& offset,
247 TPM2B_ATTEST* certify_info,
248 TPMT_SIGNATURE* signature,
249 AuthorizationDelegate* authorization_delegate) {
250 return NV_CertifySyncShort(sign_handle, auth_handle, nv_index,
251 qualifying_data, in_scheme, size, offset,
252 certify_info, signature, authorization_delegate);
253 }
254
255 } // namespace trunks
256