• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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