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#ifndef TRUNKS_TRUNKS_FACTORY_IMPL_H_ 1803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#define TRUNKS_TRUNKS_FACTORY_IMPL_H_ 1903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 2003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/trunks_factory.h" 2103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 2230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez#include <memory> 2303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include <string> 2403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 2503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include <base/macros.h> 26ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahn 27c7a43d6afb860f06e3992855d81c5bc370dcad9cVadim Bendebury#include "trunks/command_transceiver.h" 28ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahn#include "trunks/trunks_export.h" 2903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 3003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnnamespace trunks { 3103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 32b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// TrunksFactoryImpl is the default TrunksFactory implementation. This class is 33b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// thread-safe with the exception of Initialize() but created objects are not 34b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// necessarily thread-safe. Example usage: 35b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// 36b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// TrunksFactoryImpl factory; 37b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// factory.Initialize(true /*failure_is_fatal*/); 38b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn// Tpm* tpm = factory.GetTpm(); 39ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahnclass TRUNKS_EXPORT TrunksFactoryImpl : public TrunksFactory { 4003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn public: 41b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn // Uses an IPC proxy as the default CommandTransceiver. 42b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TrunksFactoryImpl(); 43de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi // TrunksFactoryImpl does not take ownership of |transceiver|. This 44de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi // transceiver is forwarded down to the Tpm instance maintained by 45b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn // this factory. It is assumed that the |transceiver| is already initialized. 46de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi explicit TrunksFactoryImpl(CommandTransceiver* transceiver); 47617ff7c335625738b152b2277275ed13cfc6dad5Darren Krahn ~TrunksFactoryImpl() override; 4803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 49b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn // Initialize the factory. This must be called before any other methods. 50b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn // Returns true on success. 51b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool Initialize(); 52b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 5303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn // TrunksFactory methods. 5403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn Tpm* GetTpm() const override; 5530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<TpmState> GetTpmState() const override; 5630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<TpmUtility> GetTpmUtility() const override; 5730c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<AuthorizationDelegate> GetPasswordAuthorization( 5803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn const std::string& password) const override; 5930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<SessionManager> GetSessionManager() const override; 6030c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<HmacSession> GetHmacSession() const override; 6130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<PolicySession> GetPolicySession() const override; 6230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<PolicySession> GetTrialSession() const override; 6330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<BlobParser> GetBlobParser() const override; 6403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 6503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn private: 6630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<CommandTransceiver> default_transceiver_; 67de1659944c1d4291aa67f9582990110e11c8461eUtkarsh Sanghi CommandTransceiver* transceiver_; 6830c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez std::unique_ptr<Tpm> tpm_; 69b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool initialized_ = false; 7003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 7103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn DISALLOW_COPY_AND_ASSIGN(TrunksFactoryImpl); 7203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn}; 7303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 7403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} // namespace trunks 7503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 7603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#endif // TRUNKS_TRUNKS_FACTORY_IMPL_H_ 77