139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// 239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// Copyright (C) 2015 The Android Open Source Project 339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// 439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// you may not use this file except in compliance with the License. 639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// You may obtain a copy of the License at 739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// 839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// 1039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 1139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 1239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// See the License for the specific language governing permissions and 1439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// limitations under the License. 1539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi// 1639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 1739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#ifndef TPM_MANAGER_SERVER_TPM2_NVRAM_IMPL_H_ 1839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#define TPM_MANAGER_SERVER_TPM2_NVRAM_IMPL_H_ 1939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include "tpm_manager/server/tpm_nvram.h" 2139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <memory> 2339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <string> 2439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <base/macros.h> 2639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <base/memory/scoped_ptr.h> 2739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <trunks/trunks_factory.h> 2839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include "tpm_manager/server/local_data_store.h" 3039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 3139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghinamespace tpm_manager { 3239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 3339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiclass Tpm2NvramImpl : public TpmNvram { 3439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi public: 3539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // Does not take ownership of |local_data_store|. 3639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi explicit Tpm2NvramImpl(LocalDataStore* local_data_store); 3739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // Does not take ownership of |local_data_store|, but takes ownership of 3839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // |factory|. 3939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi Tpm2NvramImpl(std::unique_ptr<trunks::TrunksFactory> factory, 4039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi LocalDataStore* local_data_store); 4139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi ~Tpm2NvramImpl() override = default; 4239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 4339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // TpmNvram methods. 4439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool DefineNvram(uint32_t index, size_t length) override; 4539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool DestroyNvram(uint32_t index) override; 4639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool WriteNvram(uint32_t index, const std::string& data) override; 4739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool ReadNvram(uint32_t index, std::string* data) override; 4839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool IsNvramDefined(uint32_t index, bool* defined) override; 4939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool IsNvramLocked(uint32_t index, bool* locked) override; 5039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool GetNvramSize(uint32_t index, size_t* size) override; 5139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 5239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi private: 5339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // Initializes the connection to the Tpm2.0 and starts an authorization 5439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // session. 5539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // Note: there are no guarantees about the authorization value loaded into 5639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // |trunks_session_| at the end of this method. 5739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool Initialize(); 5839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 5939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // This method initializes and ensures that a valid owner password is 6039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // available. When this method returns, |owner_password_| will be loaded 6139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi // into |trunks_session_|. 6239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool InitializeWithOwnerPassword(); 6339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 6439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::unique_ptr<trunks::TrunksFactory> trunks_factory_; 6539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi LocalDataStore* local_data_store_; 6639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi bool initialized_; 6739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string owner_password_; 6839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi scoped_ptr<trunks::HmacSession> trunks_session_; 6939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi scoped_ptr<trunks::TpmUtility> trunks_utility_; 7039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 7139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi friend class Tpm2NvramTest; 7239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi DISALLOW_COPY_AND_ASSIGN(Tpm2NvramImpl); 7339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi}; 7439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 7539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} // namespace tpm_manager 7639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 7739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#endif // TPM_MANAGER_SERVER_TPM2_NVRAM_IMPL_H_ 78