1bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 2bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Copyright (C) 2014 The Android Open Source Project 3bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 4bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 5bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// you may not use this file except in compliance with the License. 6bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// You may obtain a copy of the License at 7bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 8bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 9bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 10bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 11bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 12bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// See the License for the specific language governing permissions and 14bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// limitations under the License. 15bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 1603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/trunks_factory_impl.h" 1803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 199caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#include <base/logging.h> 2030c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez#include <base/memory/ptr_util.h> 219caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn 220ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi#include "trunks/blob_parser.h" 23ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/hmac_session_impl.h" 2403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/password_authorization_delegate.h" 25ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/policy_session_impl.h" 26ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/session_manager_impl.h" 2703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/tpm_generated.h" 2803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/tpm_state_impl.h" 2903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/tpm_utility_impl.h" 309caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#if defined(USE_BINDER_IPC) 319caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#include "trunks/trunks_binder_proxy.h" 329caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#else 339caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#include "trunks/trunks_dbus_proxy.h" 349caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#endif 3503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 3603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnnamespace trunks { 3703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 38b180754b429c078cbc99175a6059a8b5d0491002Darren KrahnTrunksFactoryImpl::TrunksFactoryImpl() { 399caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#if defined(USE_BINDER_IPC) 409caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn default_transceiver_.reset(new TrunksBinderProxy()); 419caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#else 429caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn default_transceiver_.reset(new TrunksDBusProxy()); 439caf492818a4cc51ba471534d3fcaa84c9ce0278Darren Krahn#endif 44de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi transceiver_ = default_transceiver_.get(); 4503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 4603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 47de1659944c1d4291aa67f9582990110e11c8461eUtkarsh SanghiTrunksFactoryImpl::TrunksFactoryImpl(CommandTransceiver* transceiver) { 48de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi transceiver_ = transceiver; 4903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 5003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 51de1659944c1d4291aa67f9582990110e11c8461eUtkarsh SanghiTrunksFactoryImpl::~TrunksFactoryImpl() {} 52de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi 53b180754b429c078cbc99175a6059a8b5d0491002Darren Krahnbool TrunksFactoryImpl::Initialize() { 54b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn if (initialized_) { 55b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return true; 56b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 57b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn tpm_.reset(new Tpm(transceiver_)); 58b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn if (transceiver_ != default_transceiver_.get()) { 59b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn initialized_ = true; 60b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } else { 61b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn initialized_ = transceiver_->Init(); 62b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn if (!initialized_) { 63b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn LOG(WARNING) << "Failed to initialize the trunks IPC proxy; " 64b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn << "trunksd is not ready."; 65b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 66b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 67b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return initialized_; 68b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn} 69b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 7003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTpm* TrunksFactoryImpl::GetTpm() const { 71de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi return tpm_.get(); 7203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 7303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 7430c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<TpmState> TrunksFactoryImpl::GetTpmState() const { 7530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<TpmStateImpl>(*this); 7603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 7703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 7830c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<TpmUtility> TrunksFactoryImpl::GetTpmUtility() const { 7930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<TpmUtilityImpl>(*this); 8003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 8103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 8230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<AuthorizationDelegate> 8330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector ChavezTrunksFactoryImpl::GetPasswordAuthorization(const std::string& password) const { 8430c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<PasswordAuthorizationDelegate>(password); 8503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 8603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 8730c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<SessionManager> TrunksFactoryImpl::GetSessionManager() const { 8830c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<SessionManagerImpl>(*this); 89ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 90ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 9130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<HmacSession> TrunksFactoryImpl::GetHmacSession() const { 9230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<HmacSessionImpl>(*this); 93ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 94ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 9530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<PolicySession> TrunksFactoryImpl::GetPolicySession() const { 9630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<PolicySessionImpl>(*this, TPM_SE_POLICY); 97be41115c49f10e8b81ae27963dfebb893c98f06aUtkarsh Sanghi} 98be41115c49f10e8b81ae27963dfebb893c98f06aUtkarsh Sanghi 9930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<PolicySession> TrunksFactoryImpl::GetTrialSession() const { 10030c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<PolicySessionImpl>(*this, TPM_SE_TRIAL); 10152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 10252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 10330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<BlobParser> TrunksFactoryImpl::GetBlobParser() const { 10430c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<BlobParser>(); 1050ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 1060ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 10703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} // namespace trunks 108