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_impl.h" 18 19#include <base/logging.h> 20#include <base/memory/ptr_util.h> 21 22#include "trunks/blob_parser.h" 23#include "trunks/hmac_session_impl.h" 24#include "trunks/password_authorization_delegate.h" 25#include "trunks/policy_session_impl.h" 26#include "trunks/session_manager_impl.h" 27#include "trunks/tpm_generated.h" 28#include "trunks/tpm_state_impl.h" 29#include "trunks/tpm_utility_impl.h" 30#if defined(USE_BINDER_IPC) 31#include "trunks/trunks_binder_proxy.h" 32#else 33#include "trunks/trunks_dbus_proxy.h" 34#endif 35 36namespace trunks { 37 38TrunksFactoryImpl::TrunksFactoryImpl() { 39#if defined(USE_BINDER_IPC) 40 default_transceiver_.reset(new TrunksBinderProxy()); 41#else 42 default_transceiver_.reset(new TrunksDBusProxy()); 43#endif 44 transceiver_ = default_transceiver_.get(); 45} 46 47TrunksFactoryImpl::TrunksFactoryImpl(CommandTransceiver* transceiver) { 48 transceiver_ = transceiver; 49} 50 51TrunksFactoryImpl::~TrunksFactoryImpl() {} 52 53bool TrunksFactoryImpl::Initialize() { 54 if (initialized_) { 55 return true; 56 } 57 tpm_.reset(new Tpm(transceiver_)); 58 if (transceiver_ != default_transceiver_.get()) { 59 initialized_ = true; 60 } else { 61 initialized_ = transceiver_->Init(); 62 if (!initialized_) { 63 LOG(WARNING) << "Failed to initialize the trunks IPC proxy; " 64 << "trunksd is not ready."; 65 } 66 } 67 return initialized_; 68} 69 70Tpm* TrunksFactoryImpl::GetTpm() const { 71 return tpm_.get(); 72} 73 74std::unique_ptr<TpmState> TrunksFactoryImpl::GetTpmState() const { 75 return base::MakeUnique<TpmStateImpl>(*this); 76} 77 78std::unique_ptr<TpmUtility> TrunksFactoryImpl::GetTpmUtility() const { 79 return base::MakeUnique<TpmUtilityImpl>(*this); 80} 81 82std::unique_ptr<AuthorizationDelegate> 83TrunksFactoryImpl::GetPasswordAuthorization(const std::string& password) const { 84 return base::MakeUnique<PasswordAuthorizationDelegate>(password); 85} 86 87std::unique_ptr<SessionManager> TrunksFactoryImpl::GetSessionManager() const { 88 return base::MakeUnique<SessionManagerImpl>(*this); 89} 90 91std::unique_ptr<HmacSession> TrunksFactoryImpl::GetHmacSession() const { 92 return base::MakeUnique<HmacSessionImpl>(*this); 93} 94 95std::unique_ptr<PolicySession> TrunksFactoryImpl::GetPolicySession() const { 96 return base::MakeUnique<PolicySessionImpl>(*this, TPM_SE_POLICY); 97} 98 99std::unique_ptr<PolicySession> TrunksFactoryImpl::GetTrialSession() const { 100 return base::MakeUnique<PolicySessionImpl>(*this, TPM_SE_TRIAL); 101} 102 103std::unique_ptr<BlobParser> TrunksFactoryImpl::GetBlobParser() const { 104 return base::MakeUnique<BlobParser>(); 105} 106 107} // namespace trunks 108