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#include "tpm_manager/server/tpm2_nvram_impl.h" 1839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 1939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <gmock/gmock.h> 2039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <gtest/gtest.h> 2139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <trunks/mock_hmac_session.h> 22a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn#include <trunks/mock_policy_session.h> 2339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <trunks/mock_tpm_utility.h> 2439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <trunks/tpm_constants.h> 2539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include <trunks/trunks_factory_for_test.h> 2639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi#include "tpm_manager/server/mock_local_data_store.h" 2839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 2939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghinamespace { 30a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 31a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnconstexpr char kTestOwnerPassword[] = "owner"; 32a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnconstexpr char kFakePolicyDigest[] = "fake_policy_digest"; 33a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnconstexpr char kFakePCRValue[] = "fake_pcr_value"; 34a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnconstexpr char kFakeAuthorizationValue[] = "fake_authorization"; 35a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahntrunks::AuthorizationDelegate* const kHMACAuth = 36a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reinterpret_cast<trunks::AuthorizationDelegate*>(1ull); 37a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahntrunks::AuthorizationDelegate* const kPolicyAuth = 38a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn reinterpret_cast<trunks::AuthorizationDelegate*>(2ull); 39a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnconstexpr trunks::TPMA_NV kNoExtraAttributes = 0; 40a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 4139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} // namespace 4239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 4339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghinamespace tpm_manager { 4439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 4539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::_; 46a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnusing testing::AnyNumber; 47a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnusing testing::AtLeast; 4839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::DoAll; 4939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::Mock; 5039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::NiceMock; 5139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::Return; 5239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing testing::SetArgPointee; 5339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing trunks::TPM_RC_SUCCESS; 5439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiusing trunks::TPM_RC_FAILURE; 55a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahnusing trunks::TPM_RC_HANDLE; 5639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 5739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghiclass Tpm2NvramTest : public testing::Test { 5839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi public: 5939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi Tpm2NvramTest() = default; 6039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi virtual ~Tpm2NvramTest() = default; 6139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 6239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi void SetUp() { 63a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn factory_.set_hmac_session(&mock_hmac_session_); 64a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn factory_.set_policy_session(&mock_policy_session_); 65a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn factory_.set_trial_session(&mock_trial_session_); 66a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn factory_.set_tpm_utility(&mock_tpm_utility_); 67a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_.reset(new Tpm2NvramImpl(factory_, &mock_data_store_)); 68a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ON_CALL(mock_hmac_session_, GetDelegate()).WillByDefault(Return(kHMACAuth)); 69a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ON_CALL(mock_policy_session_, GetDelegate()) 70a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillByDefault(Return(kPolicyAuth)); 71a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ON_CALL(mock_policy_session_, GetDigest(_)) 72a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillByDefault( 73a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<0>(kFakePolicyDigest), Return(TPM_RC_SUCCESS))); 74a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ON_CALL(mock_trial_session_, GetDigest(_)) 75a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillByDefault( 76a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<0>(kFakePolicyDigest), Return(TPM_RC_SUCCESS))); 7739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi } 7839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 79a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn void SetupOwnerPassword() { 80a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 81a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.set_owner_password(kTestOwnerPassword); 82a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 83a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 84a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn enum ExpectAuth { NO_EXPECT_AUTH, EXPECT_AUTH }; 85a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn enum AuthType { NORMAL_AUTH, POLICY_AUTH, OWNER_AUTH }; 86a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn void SetupExistingSpace(uint32_t index, 87a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t size, 88a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV extra_attributes, 89a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ExpectAuth expect_auth, 90a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn AuthType auth_type) { 91a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMS_NV_PUBLIC public_data; 92a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.nv_index = index; 93a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.data_size = size; 94a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.attributes = trunks::TPMA_NV_READ_STCLEAR | 95a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_WRITE_STCLEAR | extra_attributes; 96a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn switch (auth_type) { 97a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn case NORMAL_AUTH: 98a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.attributes |= 99a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_AUTHREAD | trunks::TPMA_NV_AUTHWRITE; 100a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn break; 101a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn case POLICY_AUTH: 102a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.attributes |= 103a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_POLICYREAD | trunks::TPMA_NV_POLICYWRITE; 104a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn break; 105a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn case OWNER_AUTH: 106a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn public_data.attributes |= 107a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_OWNERREAD | trunks::TPMA_NV_OWNERWRITE; 108a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn break; 109a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 110a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ON_CALL(mock_tpm_utility_, GetNVSpacePublicArea(index, _)) 111a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillByDefault( 112a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<1>(public_data), Return(TPM_RC_SUCCESS))); 113a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 114a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NvramPolicyRecord& policy_record = *local_data.add_nvram_policy(); 115a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn policy_record.set_index(index); 116a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn if (auth_type == POLICY_AUTH) { 117a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn policy_record.set_policy(NVRAM_POLICY_PCR0); 118a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 119a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn if (!expect_auth) { 120a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, SetEntityAuthorizationValue(_)).Times(0); 121a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_policy_session_, SetEntityAuthorizationValue(_)) 122a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(0); 123a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_policy_session_, PolicyAuthValue()).Times(0); 124a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } else if (auth_type == NORMAL_AUTH) { 125a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, 126a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kFakeAuthorizationValue)) 127a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 128a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, SetEntityAuthorizationValue("")).Times(0); 129a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } else if (auth_type == OWNER_AUTH) { 130a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, 131a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kTestOwnerPassword)) 132a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 133a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, SetEntityAuthorizationValue("")).Times(0); 134a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } else { 135a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_policy_session_, 136a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kFakeAuthorizationValue)) 137a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 138a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, SetEntityAuthorizationValue("")).Times(0); 139a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ReadPCR(0, _)) 140a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)) 141a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly( 142a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<1>(kFakePCRValue), Return(TPM_RC_SUCCESS))); 143a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_policy_session_, PolicyAuthValue()).Times(AtLeast(1)); 144a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_policy_session_, PolicyPCR(0, kFakePCRValue)) 145a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 146a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn } 14739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi } 14839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 14939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi protected: 150a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TrunksFactoryForTest factory_; 15139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi NiceMock<trunks::MockHmacSession> mock_hmac_session_; 152a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NiceMock<trunks::MockPolicySession> mock_policy_session_; 153a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NiceMock<trunks::MockPolicySession> mock_trial_session_; 15439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi NiceMock<MockLocalDataStore> mock_data_store_; 15539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi NiceMock<trunks::MockTpmUtility> mock_tpm_utility_; 15639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::unique_ptr<Tpm2NvramImpl> tpm_nvram_; 15739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi}; 15839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 159a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, NoOwnerFailure) { 160a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_OPERATION_DISABLED, 161a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(0, 0, {}, "", NVRAM_POLICY_NONE)); 162a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_OPERATION_DISABLED, tpm_nvram_->DestroySpace(0)); 16339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 16439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 165a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, SessionFailure) { 166a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, StartUnboundSession(_)) 167a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 168a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 169a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(0, 0, {}, "", NVRAM_POLICY_NONE)); 170a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->DestroySpace(0)); 171a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->WriteSpace(0, "", "")); 172a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->ReadSpace(0, nullptr, "")); 173a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->LockSpace(0, false, false, "")); 174a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 175a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 176a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceSuccess) { 177a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 17839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_hmac_session_, 179a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kTestOwnerPassword)) 180a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 181a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_trial_session_, PolicyAuthValue()).Times(0); 182a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_trial_session_, PolicyPCR(_, _)).Times(0); 18339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 184a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn size_t size = 20; 185a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<NvramSpaceAttribute> attributes{NVRAM_PERSISTENT_WRITE_LOCK}; 186a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL( 187a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn mock_tpm_utility_, 188a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DefineNVSpace(index, size, 189a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_WRITEDEFINE | trunks::TPMA_NV_POLICYWRITE | 190a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_POLICYREAD, 191a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn kFakeAuthorizationValue, kFakePolicyDigest, kHMACAuth)) 19239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 193a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ( 194a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_RESULT_SUCCESS, 195a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(index, size, attributes, kFakeAuthorizationValue, 196a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_POLICY_NONE)); 197a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn const LocalData& local_data = mock_data_store_.GetFakeData(); 198a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(1, local_data.nvram_policy_size()); 199a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(index, local_data.nvram_policy(0).index()); 200a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_POLICY_NONE, local_data.nvram_policy(0).policy()); 20139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 20239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 203a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceFailure) { 204a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 20539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 206a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn size_t size = 20; 207a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<NvramSpaceAttribute> attributes{NVRAM_PERSISTENT_WRITE_LOCK}; 208a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, DefineNVSpace(_, _, _, _, _, _)) 209a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 210a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE( 211a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_RESULT_SUCCESS, 212a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(index, size, attributes, "", NVRAM_POLICY_NONE)); 213a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 214a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 215a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceNoClobberOnError) { 216a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 217a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, DefineNVSpace(_, _, _, _, _, _)) 218a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(Return(TPM_RC_SUCCESS)) 219a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 220a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 221a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(0, 32, {}, "", NVRAM_POLICY_NONE)); 222a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 223a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(0, 32, {}, "", NVRAM_POLICY_PCR0)); 224a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn const LocalData& local_data = mock_data_store_.GetFakeData(); 225a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(1, local_data.nvram_policy_size()); 226a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(0, local_data.nvram_policy(0).index()); 227a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_POLICY_NONE, local_data.nvram_policy(0).policy()); 22839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 22939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 230a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceWithPolicy) { 231a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 23239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_hmac_session_, 233a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kTestOwnerPassword)) 234a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 235a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_trial_session_, PolicyAuthValue()).Times(AtLeast(1)); 236a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ReadPCR(0, _)) 237a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly( 238a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<1>(kFakePCRValue), Return(TPM_RC_SUCCESS))); 239a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_trial_session_, PolicyPCR(0, kFakePCRValue)) 240a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 24139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 242a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn size_t size = 20; 243a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<NvramSpaceAttribute> attributes{NVRAM_WRITE_AUTHORIZATION}; 244a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL( 245a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn mock_tpm_utility_, 246a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DefineNVSpace(index, size, 247a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_POLICYWRITE | trunks::TPMA_NV_POLICYREAD, 248a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn kFakeAuthorizationValue, kFakePolicyDigest, kHMACAuth)) 24939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 250a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ( 251a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_RESULT_SUCCESS, 252a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(index, size, attributes, kFakeAuthorizationValue, 253a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_POLICY_PCR0)); 254a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 255a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 256a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceWithExistingLocalData) { 257a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 258a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 259a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(0); 260a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(4); 261a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(1); 262a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 263a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(5, 32, {}, "", NVRAM_POLICY_NONE)); 264a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(4, local_data.nvram_policy_size()); 265a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(5, local_data.nvram_policy(3).index()); 266a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 267a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 268a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DefineSpaceClobberExistingLocalData) { 269a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 270a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 271a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(0); 272a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(4); 273a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(1); 274a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 275a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->DefineSpace(4, 32, {}, "", NVRAM_POLICY_NONE)); 276a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(3, local_data.nvram_policy_size()); 277a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(local_data.nvram_policy(0).index(), 278a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.nvram_policy(1).index()); 279a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(local_data.nvram_policy(0).index(), 280a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.nvram_policy(2).index()); 281a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(local_data.nvram_policy(1).index(), 282a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.nvram_policy(2).index()); 28339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 28439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 285a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DestroySpaceSuccess) { 286a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 287a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 28839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 289a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(index); 290a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_hmac_session_, 291a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetEntityAuthorizationValue(kTestOwnerPassword)) 292a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 293a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, DestroyNVSpace(index, kHMACAuth)) 294a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(Return(TPM_RC_SUCCESS)); 295a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, tpm_nvram_->DestroySpace(index)); 296a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(0, local_data.nvram_policy_size()); 297a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 298a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 299a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DestroySpaceFailure) { 300a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 301a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 302a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 303a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(index); 30439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_tpm_utility_, DestroyNVSpace(index, _)) 305a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 306a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->DestroySpace(index)); 307a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(1, local_data.nvram_policy_size()); 30839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 30939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 310a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, DestroySpaceWithExistingLocalData) { 311a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 312a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LocalData& local_data = mock_data_store_.GetMutableFakeData(); 313a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(0); 314a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(1); 315a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn local_data.add_nvram_policy()->set_index(2); 316a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, DestroyNVSpace(1, kHMACAuth)) 317a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(Return(TPM_RC_SUCCESS)); 318a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, tpm_nvram_->DestroySpace(1)); 319a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(2, local_data.nvram_policy_size()); 320a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(1, local_data.nvram_policy(0).index()); 321a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(1, local_data.nvram_policy(1).index()); 322a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 323a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 324a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpaceSuccess) { 32539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 326a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 20, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 32739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string data("data"); 328a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 329a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteNVSpace(index, 0, data, false, false, kHMACAuth)) 33039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 331a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 332a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, data, kFakeAuthorizationValue)); 333a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 334a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 335a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpaceExtend) { 336a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 337a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 20, trunks::TPMA_NV_EXTEND, EXPECT_AUTH, 338a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NORMAL_AUTH); 339a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string data("data"); 340a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 341a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteNVSpace(index, 0, data, false, true, kHMACAuth)) 34239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 343a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 344a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, data, kFakeAuthorizationValue)); 345a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 346a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 347a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpaceNonexistant) { 348a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 349a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, GetNVSpacePublicArea(index, _)) 350a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_HANDLE)); 351a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string read_data; 352a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SPACE_DOES_NOT_EXIST, 353a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, "data", kFakeAuthorizationValue)); 354a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 355a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 356a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpaceFailure) { 357a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 358a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 20, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 359a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, WriteNVSpace(index, _, _, _, _, _)) 360a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 361a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 362a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, "data", kFakeAuthorizationValue)); 36339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 36439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 365a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpacePolicy) { 36639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 367a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 20, kNoExtraAttributes, EXPECT_AUTH, POLICY_AUTH); 368a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string data("data"); 369a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 370a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteNVSpace(index, 0, data, false, false, kPolicyAuth)) 37139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 372a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 373a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, data, kFakeAuthorizationValue)); 37439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 37539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 376a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, WriteSpaceOwner) { 37739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 378a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 379a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 20, kNoExtraAttributes, EXPECT_AUTH, OWNER_AUTH); 380a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string data("data"); 381a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 382a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn WriteNVSpace(index, 0, data, true, false, kHMACAuth)) 383a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(Return(TPM_RC_SUCCESS)); 384a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 385a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->WriteSpace(index, data, kFakeAuthorizationValue)); 38639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 38739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 388a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ReadSpaceSuccess) { 38939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 390a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, trunks::TPMA_NV_WRITTEN, EXPECT_AUTH, 391a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NORMAL_AUTH); 39239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string tpm_data("data"); 393a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ReadNVSpace(index, 0, 32, false, _, kHMACAuth)) 394a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(DoAll(SetArgPointee<4>(tpm_data), Return(TPM_RC_SUCCESS))); 39539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string read_data; 396a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 397a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->ReadSpace(index, &read_data, kFakeAuthorizationValue)); 39839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_EQ(read_data, tpm_data); 39939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 40039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 401a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ReadSpaceNonexistant) { 40239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 40339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_tpm_utility_, GetNVSpacePublicArea(index, _)) 404a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_HANDLE)); 40539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string read_data; 406a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SPACE_DOES_NOT_EXIST, 407a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->ReadSpace(index, &read_data, kFakeAuthorizationValue)); 40839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 40939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 410a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ReadSpaceFailure) { 41139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 412a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, trunks::TPMA_NV_WRITTEN, EXPECT_AUTH, 413a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NORMAL_AUTH); 414a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ReadNVSpace(index, _, _, _, _, _)) 415a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 41639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi std::string read_data; 417a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 418a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->ReadSpace(index, &read_data, kFakeAuthorizationValue)); 41939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 42039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 421a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ReadSpacePolicy) { 42239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 423a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, trunks::TPMA_NV_WRITTEN, EXPECT_AUTH, 424a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn POLICY_AUTH); 425a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string tpm_data("data"); 426a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 427a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn ReadNVSpace(index, 0, 32, false, _, kPolicyAuth)) 428a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(DoAll(SetArgPointee<4>(tpm_data), Return(TPM_RC_SUCCESS))); 429a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string read_data; 430a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 431a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->ReadSpace(index, &read_data, kFakeAuthorizationValue)); 432a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(read_data, tpm_data); 433a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 434a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 435a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ReadSpaceOwner) { 436a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 437a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 438a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, trunks::TPMA_NV_WRITTEN, EXPECT_AUTH, 439a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn OWNER_AUTH); 440a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string tpm_data("data"); 441a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ReadNVSpace(index, 0, 32, true, _, kHMACAuth)) 442a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillOnce(DoAll(SetArgPointee<4>(tpm_data), Return(TPM_RC_SUCCESS))); 443a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::string read_data; 444a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 445a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->ReadSpace(index, &read_data, kFakeAuthorizationValue)); 446a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(read_data, tpm_data); 44739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 44839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 449a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceSuccess) { 450a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 451a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 452a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, true, _, false, kHMACAuth)) 453a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 454a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, _, true, false, kHMACAuth)) 455a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 456a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 457a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, true, kFakeAuthorizationValue)); 458a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 459a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 460a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceNonexistant) { 46139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 46239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_tpm_utility_, GetNVSpacePublicArea(index, _)) 46339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(trunks::TPM_RC_HANDLE)); 464a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SPACE_DOES_NOT_EXIST, 465a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, true, kFakeAuthorizationValue)); 46639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 46739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 468a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceFailure) { 46939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 470a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 471a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(_, _, _, _, _)) 472a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 473a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 474a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, true, kFakeAuthorizationValue)); 47539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 47639074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 477a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpacePolicy) { 47839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 479a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, POLICY_AUTH); 480a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 481a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockNVSpace(index, true, _, false, kPolicyAuth)) 482a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 483a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 484a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockNVSpace(index, _, true, false, kPolicyAuth)) 485a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 486a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 487a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, true, kFakeAuthorizationValue)); 48839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 48939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 490a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceOwner) { 49139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 492a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupOwnerPassword(); 493a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, OWNER_AUTH); 494a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, true, _, true, kHMACAuth)) 495a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 496a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, _, true, true, kHMACAuth)) 497a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 498a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 499a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, true, kFakeAuthorizationValue)); 50039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 50139074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 502a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceRead) { 50339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 504a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 505a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 506a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockNVSpace(index, true, false, false, kHMACAuth)) 507a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 508a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, _, true, false, kHMACAuth)) 509a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(0); 510a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 511a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, true, false, kFakeAuthorizationValue)); 51239074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 51339074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 514a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, LockSpaceWrite) { 51539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 516a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 32, kNoExtraAttributes, EXPECT_AUTH, NORMAL_AUTH); 517a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, 518a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn LockNVSpace(index, false, true, false, kHMACAuth)) 519a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)); 520a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, LockNVSpace(index, true, _, false, kHMACAuth)) 521a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(0); 522a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 523a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->LockSpace(index, false, true, kFakeAuthorizationValue)); 524a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 525a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 526a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ListSpacesSuccess) { 527a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<uint32_t> expected_spaces{1, 5, 42}; 528a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<uint32_t> spaces; 529a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ListNVSpaces(_)) 530a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .Times(AtLeast(1)) 531a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly( 532a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn DoAll(SetArgPointee<0>(expected_spaces), Return(TPM_RC_SUCCESS))); 533a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, tpm_nvram_->ListSpaces(&spaces)); 534a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(spaces, expected_spaces); 535a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 536a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 537a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, ListSpacesFailure) { 538a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<uint32_t> spaces; 539a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_CALL(mock_tpm_utility_, ListNVSpaces(_)) 540a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 541a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, tpm_nvram_->ListSpaces(&spaces)); 542a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn} 543a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn 544a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, GetSpaceInfoSuccess) { 545a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn uint32_t index = 42; 546a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn SetupExistingSpace(index, 100, 547a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn trunks::TPMA_NV_READLOCKED | trunks::TPMA_NV_WRITELOCKED, 548a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NO_EXPECT_AUTH, POLICY_AUTH); 54939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi size_t size; 550a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn bool is_read_locked; 551a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn bool is_write_locked; 552a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<NvramSpaceAttribute> attributes; 553a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NvramSpacePolicy policy; 554a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_RESULT_SUCCESS, 555a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->GetSpaceInfo(index, &size, &is_write_locked, 556a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn &is_read_locked, &attributes, &policy)); 557a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(size, 100); 558a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_TRUE(is_read_locked); 559a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_TRUE(is_write_locked); 560a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_GE(attributes.size(), 1); 561a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(1, std::count(attributes.begin(), attributes.end(), 562a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NVRAM_WRITE_AUTHORIZATION)); 563a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_EQ(NVRAM_POLICY_PCR0, policy); 56439074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 56539074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 566a94133441da308b30c6fe18cc4e2b866498ee401Darren KrahnTEST_F(Tpm2NvramTest, GetSpaceInfoFailure) { 56739074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi uint32_t index = 42; 56839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi EXPECT_CALL(mock_tpm_utility_, GetNVSpacePublicArea(index, _)) 56939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 57039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi size_t size; 571a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn bool is_read_locked; 572a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn bool is_write_locked; 573a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn std::vector<NvramSpaceAttribute> attributes; 574a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn NvramSpacePolicy policy; 575a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn EXPECT_NE(NVRAM_RESULT_SUCCESS, 576a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn tpm_nvram_->GetSpaceInfo(index, &size, &is_write_locked, 577a94133441da308b30c6fe18cc4e2b866498ee401Darren Krahn &is_read_locked, &attributes, &policy)); 57839074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} 57939074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi 58039074f04aec7466722271d1484ff75f48a77f93cUtkarsh Sanghi} // namespace tpm_manager 581