trunks_factory_for_test.cc revision 1aeb5969d4f286e36fe88152ad8c96cff668c25f
1c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved.
2c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Use of this source code is governed by a BSD-style license that can be
3c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// found in the LICENSE file.
4c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
5c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory_for_test.h"
6c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
7c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gmock/gmock.h>
8c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
9c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/authorization_delegate.h"
1052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn#include "trunks/authorization_session.h"
1152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn#include "trunks/mock_authorization_session.h"
12c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm.h"
13c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm_state.h"
1403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/mock_tpm_utility.h"
15c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_generated.h"
16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_state.h"
17c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility.h"
18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::NiceMock;
20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
21c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks {
22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Forwards all calls to a target instance.
24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmStateForwarder : public TpmState {
25c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public:
26c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  explicit TpmStateForwarder(TpmState* target) : target_(target) {}
27c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  virtual ~TpmStateForwarder() {}
28c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
29c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TPM_RC Initialize() override {
30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->Initialize();
31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
3352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  bool IsOwnerPasswordSet() override {
3452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->IsOwnerPasswordSet();
3552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
3652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
3752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  bool IsEndorsementPasswordSet() override {
3852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->IsEndorsementPasswordSet();
3952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
4052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
4152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  bool IsLockoutPasswordSet() override {
4252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->IsLockoutPasswordSet();
4352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
4452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool IsInLockout() override {
46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->IsInLockout();
47c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
48c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
49c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool IsPlatformHierarchyEnabled() override {
50c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->IsPlatformHierarchyEnabled();
51c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
52c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
53c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool WasShutdownOrderly() override {
54c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->WasShutdownOrderly();
55c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
56c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
57c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private:
58c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmState* target_;
59c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn};
60c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
61c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Forwards all calls to a target instance.
6203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnclass TpmUtilityForwarder : public TpmUtility {
6303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn public:
6403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  explicit TpmUtilityForwarder(TpmUtility* target) : target_(target) {}
6503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  virtual ~TpmUtilityForwarder() {}
6603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
6703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  TPM_RC Startup() override {
6803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn    return target_->Startup();
6903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  }
7003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
71d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi  TPM_RC Clear() override {
72d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi    return target_->Clear();
73d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi  }
74d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi
7503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  TPM_RC InitializeTpm() override {
7603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn    return target_->InitializeTpm();
7703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  }
7803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
7903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  TPM_RC StirRandom(const std::string& entropy_data) override {
8003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn    return target_->StirRandom(entropy_data);
8103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  }
8203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
8335af244e7cf856a02e46ec8f186f36c53582757dUtkarsh Sanghi  TPM_RC GenerateRandom(size_t num_bytes, std::string* random_data) override {
8403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn    return target_->GenerateRandom(num_bytes, random_data);
8503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  }
8603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
87579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi  TPM_RC ExtendPCR(int pcr_index, const std::string& extend_data) override {
88579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi    return target_->ExtendPCR(pcr_index, extend_data);
89579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi  }
90579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi
91579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi  TPM_RC ReadPCR(int pcr_index, std::string* pcr_value) override {
92579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi    return target_->ReadPCR(pcr_index, pcr_value);
93579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi  }
94579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi
9552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  TPM_RC TakeOwnership(const std::string& owner_password,
9652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                       const std::string& endorsement_password,
9752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                       const std::string& lockout_password) override {
9852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->TakeOwnership(owner_password,
9952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                                  endorsement_password,
10052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                                  lockout_password);
10152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
10252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
10352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  TPM_RC CreateStorageRootKeys(const std::string& owner_password) override {
10452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->CreateStorageRootKeys(owner_password);
10552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
10652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
107b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi  TPM_RC AsymmetricEncrypt(TPM_HANDLE key_handle,
108b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                           TPM_ALG_ID scheme,
1099dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi                           TPM_ALG_ID hash_alg,
110b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                           const std::string& plaintext,
111748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                           std::string* ciphertext) override {
112b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi    return target_->AsymmetricEncrypt(key_handle,
113b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      scheme,
1149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi                                      hash_alg,
115b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      plaintext,
116b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      ciphertext);
117b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi  }
118b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi
119b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi  TPM_RC AsymmetricDecrypt(TPM_HANDLE key_handle,
120b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                           TPM_ALG_ID scheme,
1219dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi                           TPM_ALG_ID hash_alg,
122b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                           const std::string& password,
123b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                           const std::string& ciphertext,
124748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                           std::string* plaintext) override {
125b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi    return target_->AsymmetricDecrypt(key_handle,
126b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      scheme,
1279dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi                                      hash_alg,
128b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      password,
129b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      ciphertext,
130b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi                                      plaintext);
131b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi  }
132b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi
133748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi  TPM_RC Sign(TPM_HANDLE key_handle,
134748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi              TPM_ALG_ID scheme,
135748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi              TPM_ALG_ID hash_alg,
136748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi              const std::string& password,
137748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi              const std::string& digest,
138748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi              std::string* signature) override {
139748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi    return target_->Sign(key_handle,
140748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                         scheme,
141748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                         hash_alg,
142748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                         password,
143748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                         digest,
144748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                         signature);
145748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi  }
146748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi
147748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi  TPM_RC Verify(TPM_HANDLE key_handle,
148748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                TPM_ALG_ID scheme,
149748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                TPM_ALG_ID hash_alg,
150748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                const std::string& digest,
151748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi                const std::string& signature) override {
152748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi    return target_->Verify(key_handle, scheme, hash_alg, digest, signature);
153748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi  }
154748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi
15582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi  TPM_RC CreateRSAKey(AsymmetricKeyUsage key_type,
15682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi                      const std::string& password,
15782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi                      TPM_HANDLE* key_handle) override {
15882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi    return target_->CreateRSAKey(key_type, password, key_handle);
15982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi  }
16082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi
16103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn private:
16203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  TpmUtility* target_;
16303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn};
16403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
16503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn// Forwards all calls to a target instance.
166c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass AuthorizationDelegateForwarder : public AuthorizationDelegate {
167c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public:
168c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  explicit AuthorizationDelegateForwarder(AuthorizationDelegate* target)
169c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      : target_(target) {}
170c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  virtual ~AuthorizationDelegateForwarder() {}
171c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
172c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool GetCommandAuthorization(const std::string& command_hash,
1731aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn                               bool is_command_parameter_encryption_possible,
1741aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn                               bool is_response_parameter_encryption_possible,
175c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn                               std::string* authorization) override {
1761aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn    return target_->GetCommandAuthorization(
1771aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn        command_hash,
1781aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn        is_command_parameter_encryption_possible,
1791aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn        is_response_parameter_encryption_possible,
1801aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn        authorization);
181c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
182c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
183c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool CheckResponseAuthorization(const std::string& response_hash,
184c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn                                  const std::string& authorization) override {
185c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->CheckResponseAuthorization(response_hash, authorization);
186c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
187c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
188c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool EncryptCommandParameter(std::string* parameter) override {
189c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->EncryptCommandParameter(parameter);
190c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
191c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
192c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  bool DecryptResponseParameter(std::string* parameter) override {
193c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    return target_->DecryptResponseParameter(parameter);
194c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  }
195c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
196c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private:
197c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  AuthorizationDelegate* target_;
198c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn};
199c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
20052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn// Forwards all calls to a target instance.
20152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahnclass AuthorizationSessionForwarder : public AuthorizationSession {
20252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn public:
20352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  explicit AuthorizationSessionForwarder(AuthorizationSession* target)
20452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      : target_(target) {}
20552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  virtual ~AuthorizationSessionForwarder() {}
20652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
20752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  AuthorizationDelegate* GetDelegate() override {
20852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->GetDelegate();
20952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
21052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
21152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  TPM_RC StartBoundSession(
21252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      TPMI_DH_ENTITY bind_entity,
21352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      const std::string& bind_authorization_value,
21452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      bool enable_encryption) override {
21552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->StartBoundSession(bind_entity,
21652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                                      bind_authorization_value,
21752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn                                      enable_encryption);
21852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
21952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
22052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  TPM_RC StartUnboundSession(bool enable_encryption) override {
22152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->StartUnboundSession(enable_encryption);
22252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
22352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
22452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  void SetEntityAuthorizationValue(const std::string& value) override {
22552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    return target_->SetEntityAuthorizationValue(value);
22652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  }
22752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
22852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn private:
22952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  AuthorizationSession* target_;
23052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn};
23152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
232c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTrunksFactoryForTest::TrunksFactoryForTest()
233c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    : default_tpm_(new NiceMock<MockTpm>()),
234c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      tpm_(default_tpm_.get()),
235c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      default_tpm_state_(new NiceMock<MockTpmState>()),
236c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn      tpm_state_(default_tpm_state_.get()),
23703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn      default_tpm_utility_(new NiceMock<MockTpmUtility>()),
23803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn      tpm_utility_(default_tpm_utility_.get()),
2396318d4413806a501783a003bf249e3ae627c73edUtkarsh Sanghi      default_authorization_delegate_(new PasswordAuthorizationDelegate("")),
24052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      password_authorization_delegate_(default_authorization_delegate_.get()),
24152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      default_authorization_session_(new NiceMock<MockAuthorizationSession>()),
24252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      authorization_session_(default_authorization_session_.get()) {
243c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
244c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
245c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTrunksFactoryForTest::~TrunksFactoryForTest() {
246c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
247c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
248c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTpm* TrunksFactoryForTest::GetTpm() const {
249c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  return tpm_;
250c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
251c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
252c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnscoped_ptr<TpmState> TrunksFactoryForTest::GetTpmState() const {
253c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  return scoped_ptr<TpmState>(new TpmStateForwarder(tpm_state_));
254c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
255c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
25603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnscoped_ptr<TpmUtility> TrunksFactoryForTest::GetTpmUtility() const {
25703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  return scoped_ptr<TpmUtility>(new TpmUtilityForwarder(tpm_utility_));
25803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn}
25903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
260c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnscoped_ptr<AuthorizationDelegate>
261c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn    TrunksFactoryForTest::GetPasswordAuthorization(
262c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn        const std::string& password) const {
263c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  return scoped_ptr<AuthorizationDelegate>(
264a19238f46d4341489fd1d3140df1bb09bdbd8f01Darren Krahn      new AuthorizationDelegateForwarder(password_authorization_delegate_));
265c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}
266c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
26752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahnscoped_ptr<AuthorizationSession>
26852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn    TrunksFactoryForTest::GetAuthorizationSession() const {
26952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn  return scoped_ptr<AuthorizationSession>(
27052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn      new AuthorizationSessionForwarder(authorization_session_));
27152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn}
27252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn
273c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}  // namespace trunks
274