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/trunks_factory_for_test.h"
18 
19 #include <gmock/gmock.h>
20 
21 #include "trunks/authorization_delegate.h"
22 #include "trunks/blob_parser.h"
23 #include "trunks/hmac_session.h"
24 #include "trunks/mock_blob_parser.h"
25 #include "trunks/mock_hmac_session.h"
26 #include "trunks/mock_policy_session.h"
27 #include "trunks/mock_session_manager.h"
28 #include "trunks/mock_tpm.h"
29 #include "trunks/mock_tpm_state.h"
30 #include "trunks/mock_tpm_utility.h"
31 #include "trunks/policy_session.h"
32 #include "trunks/session_manager.h"
33 #include "trunks/tpm_generated.h"
34 #include "trunks/tpm_state.h"
35 #include "trunks/tpm_utility.h"
36 
37 using testing::NiceMock;
38 
39 namespace trunks {
40 
41 // Forwards all calls to a target instance.
42 class TpmStateForwarder : public TpmState {
43  public:
TpmStateForwarder(TpmState * target)44   explicit TpmStateForwarder(TpmState* target) : target_(target) {}
45   ~TpmStateForwarder() override = default;
46 
Initialize()47   TPM_RC Initialize() override {
48     return target_->Initialize();
49   }
50 
IsOwnerPasswordSet()51   bool IsOwnerPasswordSet() override {
52     return target_->IsOwnerPasswordSet();
53   }
54 
IsEndorsementPasswordSet()55   bool IsEndorsementPasswordSet() override {
56     return target_->IsEndorsementPasswordSet();
57   }
58 
IsLockoutPasswordSet()59   bool IsLockoutPasswordSet() override {
60     return target_->IsLockoutPasswordSet();
61   }
62 
IsOwned()63   bool IsOwned() override {
64     return target_->IsOwned();
65   }
66 
IsInLockout()67   bool IsInLockout() override {
68     return target_->IsInLockout();
69   }
70 
IsPlatformHierarchyEnabled()71   bool IsPlatformHierarchyEnabled() override {
72     return target_->IsPlatformHierarchyEnabled();
73   }
74 
IsStorageHierarchyEnabled()75   bool IsStorageHierarchyEnabled() override {
76     return target_->IsStorageHierarchyEnabled();
77   }
78 
IsEndorsementHierarchyEnabled()79   bool IsEndorsementHierarchyEnabled() override {
80     return target_->IsEndorsementHierarchyEnabled();
81   }
82 
IsEnabled()83   bool IsEnabled() override {
84     return target_->IsEnabled();
85   }
86 
WasShutdownOrderly()87   bool WasShutdownOrderly() override {
88     return target_->WasShutdownOrderly();
89   }
90 
IsRSASupported()91   bool IsRSASupported() override {
92     return target_->IsRSASupported();
93   }
94 
IsECCSupported()95   bool IsECCSupported() override {
96     return target_->IsECCSupported();
97   }
98 
GetLockoutCounter()99   uint32_t GetLockoutCounter() override {
100     return target_->GetLockoutCounter();
101   }
102 
GetLockoutThreshold()103   uint32_t GetLockoutThreshold() override {
104     return target_->GetLockoutThreshold();
105   }
106 
GetLockoutInterval()107   uint32_t GetLockoutInterval() override {
108     return target_->GetLockoutInterval();
109   }
110 
GetLockoutRecovery()111   uint32_t GetLockoutRecovery() override {
112     return target_->GetLockoutRecovery();
113   }
114 
115  private:
116   TpmState* target_;
117 };
118 
119 // Forwards all calls to a target instance.
120 class TpmUtilityForwarder : public TpmUtility {
121  public:
TpmUtilityForwarder(TpmUtility * target)122   explicit TpmUtilityForwarder(TpmUtility* target) : target_(target) {}
123   ~TpmUtilityForwarder() override = default;
124 
Startup()125   TPM_RC Startup() override {
126     return target_->Startup();
127   }
128 
Clear()129   TPM_RC Clear() override {
130     return target_->Clear();
131   }
132 
Shutdown()133   void Shutdown() override {
134     return target_->Shutdown();
135   }
136 
InitializeTpm()137   TPM_RC InitializeTpm() override {
138     return target_->InitializeTpm();
139   }
140 
AllocatePCR(const std::string & platform_password)141   TPM_RC AllocatePCR(const std::string& platform_password) override {
142     return target_->AllocatePCR(platform_password);
143   }
144 
TakeOwnership(const std::string & owner_password,const std::string & endorsement_password,const std::string & lockout_password)145   TPM_RC TakeOwnership(const std::string& owner_password,
146                        const std::string& endorsement_password,
147                        const std::string& lockout_password) override {
148     return target_->TakeOwnership(owner_password,
149                                   endorsement_password,
150                                   lockout_password);
151   }
152 
StirRandom(const std::string & entropy_data,AuthorizationDelegate * delegate)153   TPM_RC StirRandom(const std::string& entropy_data,
154                     AuthorizationDelegate* delegate) override {
155     return target_->StirRandom(entropy_data, delegate);
156   }
157 
GenerateRandom(size_t num_bytes,AuthorizationDelegate * delegate,std::string * random_data)158   TPM_RC GenerateRandom(size_t num_bytes,
159                         AuthorizationDelegate* delegate,
160                         std::string* random_data) override {
161     return target_->GenerateRandom(num_bytes, delegate, random_data);
162   }
163 
ExtendPCR(int pcr_index,const std::string & extend_data,AuthorizationDelegate * delegate)164   TPM_RC ExtendPCR(int pcr_index,
165                    const std::string& extend_data,
166                    AuthorizationDelegate* delegate) override {
167     return target_->ExtendPCR(pcr_index, extend_data, delegate);
168   }
169 
ReadPCR(int pcr_index,std::string * pcr_value)170   TPM_RC ReadPCR(int pcr_index, std::string* pcr_value) override {
171     return target_->ReadPCR(pcr_index, pcr_value);
172   }
173 
AsymmetricEncrypt(TPM_HANDLE key_handle,TPM_ALG_ID scheme,TPM_ALG_ID hash_alg,const std::string & plaintext,AuthorizationDelegate * delegate,std::string * ciphertext)174   TPM_RC AsymmetricEncrypt(TPM_HANDLE key_handle,
175                            TPM_ALG_ID scheme,
176                            TPM_ALG_ID hash_alg,
177                            const std::string& plaintext,
178                            AuthorizationDelegate* delegate,
179                            std::string* ciphertext) override {
180     return target_->AsymmetricEncrypt(key_handle,
181                                       scheme,
182                                       hash_alg,
183                                       plaintext,
184                                       delegate,
185                                       ciphertext);
186   }
187 
AsymmetricDecrypt(TPM_HANDLE key_handle,TPM_ALG_ID scheme,TPM_ALG_ID hash_alg,const std::string & ciphertext,AuthorizationDelegate * delegate,std::string * plaintext)188   TPM_RC AsymmetricDecrypt(TPM_HANDLE key_handle,
189                            TPM_ALG_ID scheme,
190                            TPM_ALG_ID hash_alg,
191                            const std::string& ciphertext,
192                            AuthorizationDelegate* delegate,
193                            std::string* plaintext) override {
194     return target_->AsymmetricDecrypt(key_handle,
195                                       scheme,
196                                       hash_alg,
197                                       ciphertext,
198                                       delegate,
199                                       plaintext);
200   }
201 
Sign(TPM_HANDLE key_handle,TPM_ALG_ID scheme,TPM_ALG_ID hash_alg,const std::string & plaintext,AuthorizationDelegate * delegate,std::string * signature)202   TPM_RC Sign(TPM_HANDLE key_handle,
203               TPM_ALG_ID scheme,
204               TPM_ALG_ID hash_alg,
205               const std::string& plaintext,
206               AuthorizationDelegate* delegate,
207               std::string* signature) override {
208     return target_->Sign(key_handle,
209                          scheme,
210                          hash_alg,
211                          plaintext,
212                          delegate,
213                          signature);
214   }
215 
Verify(TPM_HANDLE key_handle,TPM_ALG_ID scheme,TPM_ALG_ID hash_alg,const std::string & plaintext,const std::string & signature,AuthorizationDelegate * delegate)216   TPM_RC Verify(TPM_HANDLE key_handle,
217                 TPM_ALG_ID scheme,
218                 TPM_ALG_ID hash_alg,
219                 const std::string& plaintext,
220                 const std::string& signature,
221                 AuthorizationDelegate* delegate) override {
222     return target_->Verify(key_handle, scheme, hash_alg,
223                            plaintext, signature, delegate);
224   }
225 
CertifyCreation(TPM_HANDLE key_handle,const std::string & creation_blob)226   TPM_RC CertifyCreation(TPM_HANDLE key_handle,
227                          const std::string& creation_blob) override {
228     return target_->CertifyCreation(key_handle, creation_blob);
229   }
230 
ChangeKeyAuthorizationData(TPM_HANDLE key_handle,const std::string & new_password,AuthorizationDelegate * delegate,std::string * key_blob)231   TPM_RC ChangeKeyAuthorizationData(TPM_HANDLE key_handle,
232                                     const std::string& new_password,
233                                     AuthorizationDelegate* delegate,
234                                     std::string* key_blob) override {
235     return target_->ChangeKeyAuthorizationData(key_handle,
236                                                new_password,
237                                                delegate,
238                                                key_blob);
239   }
240 
ImportRSAKey(AsymmetricKeyUsage key_type,const std::string & modulus,uint32_t public_exponent,const std::string & prime_factor,const std::string & password,AuthorizationDelegate * delegate,std::string * key_blob)241   TPM_RC ImportRSAKey(AsymmetricKeyUsage key_type,
242                       const std::string& modulus,
243                       uint32_t public_exponent,
244                       const std::string& prime_factor,
245                       const std::string& password,
246                       AuthorizationDelegate* delegate,
247                       std::string* key_blob) override {
248     return target_->ImportRSAKey(key_type, modulus, public_exponent,
249                                  prime_factor, password, delegate, key_blob);
250   }
251 
CreateRSAKeyPair(AsymmetricKeyUsage key_type,int modulus_bits,uint32_t public_exponent,const std::string & password,const std::string & policy_digest,bool use_only_policy_authorization,int creation_pcr_index,AuthorizationDelegate * delegate,std::string * key_blob,std::string * creation_blob)252   TPM_RC CreateRSAKeyPair(AsymmetricKeyUsage key_type,
253                           int modulus_bits,
254                           uint32_t public_exponent,
255                           const std::string& password,
256                           const std::string& policy_digest,
257                           bool use_only_policy_authorization,
258                           int creation_pcr_index,
259                           AuthorizationDelegate* delegate,
260                           std::string* key_blob,
261                           std::string* creation_blob) override {
262     return target_->CreateRSAKeyPair(key_type, modulus_bits, public_exponent,
263                                      password, policy_digest,
264                                      use_only_policy_authorization,
265                                      creation_pcr_index,
266                                      delegate, key_blob, creation_blob);
267   }
268 
LoadKey(const std::string & key_blob,AuthorizationDelegate * delegate,TPM_HANDLE * key_handle)269   TPM_RC LoadKey(const std::string& key_blob,
270                  AuthorizationDelegate* delegate,
271                  TPM_HANDLE* key_handle) override {
272     return target_->LoadKey(key_blob, delegate, key_handle);
273   }
274 
GetKeyName(TPM_HANDLE handle,std::string * name)275   TPM_RC GetKeyName(TPM_HANDLE handle, std::string* name) override {
276     return target_->GetKeyName(handle, name);
277   }
278 
GetKeyPublicArea(TPM_HANDLE handle,TPMT_PUBLIC * public_data)279   TPM_RC GetKeyPublicArea(TPM_HANDLE handle,
280                           TPMT_PUBLIC* public_data) override {
281     return target_->GetKeyPublicArea(handle, public_data);
282   }
283 
SealData(const std::string & data_to_seal,const std::string & policy_digest,AuthorizationDelegate * delegate,std::string * sealed_data)284   TPM_RC SealData(const std::string& data_to_seal,
285                   const std::string& policy_digest,
286                   AuthorizationDelegate* delegate,
287                   std::string* sealed_data) override {
288     return target_->SealData(data_to_seal, policy_digest,
289                              delegate, sealed_data);
290   }
291 
UnsealData(const std::string & sealed_data,AuthorizationDelegate * delegate,std::string * unsealed_data)292   TPM_RC UnsealData(const std::string& sealed_data,
293                     AuthorizationDelegate* delegate,
294                     std::string* unsealed_data) override {
295     return target_->UnsealData(sealed_data, delegate, unsealed_data);
296   }
297 
StartSession(HmacSession * session)298   TPM_RC StartSession(HmacSession* session) override {
299     return target_->StartSession(session);
300   }
301 
GetPolicyDigestForPcrValue(int pcr_index,const std::string & pcr_value,std::string * policy_digest)302   TPM_RC GetPolicyDigestForPcrValue(int pcr_index,
303                                     const std::string& pcr_value,
304                                     std::string* policy_digest) override {
305     return target_->GetPolicyDigestForPcrValue(pcr_index, pcr_value,
306                                                policy_digest);
307   }
308 
DefineNVSpace(uint32_t index,size_t num_bytes,AuthorizationDelegate * delegate)309   TPM_RC DefineNVSpace(uint32_t index,
310                        size_t num_bytes,
311                        AuthorizationDelegate* delegate) override {
312     return target_->DefineNVSpace(index, num_bytes, delegate);
313   }
314 
DestroyNVSpace(uint32_t index,AuthorizationDelegate * delegate)315   TPM_RC DestroyNVSpace(uint32_t index,
316                         AuthorizationDelegate* delegate) override {
317     return target_->DestroyNVSpace(index, delegate);
318   }
319 
LockNVSpace(uint32_t index,AuthorizationDelegate * delegate)320   TPM_RC LockNVSpace(uint32_t index,
321                      AuthorizationDelegate* delegate) override {
322     return target_->LockNVSpace(index, delegate);
323   }
324 
WriteNVSpace(uint32_t index,uint32_t offset,const std::string & nvram_data,AuthorizationDelegate * delegate)325   TPM_RC WriteNVSpace(uint32_t index,
326                       uint32_t offset,
327                       const std::string& nvram_data,
328                       AuthorizationDelegate* delegate) override {
329     return target_->WriteNVSpace(index, offset, nvram_data, delegate);
330   }
331 
ReadNVSpace(uint32_t index,uint32_t offset,size_t num_bytes,std::string * nvram_data,AuthorizationDelegate * delegate)332   TPM_RC ReadNVSpace(uint32_t index,
333                      uint32_t offset,
334                      size_t num_bytes,
335                      std::string* nvram_data,
336                      AuthorizationDelegate* delegate) override {
337     return target_->ReadNVSpace(index, offset, num_bytes, nvram_data, delegate);
338   }
339 
GetNVSpaceName(uint32_t index,std::string * name)340   TPM_RC GetNVSpaceName(uint32_t index, std::string* name) override {
341     return target_->GetNVSpaceName(index, name);
342   }
343 
GetNVSpacePublicArea(uint32_t index,TPMS_NV_PUBLIC * public_data)344   TPM_RC GetNVSpacePublicArea(uint32_t index,
345                               TPMS_NV_PUBLIC* public_data) override {
346     return target_->GetNVSpacePublicArea(index, public_data);
347   }
348 
349  private:
350   TpmUtility* target_;
351 };
352 
353 // Forwards all calls to a target instance.
354 class AuthorizationDelegateForwarder : public AuthorizationDelegate {
355  public:
AuthorizationDelegateForwarder(AuthorizationDelegate * target)356   explicit AuthorizationDelegateForwarder(AuthorizationDelegate* target)
357       : target_(target) {}
358   ~AuthorizationDelegateForwarder() override = default;
359 
GetCommandAuthorization(const std::string & command_hash,bool is_command_parameter_encryption_possible,bool is_response_parameter_encryption_possible,std::string * authorization)360   bool GetCommandAuthorization(const std::string& command_hash,
361                                bool is_command_parameter_encryption_possible,
362                                bool is_response_parameter_encryption_possible,
363                                std::string* authorization) override {
364     return target_->GetCommandAuthorization(
365         command_hash,
366         is_command_parameter_encryption_possible,
367         is_response_parameter_encryption_possible,
368         authorization);
369   }
370 
CheckResponseAuthorization(const std::string & response_hash,const std::string & authorization)371   bool CheckResponseAuthorization(const std::string& response_hash,
372                                   const std::string& authorization) override {
373     return target_->CheckResponseAuthorization(response_hash, authorization);
374   }
375 
EncryptCommandParameter(std::string * parameter)376   bool EncryptCommandParameter(std::string* parameter) override {
377     return target_->EncryptCommandParameter(parameter);
378   }
379 
DecryptResponseParameter(std::string * parameter)380   bool DecryptResponseParameter(std::string* parameter) override {
381     return target_->DecryptResponseParameter(parameter);
382   }
383 
384  private:
385   AuthorizationDelegate* target_;
386 };
387 
388 // Forwards all calls to a target instance.
389 class SessionManagerForwarder : public SessionManager {
390  public:
SessionManagerForwarder(SessionManager * target)391   explicit SessionManagerForwarder(SessionManager* target) : target_(target) {}
~SessionManagerForwarder()392   ~SessionManagerForwarder() override {}
393 
GetSessionHandle() const394   TPM_HANDLE GetSessionHandle() const override {
395     return target_->GetSessionHandle();
396   }
397 
CloseSession()398   void CloseSession() override {
399     return target_->CloseSession();
400   }
401 
StartSession(TPM_SE session_type,TPMI_DH_ENTITY bind_entity,const std::string & bind_authorization_value,bool enable_encryption,HmacAuthorizationDelegate * delegate)402   TPM_RC StartSession(TPM_SE session_type, TPMI_DH_ENTITY bind_entity,
403                       const std::string& bind_authorization_value,
404                       bool enable_encryption,
405                       HmacAuthorizationDelegate* delegate) override {
406     return target_->StartSession(session_type, bind_entity,
407                                  bind_authorization_value,
408                                  enable_encryption, delegate);
409   }
410 
411  private:
412   SessionManager* target_;
413 };
414 
415 // Forwards all calls to a target instance.
416 class HmacSessionForwarder : public HmacSession {
417  public:
HmacSessionForwarder(HmacSession * target)418   explicit HmacSessionForwarder(HmacSession* target): target_(target) {}
419   ~HmacSessionForwarder() override = default;
420 
GetDelegate()421   AuthorizationDelegate* GetDelegate() override {
422     return target_->GetDelegate();
423   }
424 
StartBoundSession(TPMI_DH_ENTITY bind_entity,const std::string & bind_authorization_value,bool enable_encryption)425   TPM_RC StartBoundSession(TPMI_DH_ENTITY bind_entity,
426                            const std::string& bind_authorization_value,
427                            bool enable_encryption) override {
428     return target_->StartBoundSession(bind_entity,
429                                       bind_authorization_value,
430                                       enable_encryption);
431   }
432 
StartUnboundSession(bool enable_encryption)433   TPM_RC StartUnboundSession(bool enable_encryption) override {
434     return target_->StartUnboundSession(enable_encryption);
435   }
436 
SetEntityAuthorizationValue(const std::string & value)437   void SetEntityAuthorizationValue(const std::string& value) override {
438     return target_->SetEntityAuthorizationValue(value);
439   }
440 
SetFutureAuthorizationValue(const std::string & value)441   void SetFutureAuthorizationValue(const std::string& value) override {
442     return target_->SetFutureAuthorizationValue(value);
443   }
444 
445  private:
446   HmacSession* target_;
447 };
448 
449 
450 // Forwards all calls to a target instance.
451 class PolicySessionForwarder : public PolicySession {
452  public:
PolicySessionForwarder(PolicySession * target)453   explicit PolicySessionForwarder(PolicySession* target): target_(target) {}
454   ~PolicySessionForwarder() override = default;
455 
GetDelegate()456   AuthorizationDelegate* GetDelegate() override {
457     return target_->GetDelegate();
458   }
459 
StartBoundSession(TPMI_DH_ENTITY bind_entity,const std::string & bind_authorization_value,bool enable_encryption)460   TPM_RC StartBoundSession(TPMI_DH_ENTITY bind_entity,
461                            const std::string& bind_authorization_value,
462                            bool enable_encryption) override {
463     return target_->StartBoundSession(bind_entity,
464                                       bind_authorization_value,
465                                       enable_encryption);
466   }
467 
StartUnboundSession(bool enable_encryption)468   TPM_RC StartUnboundSession(bool enable_encryption) override {
469     return target_->StartUnboundSession(enable_encryption);
470   }
471 
GetDigest(std::string * digest)472   TPM_RC GetDigest(std::string* digest) override {
473     return target_->GetDigest(digest);
474   }
475 
PolicyOR(const std::vector<std::string> & digests)476   TPM_RC PolicyOR(const std::vector<std::string>& digests) override {
477     return target_->PolicyOR(digests);
478   }
479 
PolicyPCR(uint32_t pcr_index,const std::string & pcr_value)480   TPM_RC PolicyPCR(uint32_t pcr_index, const std::string& pcr_value) override {
481     return target_->PolicyPCR(pcr_index, pcr_value);
482   }
483 
PolicyCommandCode(TPM_CC command_code)484   TPM_RC PolicyCommandCode(TPM_CC command_code) override {
485     return target_->PolicyCommandCode(command_code);
486   }
487 
PolicyAuthValue()488   TPM_RC PolicyAuthValue() override {
489     return target_->PolicyAuthValue();
490   }
491 
SetEntityAuthorizationValue(const std::string & value)492   void SetEntityAuthorizationValue(const std::string& value) override {
493     return target_->SetEntityAuthorizationValue(value);
494   }
495 
496  private:
497   PolicySession* target_;
498 };
499 
500 // Forwards all calls to a target instance.
501 class BlobParserForwarder : public BlobParser {
502  public:
BlobParserForwarder(BlobParser * target)503   explicit BlobParserForwarder(BlobParser* target): target_(target) {}
504   ~BlobParserForwarder() override = default;
505 
SerializeKeyBlob(const TPM2B_PUBLIC & public_info,const TPM2B_PRIVATE & private_info,std::string * key_blob)506   bool SerializeKeyBlob(const TPM2B_PUBLIC& public_info,
507                         const TPM2B_PRIVATE& private_info,
508                         std::string* key_blob) override {
509     return target_->SerializeKeyBlob(public_info, private_info, key_blob);
510   }
511 
ParseKeyBlob(const std::string & key_blob,TPM2B_PUBLIC * public_info,TPM2B_PRIVATE * private_info)512   bool ParseKeyBlob(const std::string& key_blob,
513                     TPM2B_PUBLIC* public_info,
514                     TPM2B_PRIVATE* private_info) override {
515     return target_->ParseKeyBlob(key_blob, public_info, private_info);
516   }
517 
SerializeCreationBlob(const TPM2B_CREATION_DATA & creation_data,const TPM2B_DIGEST & creation_hash,const TPMT_TK_CREATION & creation_ticket,std::string * creation_blob)518   bool SerializeCreationBlob(const TPM2B_CREATION_DATA& creation_data,
519                              const TPM2B_DIGEST& creation_hash,
520                              const TPMT_TK_CREATION& creation_ticket,
521                              std::string* creation_blob) override {
522     return target_->SerializeCreationBlob(creation_data, creation_hash,
523                                           creation_ticket, creation_blob);
524   }
525 
ParseCreationBlob(const std::string & creation_blob,TPM2B_CREATION_DATA * creation_data,TPM2B_DIGEST * creation_hash,TPMT_TK_CREATION * creation_ticket)526   bool ParseCreationBlob(const std::string& creation_blob,
527                          TPM2B_CREATION_DATA* creation_data,
528                          TPM2B_DIGEST* creation_hash,
529                          TPMT_TK_CREATION* creation_ticket) override {
530     return target_->ParseCreationBlob(creation_blob, creation_data,
531                                       creation_hash, creation_ticket);
532   }
533 
534  private:
535   BlobParser* target_;
536 };
537 
TrunksFactoryForTest()538 TrunksFactoryForTest::TrunksFactoryForTest()
539     : default_tpm_(new NiceMock<MockTpm>()),
540       tpm_(default_tpm_.get()),
541       default_tpm_state_(new NiceMock<MockTpmState>()),
542       tpm_state_(default_tpm_state_.get()),
543       default_tpm_utility_(new NiceMock<MockTpmUtility>()),
544       tpm_utility_(default_tpm_utility_.get()),
545       default_authorization_delegate_(new PasswordAuthorizationDelegate("")),
546       password_authorization_delegate_(default_authorization_delegate_.get()),
547       default_session_manager_(new NiceMock<MockSessionManager>()),
548       session_manager_(default_session_manager_.get()),
549       default_hmac_session_(new NiceMock<MockHmacSession>()),
550       hmac_session_(default_hmac_session_.get()),
551       default_policy_session_(new NiceMock<MockPolicySession>()),
552       policy_session_(default_policy_session_.get()),
553       default_blob_parser_(new NiceMock<MockBlobParser>()),
554       blob_parser_(default_blob_parser_.get()) {
555 }
556 
~TrunksFactoryForTest()557 TrunksFactoryForTest::~TrunksFactoryForTest() {}
558 
GetTpm() const559 Tpm* TrunksFactoryForTest::GetTpm() const {
560   return tpm_;
561 }
562 
GetTpmState() const563 scoped_ptr<TpmState> TrunksFactoryForTest::GetTpmState() const {
564   return scoped_ptr<TpmState>(new TpmStateForwarder(tpm_state_));
565 }
566 
GetTpmUtility() const567 scoped_ptr<TpmUtility> TrunksFactoryForTest::GetTpmUtility() const {
568   return scoped_ptr<TpmUtility>(new TpmUtilityForwarder(tpm_utility_));
569 }
570 
571 scoped_ptr<AuthorizationDelegate>
GetPasswordAuthorization(const std::string & password) const572     TrunksFactoryForTest::GetPasswordAuthorization(
573         const std::string& password) const {
574   return scoped_ptr<AuthorizationDelegate>(
575       new AuthorizationDelegateForwarder(password_authorization_delegate_));
576 }
577 
GetSessionManager() const578 scoped_ptr<SessionManager> TrunksFactoryForTest::GetSessionManager() const {
579   return scoped_ptr<SessionManager>(
580       new SessionManagerForwarder(session_manager_));
581 }
582 
GetHmacSession() const583 scoped_ptr<HmacSession> TrunksFactoryForTest::GetHmacSession() const {
584   return scoped_ptr<HmacSession>(new HmacSessionForwarder(hmac_session_));
585 }
586 
GetPolicySession() const587 scoped_ptr<PolicySession> TrunksFactoryForTest::GetPolicySession() const {
588   return scoped_ptr<PolicySession>(new PolicySessionForwarder(policy_session_));
589 }
590 
GetTrialSession() const591 scoped_ptr<PolicySession> TrunksFactoryForTest::GetTrialSession() const {
592   return scoped_ptr<PolicySession>(new PolicySessionForwarder(policy_session_));
593 }
594 
GetBlobParser() const595 scoped_ptr<BlobParser> TrunksFactoryForTest::GetBlobParser() const {
596   return scoped_ptr<BlobParser>(new BlobParserForwarder(blob_parser_));
597 }
598 
599 }  // namespace trunks
600