tpm_utility_test.cc revision 2da8ff25e7c88c78e8a9db8de9686c92817f0992
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// 16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 1733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <base/stl_util.h> 1833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <crypto/sha2.h> 19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gmock/gmock.h> 20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gtest/gtest.h> 2133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <openssl/aes.h> 22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 23b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi#include "trunks/error_codes.h" 2433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include "trunks/hmac_authorization_delegate.h" 25b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi#include "trunks/mock_authorization_delegate.h" 260ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi#include "trunks/mock_blob_parser.h" 27ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_hmac_session.h" 28a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi#include "trunks/mock_policy_session.h" 29c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm.h" 30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm_state.h" 3139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi#include "trunks/tpm_constants.h" 32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility_impl.h" 33c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory_for_test.h" 34c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 35c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::_; 36e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghiusing testing::DoAll; 37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::NiceMock; 38c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::Return; 39748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghiusing testing::SaveArg; 40e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghiusing testing::SetArgPointee; 41c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 42c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks { 43c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 44c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// A test fixture for TpmUtility tests. 45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmUtilityTest : public testing::Test { 46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public: 475d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TpmUtilityTest() : utility_(factory_) {} 48295e851b66fb19c05a14401e834337962a58c493Darren Krahn ~TpmUtilityTest() override {} 49295e851b66fb19c05a14401e834337962a58c493Darren Krahn void SetUp() override { 500ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi factory_.set_blob_parser(&mock_blob_parser_); 51c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm_state(&mock_tpm_state_); 52c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm(&mock_tpm_); 53ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi factory_.set_hmac_session(&mock_hmac_session_); 54a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi factory_.set_policy_session(&mock_policy_session_); 55c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 566537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 575d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_RC ComputeKeyName(const TPMT_PUBLIC& public_area, 586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi std::string* object_name) { 595d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return utility_.ComputeKeyName(public_area, object_name); 606537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 616537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 625d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi void SetNVRAMMap(uint32_t index, 636537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const TPMS_NV_PUBLIC& public_area) { 645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.nvram_public_area_map_[index] = public_area; 656537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 666537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 675d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_RC GetNVRAMMap(uint32_t index, 686537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC* public_area) { 695d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi auto it = utility_.nvram_public_area_map_.find(index); 705d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi if (it == utility_.nvram_public_area_map_.end()) { 716537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_FAILURE; 726537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 736537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi *public_area = it->second; 746537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_SUCCESS; 756537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 766537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 7766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC SetKnownOwnerPassword(const std::string& owner_password) { 7866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.SetKnownOwnerPassword(owner_password); 7966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 8066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 8166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC CreateStorageRootKeys(const std::string& owner_password) { 8266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.CreateStorageRootKeys(owner_password); 8366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 8466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 8566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC CreateSaltingKey(const std::string& owner_password) { 8666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.CreateSaltingKey(owner_password); 8766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 8866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 89c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn protected: 90c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TrunksFactoryForTest factory_; 910ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi NiceMock<MockBlobParser> mock_blob_parser_; 92c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpmState> mock_tpm_state_; 93c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpm> mock_tpm_; 945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> mock_authorization_delegate_; 95ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi NiceMock<MockHmacSession> mock_hmac_session_; 96a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi NiceMock<MockPolicySession> mock_policy_session_; 975d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TpmUtilityImpl utility_; 98c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 99c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 10003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSuccess) { 1015d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Startup()); 10203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 10303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 10403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupAlreadyStarted) { 10503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 10603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_INITIALIZE)); 1075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Startup()); 10803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 10903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 11003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupFailure) { 11103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 11203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Startup()); 11403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 11503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 11603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSelfTestFailure) { 11703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, SelfTestSync(_, _)) 11803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1195d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Startup()); 12003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 12103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 122d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearSuccess) { 1235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Clear()); 124d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 125d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 126d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearAfterBadInit) { 127d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 128d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_AUTH_MISSING)) 129d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 1305d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Clear()); 131d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 132d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 133d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearFail) { 134d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 135d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Clear()); 137d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 138d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 139e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh SanghiTEST_F(TpmUtilityTest, ShutdownTest) { 140e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ShutdownSync(TPM_SU_CLEAR, _)); 1415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.Shutdown(); 142e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi} 143e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi 144c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmAlreadyInit) { 1455d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 1465d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 147c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 148c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 149c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmSuccess) { 150e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 151e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(YES), 152e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 154c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 155c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 156c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmBadAuth) { 157c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Reject attempts to set platform auth. 158c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_PLATFORM, _, _, _)) 159c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1605d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.InitializeTpm()); 161c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 162c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 163c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmDisablePHFails) { 164e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 165e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(YES), 166e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 16752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to disable the platform hierarchy. 16803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyControlSync(_, _, TPM_RH_PLATFORM, _, _)) 169c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1705d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.InitializeTpm()); 171c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 172c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 173e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRSuccess) { 174e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi TPML_PCR_SELECTION pcr_allocation; 175e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(TPM_RH_PLATFORM, _, _, _, _, _, _, _)) 176e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&pcr_allocation), 177e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi SetArgPointee<3>(YES), 178e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 179e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AllocatePCR("")); 180e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(1, pcr_allocation.count); 181e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_ALG_SHA256, pcr_allocation.pcr_selections[0].hash); 182e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(PCR_SELECT_MIN, pcr_allocation.pcr_selections[0].sizeof_select); 183e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0xFF, pcr_allocation.pcr_selections[0].pcr_select[0]); 184e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0xFF, pcr_allocation.pcr_selections[0].pcr_select[1]); 185e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 186e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 187e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRCommandFailure) { 188e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 189e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 190e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AllocatePCR("")); 191e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 192e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 193e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRTpmFailure) { 194e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 195e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(NO), 196e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 197e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AllocatePCR("")); 198e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 199e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 20052e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipSuccess) { 20152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 20252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 20452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 20652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 20866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 20966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 21052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 21152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 21266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipOwnershipDone) { 21366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 21466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 21566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 21666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 21766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 21866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipBadSession) { 219ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_CALL(mock_hmac_session_, StartUnboundSession(true)) 22066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 22166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 22266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 22366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 22452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 22552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 22666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipFailure) { 22766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 22866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 22966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 23066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 23166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 23266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 23366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 23466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndorsementDone) { 23552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 23666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 23766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 23866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 23966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 24066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 24166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 24252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 24352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 24466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordLockoutDone) { 24552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 24652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 24752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 24852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 24966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 25066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 25166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 25252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 25352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 25466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndorsementLockoutDone) { 25552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 25652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 25766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 25866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 25966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 26066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 26166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 26245e57ff54637d95252144544c3b051107473844eUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndorsementFail) { 26366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 26452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 26566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 26666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 26766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 26852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 26952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 27052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 27166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 27266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 27366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 27452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 27552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 27666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordLockoutFailure) { 27752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 27852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 27952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 28052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 28152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 28252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 28366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 28452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 28552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 28652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 28766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 28866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 28966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 2900f46c15b948ee17f5668c332a25a0dbaecb2cc47Utkarsh Sanghi} 2910f46c15b948ee17f5668c332a25a0dbaecb2cc47Utkarsh Sanghi 2922ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomSuccess) { 2932ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("large test data", 100); 2948b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 2955d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.StirRandom(entropy_data, &mock_authorization_delegate_)); 29652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 29752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2982ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomFails) { 2992ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("test data"); 300c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, nullptr)) 3012ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 302c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.StirRandom(entropy_data, nullptr)); 3032ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3042ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3052ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomSuccess) { 3062ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This number is larger than the max bytes the GetRandom call can return. 3072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // Therefore we expect software to make multiple calls to fill this many 3082ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // bytes. 3092ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 72; 3102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 3112ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST large_random; 3122ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi large_random.size = 32; 3132ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST small_random; 3142ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi small_random.size = 8; 3155d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, &mock_authorization_delegate_)) 3162ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2) 3172ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<1>(large_random), 31852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn Return(TPM_RC_SUCCESS))); 3195d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(8, _, &mock_authorization_delegate_)) 3202ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<1>(small_random), 3212ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GenerateRandom( 3235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi num_bytes, &mock_authorization_delegate_, &random_data)); 3242ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(num_bytes, random_data.size()); 32552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 32652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3272ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomFails) { 3282ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 5; 3292ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 330c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, nullptr)) 3312ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3328b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 333c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.GenerateRandom(num_bytes, nullptr, &random_data)); 33452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 33552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRSuccess) { 3378b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + 1; 338e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi TPML_DIGEST_VALUES digests; 3395d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, 3405d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi PCR_ExtendSync(pcr_handle, _, _, &mock_authorization_delegate_)) 341e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&digests), 342e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 343e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ExtendPCR(1, "test digest", 344e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi &mock_authorization_delegate_)); 345e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(1, digests.count); 346e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_ALG_SHA256, digests.digests[0].hash_alg); 347e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi std::string hash_string = crypto::SHA256HashString("test digest"); 348e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0, memcmp(hash_string.data(), 349e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi digests.digests[0].digest.sha256, 350e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi crypto::kSHA256Length)); 3512ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRFail) { 3542ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 0; 3552ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + pcr_index; 3562ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, _)) 3572ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 358c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 359c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.ExtendPCR(pcr_index, "test digest", nullptr)); 3602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRBadParam) { 363c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ExtendPCR(-1, "test digest", nullptr)); 3642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3652ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRSuccess) { 3672ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // The |pcr_index| is chosen to match the structure for |pcr_select|. 3682ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // If you change |pcr_index|, remember to change |pcr_select|. 3692ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 1; 3702ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3712ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_PCR_SELECTION pcr_select; 3722ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.count = 1; 3732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].hash = TPM_ALG_SHA256; 3742ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].sizeof_select = 1; 3752ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].pcr_select[0] = 2; 3762ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_DIGEST pcr_values; 3772ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.count = 1; 3782ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.digests[0].size = 5; 3792ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3802ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(pcr_select), 3812ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi SetArgPointee<3>(pcr_values), 3822ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3835d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ReadPCR(pcr_index, &pcr_value)); 3842ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3852ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3862ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRFail) { 3872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3882ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3892ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3905d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadPCR(1, &pcr_value)); 3912ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3922ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3932ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRBadReturn) { 3942ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3955d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadPCR(1, &pcr_value)); 39652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 39752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 398b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSuccess) { 399b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 400b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 401b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 402b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 403b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 404b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_ciphertext); 405b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 406b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 407b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4088b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4098b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 410b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 411b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 412b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, 4145d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 415b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 416b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt( 4188b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi key_handle, 4198b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4208b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4218b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi plaintext, 4225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 4238b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &ciphertext)); 424b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, ciphertext.compare(output_ciphertext)); 425b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 426b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 427b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptFail) { 428b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 429b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 430b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 431b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 432b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 433b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4348b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4358b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 436b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 437b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 438b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 439c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 440b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 4415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AsymmetricEncrypt(key_handle, 442b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 4439dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 444b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 445c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 446b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 447b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 448b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 449b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptBadParams) { 450b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 451b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 452b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 453b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 454b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 455b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 456c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, nullptr)) 457b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 458b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4595d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.AsymmetricEncrypt(key_handle, 460b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_RSAES, 4619dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 462b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 463c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 464b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 465b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 4669dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4679dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptNullSchemeForward) { 4689dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4699dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 4709dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 4719dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 4729dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 4739dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 4749dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 4759dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 4769dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4778b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4788b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 4799dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 4809dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 4819dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 4829dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 483c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 4849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 4859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 4869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4875d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt(key_handle, 4889dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4899dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4909dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 491c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 4929dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 4939dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 4949dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 4959dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 4969dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4979dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSchemeForward) { 4989dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4999dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 5009dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 5019dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 5029dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 5039dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 5049dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 5059dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 5069dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5078b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5088b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 5099dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 5109dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 5119dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 5129dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 513c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 5149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 5159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 5169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt(key_handle, 5189dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_RSAES, 5199dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 5209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 521c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 5229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 5239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 5249dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 5259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 526b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSuccess) { 527b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 528b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 529b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_plaintext("plaintext"); 530b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 5312ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 532b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 533b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_plaintext); 534b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 535b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 536b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5378b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5388b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 539b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 540b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 541b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, 5435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 544b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 545b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5465d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 5475d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi key_handle, 5485d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 5495d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 5505d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi ciphertext, 5515d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 5525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &plaintext)); 553b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, plaintext.compare(output_plaintext)); 554b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 555b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 556b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptFail) { 557b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 558b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 559b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 560b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 561b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 562b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 563b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 564b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5658b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5668b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 567b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 568b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 569b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 570b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 571b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 5725d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AsymmetricDecrypt( 5731ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5741ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5751ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5761ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5775d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 5781ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 579b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 580b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 581b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadParams) { 582b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 583b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 584b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 585b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 586b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 587b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 588b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 589b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 590b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 591b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 592b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.AsymmetricDecrypt( 5941ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5951ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 5961ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5971ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5985d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 5991ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 600b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 601b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 6022ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadSession) { 6031ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 6042ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string key_name; 6052ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string plaintext; 6062ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string ciphertext; 6072ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 6085d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.AsymmetricDecrypt( 609c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, TPM_ALG_RSAES, TPM_ALG_NULL, 610c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi ciphertext, nullptr, &plaintext)); 6112ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 6122ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 6139dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptNullSchemeForward) { 6149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6179dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6189dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6199dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6219dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6248b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6258b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6269dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6279dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6289dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6299dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6329dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6345d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 6351ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6361ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6371ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6381ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6395d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 6401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6419dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 6429dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 6439dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6449dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 6459dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSchemeForward) { 6469dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6479dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6489dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6499dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6509dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6519dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6529dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6539dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6549dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6559dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6568b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6578b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6589dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6599dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6609dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6619dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6629dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6639dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6649dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6659dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6665d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 6671ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6681ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 6691ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6701ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6715d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 6721ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6739dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 6749dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6759dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 676748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSuccess) { 677748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 6782ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 679e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 680748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 681748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 2; 682748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[0] = 'h'; 683748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[1] = 'i'; 684748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 685748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 686748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 687748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 6888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6898b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 690748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 691748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 692748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 6935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, 6945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 695748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 696748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 6975d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 6985d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 6995d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7005d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7015d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7025d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 703748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(0, signature.compare("hi")); 704748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 705748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 706748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignFail) { 707748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 708748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 709e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 710748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 711748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 712748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 713748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 7148b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 7158b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 716748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 717748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 718748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 719748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 720748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 7215d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Sign(key_handle, 7225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 727748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 728748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 729748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams1) { 730748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 731748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 732e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 733748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 734748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 735748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 736748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 737748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 738748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 739748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7405d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 7415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7445d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7455d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 746748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 747748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 7482ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, SignBadAuthorizationSession) { 7491ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 7502ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 7512ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string digest(32, 'a'); 7522ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string signature; 7535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.Sign(key_handle, 7545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7555d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7565d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 757c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 7585d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 7592ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 7602ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 761748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams2) { 762748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 763748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 764e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 765748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 766748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 767748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 768748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 769748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 770748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 771748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7725d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 7735d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7745d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7755d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7765d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7775d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 778748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 779748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 780748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams3) { 781748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 782748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 783e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 784748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 785748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 786748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 787748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 788748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 789748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 790748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7915d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 7925d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7955d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7965d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 797748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 798748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 799748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams4) { 800748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 801748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 802e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 803748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 804748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 805748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 806748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 807748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 808748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 809748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 8105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Sign(key_handle, 8115d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 8125d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8145d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8155d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 816748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 817748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 818748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams5) { 819748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle = 0; 820748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 821e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 822748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 8235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 8245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_AES, 8255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8275d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8285d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 829748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 830748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 831748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 832748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignNullSchemeForward) { 833748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 834748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 835e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 836748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 837748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 838748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 839748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 840748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 841748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 842748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8438b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8448b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 845748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 846748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 847748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 848748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 849748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 850748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 851748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 8525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 8535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8555d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8565d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8575d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 858748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSASSA); 859748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.details.rsassa.hash_alg, TPM_ALG_SHA256); 860748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 861748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 862748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSchemeForward) { 863748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 864748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 865e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 866748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 867748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 868748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 869748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 870748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 871748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 872748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8738b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8748b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 875748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 876748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 877748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 878748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 879748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 880748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 881748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 8825d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 8835d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 8845d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_SHA1, 8855d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8865d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8875d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 888748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAPSS); 889887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(scheme.details.rsapss.hash_alg, TPM_ALG_SHA1); 890748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 891748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 892748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySuccess) { 893748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 894e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 895748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 896748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 897748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 898748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 899748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 900748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 901748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 902748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 903748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 9045d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 9055d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9065d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9086f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9096f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 910748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 911748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 912748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyFail) { 913748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 914e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 915748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 916748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 917748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 918748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 919748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 920748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 921748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 922748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 923748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 9245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Verify(key_handle, 9255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9275d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9286f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9296f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 930748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 931748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 932748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams1) { 933748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 934e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 935748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 936748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 937748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 938748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 939748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 940748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 941748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9445d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9455d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9466f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9476f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 948748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 949748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 950748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams2) { 951748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 952e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 953748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 954748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 955748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 956748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 957748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 958748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 959748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9605d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9615d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9625d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9646f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9656f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 966748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 967748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 968748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams3) { 969748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 970e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 971748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 972748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 973748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 974748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 975748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 976748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 977748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9785d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9795d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9805d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9815d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9826f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9836f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 984748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 985748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 986748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams4) { 987748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 988e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 989748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 990748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 991748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 992748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 993748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 994748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 995748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 9965d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Verify(key_handle, 9975d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9985d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9995d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10006f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10016f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1002748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1003748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1004748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams5) { 1005748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1006e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1007748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1008748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1009748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1010748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1011748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1012748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1013748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10145d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 10155d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_AES, 10165d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10186f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10196f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1020748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1021748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1022748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyNullSchemeForward) { 1023748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1024e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1025748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1026748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1027748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1028748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1029748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1030748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1031748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1032748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1033748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1034748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1035748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 10375d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10385d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10395d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10406f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10416f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1042748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSASSA); 1043748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA256); 1044748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1045748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1046748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySchemeForward) { 1047748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1048e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 1049748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1050748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1051748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1052748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1053748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1054748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1055748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1056748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1057748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1058748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1059748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10605d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 10615d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 10625d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_SHA1, 10635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10646f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10656f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1066748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSAPSS); 1067887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA1); 1068748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1069748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1070fded77411da5ef66dff7389e49f40900c19d510cUtkarsh SanghiTEST_F(TpmUtilityTest, CertifyCreationSuccess) { 1071fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi TPM_HANDLE key_handle = 42; 1072fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi std::string creation_blob; 1073fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CertifyCreationSyncShort(TPM_RH_NULL, key_handle, 1074fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi _, _, _, _, _, _, _)) 1075fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 1076fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 1077fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi utility_.CertifyCreation(key_handle, creation_blob)); 1078fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi} 1079fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi 1080fded77411da5ef66dff7389e49f40900c19d510cUtkarsh SanghiTEST_F(TpmUtilityTest, CertifyCreationParserError) { 1081fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi TPM_HANDLE key_handle = 42; 1082fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi std::string creation_blob; 1083fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, ParseCreationBlob(creation_blob, _, _, _)) 1084fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi .WillOnce(Return(false)); 1085fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 1086fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi utility_.CertifyCreation(key_handle, creation_blob)); 1087fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi} 1088fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi 1089fded77411da5ef66dff7389e49f40900c19d510cUtkarsh SanghiTEST_F(TpmUtilityTest, CertifyCreationFailure) { 1090fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi TPM_HANDLE key_handle = 42; 1091fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi std::string creation_blob; 1092fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CertifyCreationSyncShort(TPM_RH_NULL, key_handle, 1093fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi _, _, _, _, _, _, _)) 1094fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1095fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1096fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi utility_.CertifyCreation(key_handle, creation_blob)); 1097fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi} 1098fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi 109933ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataSuccess) { 110033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 110133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 11020ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string key_blob; 11030ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM2B_PUBLIC public_area; 11040ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 11050ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi public_area.public_area.auth_policy.size = 0; 11060ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 11070ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 11080ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 11090ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 11105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ChangeKeyAuthorizationData( 11110ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, &key_blob)); 111233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 111333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 111433ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataKeyNameFail) { 111533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 111633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string old_password; 111733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 111833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 111933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 11205d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ChangeKeyAuthorizationData( 1121c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, nullptr)); 112233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 112333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 112433ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataFailure) { 112533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 112633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 112733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ObjectChangeAuthSync(key_handle, _, _, _, _, _, _)) 112833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 11295d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ChangeKeyAuthorizationData( 1130c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, nullptr)); 113133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 113233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 11330ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataParserFail) { 113433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 113533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 113633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 11378b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM2B_PUBLIC public_area; 11388b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 11398b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 11408b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 11418b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 11428b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 11438b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 11440ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, SerializeKeyBlob(_, _, &key_blob)) 11450ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillOnce(Return(false)); 11460ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.ChangeKeyAuthorizationData( 11475d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, &key_blob)); 114833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 114933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 115033ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccess) { 115133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 115233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 115333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 115433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password("password"); 115533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 115633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DATA encryption_key; 115733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PUBLIC public_data; 115833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PRIVATE private_data; 115933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 116033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&encryption_key), 116133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<3>(&public_data), 116233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<4>(&private_data), 116333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 11645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ImportRSAKey( 116533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11661ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11671ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11681ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11691ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11705d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 11711ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &key_blob)); 117233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate that the public area was properly constructed. 117333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.key_bits, 117433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.size() * 8); 117533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.exponent, 117633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi public_exponent); 117733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.unique.rsa.size, modulus.size()); 117833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_data.public_area.unique.rsa.buffer, 117933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.data(), modulus.size())); 118033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate the private struct construction. 118133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(kAesKeySize, encryption_key.size); 118233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_KEY key; 118333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_set_encrypt_key(encryption_key.buffer, kAesKeySize * 8, &key); 118433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi unsigned char iv[MAX_AES_BLOCK_SIZE_BYTES] = {0}; 118533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi int iv_in = 0; 118633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string unencrypted_private(private_data.size, 0); 118733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_cfb128_encrypt( 118833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<const unsigned char*>(private_data.buffer), 118933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<unsigned char*>(string_as_array(&unencrypted_private)), 119033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi private_data.size, &key, iv, &iv_in, AES_DECRYPT); 119133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DIGEST inner_integrity; 119233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_DIGEST(&unencrypted_private, 1193c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi &inner_integrity, nullptr)); 119433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string object_name; 11956537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 11965d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi ComputeKeyName(public_data.public_area, &object_name)); 119733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string integrity_value = crypto::SHA256HashString(unencrypted_private + 119833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi object_name); 119933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(integrity_value.size(), inner_integrity.size); 120033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(inner_integrity.buffer, 120133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi integrity_value.data(), 120233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi inner_integrity.size)); 120333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_SENSITIVE sensitive_data; 120433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_SENSITIVE(&unencrypted_private, 1205c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi &sensitive_data, nullptr)); 120633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.auth_value.size, password.size()); 120733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.auth_value.buffer, 120833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi password.data(), password.size())); 120933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.sensitive.rsa.size, 121033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.size()); 121133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.sensitive.rsa.buffer, 121233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.data(), prime_factor.size())); 121333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 121433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 121533ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccessWithNoBlob) { 121633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 121733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 121833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 121933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 12205d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ImportRSAKey( 122133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12221ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12231ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 12241ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12251ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1227c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 122833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 122933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 123033ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyParentNameFail) { 123133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 123233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 123333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 123433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 123533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 123633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12375d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ImportRSAKey( 123833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 12411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12421ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1244c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 124533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 124633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 124733ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyFail) { 124833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus; 124933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor; 125033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 125133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 125233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ImportRSAKey( 125433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12551ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12561ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi 0x10001, 12571ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12581ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12595d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1260c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 126133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 126233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 12630ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyParserFail) { 12640ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string modulus; 12650ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string prime_factor; 12660ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string password; 12670ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string key_blob; 12680ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, SerializeKeyBlob(_, _, &key_blob)) 12690ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillOnce(Return(false)); 12700ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.ImportRSAKey( 12710ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12720ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi modulus, 12730ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 0x10001, 12740ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi prime_factor, 12750ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi password, 12760ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi &mock_authorization_delegate_, 12770ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi &key_blob)); 12780ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 12790ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 12806f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairSuccess) { 128182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 12820ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPML_PCR_SELECTION creation_pcrs; 12836f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 12846f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 12855d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 128682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 12870ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi SaveArg<3>(&creation_pcrs), 128882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 12896f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 1290a5a2f2ea49e0085bf8d7f6f2b6e7cd624d710c01Utkarsh Sanghi std::string creation_blob; 12910ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi int creation_pcr = 12; 12926f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 12936f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptAndSignKey, 2048, 0x10001, 12940ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "password", "", false, creation_pcr, &mock_authorization_delegate_, 12950ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi &key_blob, &creation_blob)); 129682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 12976f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 12986ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kUserWithAuth, 12996ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi kUserWithAuth); 13006ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kAdminWithPolicy, 0); 130182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1302e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 13030ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(1, creation_pcrs.count); 13040ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(TPM_ALG_SHA256, creation_pcrs.pcr_selections[0].hash); 13050ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(PCR_SELECT_MIN, creation_pcrs.pcr_selections[0].sizeof_select); 13060ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(1 << (creation_pcr % 8), 13070ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi creation_pcrs.pcr_selections[0].pcr_select[creation_pcr / 8]); 130882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 130982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13106f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairDecryptKeySuccess) { 131182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 13126f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 13136f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 13146f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 131582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 131682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 13176f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13186f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 1319a5a2f2ea49e0085bf8d7f6f2b6e7cd624d710c01Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 2048, 0x10001, "password", 13200ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "", false, kNoCreationPCR, &mock_authorization_delegate_, &key_blob, 13210ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi nullptr)); 13226f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 13236f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, 0); 132482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1325e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 132682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 132782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13286f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairSignKeySuccess) { 132982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 13306f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM2B_SENSITIVE_CREATE sensitive_create; 13316f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 13326f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 13336f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 13346f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi .WillOnce(DoAll(SaveArg<1>(&sensitive_create), 13356f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi SaveArg<2>(&public_area), 133682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 13376f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13386f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string policy_digest(32, 'a'); 13396f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_auth("password"); 13406f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 13416f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, key_auth, 13420ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi policy_digest, true /* use_only_policy_authorization */, kNoCreationPCR, 1343a5a2f2ea49e0085bf8d7f6f2b6e7cd624d710c01Utkarsh Sanghi &mock_authorization_delegate_, &key_blob, nullptr)); 13446f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, 0); 134582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 13466ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kUserWithAuth, 0); 13476ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kAdminWithPolicy, 13486ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi kAdminWithPolicy); 134982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 135082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_ALG_NULL); 13516f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.key_bits, 2048); 13526f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.exponent, 0x10001); 13536f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.auth_policy.size, policy_digest.size()); 13546f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_area.public_area.auth_policy.buffer, 13556f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi policy_digest.data(), policy_digest.size())); 13566f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(sensitive_create.sensitive.user_auth.size, key_auth.size()); 13576f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_create.sensitive.user_auth.buffer, 13586f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_auth.data(), key_auth.size())); 135982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 136082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13616f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairBadDelegate) { 13626f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13636f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.CreateRSAKeyPair( 13646f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 2048, 0x10001, "password", 13650ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "", false, kNoCreationPCR, nullptr, &key_blob, nullptr)); 13666f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 13676f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 13686f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairFailure) { 13696f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 13706f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 13716f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 137282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 13736f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13746f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.CreateRSAKeyPair( 13756f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, "password", 13760ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "", false, kNoCreationPCR, &mock_authorization_delegate_, &key_blob, 13770ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi nullptr)); 13780ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 13790ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 13800ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairKeyParserFail) { 13810ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string key_blob; 13820ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, SerializeKeyBlob(_, _, &key_blob)) 13830ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillOnce(Return(false)); 13840ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.CreateRSAKeyPair( 13850ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, "password", 13860ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "", false, kNoCreationPCR, &mock_authorization_delegate_, &key_blob, 13870ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi nullptr)); 13880ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 13890ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 13900ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairCreationParserFail) { 13910ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string creation_blob; 13920ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string key_blob; 13930ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, SerializeCreationBlob(_, _, _, &creation_blob)) 13940ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillOnce(Return(false)); 13950ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.CreateRSAKeyPair( 13960ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, "password", 13970ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi "", false, kNoCreationPCR, &mock_authorization_delegate_, &key_blob, 13980ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi &creation_blob)); 139982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 140082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 14016f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeySuccess) { 14026f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 14036f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE loaded_handle; 14046f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(kRSAStorageRootKey, _, _, _, _, _, 14056f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 14066f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<4>(key_handle), 14076f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 14086f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 14096f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.LoadKey( 14106f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, &mock_authorization_delegate_, &loaded_handle)); 14116f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(loaded_handle, key_handle); 14126f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 14136f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 14146f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeyFailure) { 141582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 141682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 141782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 14186f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 14196f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.LoadKey( 14206f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, &mock_authorization_delegate_, &key_handle)); 14216f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 14226f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 14236f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeyBadDelegate) { 14246f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE key_handle; 14256f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 14266f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.LoadKey( 14276f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, nullptr, &key_handle)); 142882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 142982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 14300ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh SanghiTEST_F(TpmUtilityTest, LoadKeyParserFail) { 14310ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM_HANDLE key_handle; 14320ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string key_blob; 14330ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_CALL(mock_blob_parser_, ParseKeyBlob(key_blob, _, _)) 14340ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi .WillOnce(Return(false)); 14350ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.LoadKey( 14360ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi key_blob, &mock_authorization_delegate_, &key_handle)); 14370ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 14386f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 1439a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, SealedDataSuccess) { 1440a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string data_to_seal("seal_data"); 1441a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1442a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM2B_SENSITIVE_CREATE sensitive_create; 1443a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM2B_PUBLIC in_public; 1444a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, _, _, 1445a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi _, _, _, _, _, _, _)) 1446a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SaveArg<1>(&sensitive_create), 1447a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi SaveArg<2>(&in_public), 1448a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1449a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.SealData( 1450a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi data_to_seal, "", &mock_authorization_delegate_, &sealed_data)); 1451a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(sensitive_create.sensitive.data.size, data_to_seal.size()); 1452a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_create.sensitive.data.buffer, 1453a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi data_to_seal.data(), data_to_seal.size())); 1454a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(in_public.public_area.type, TPM_ALG_KEYEDHASH); 1455a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(in_public.public_area.name_alg, TPM_ALG_SHA256); 1456a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1457a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1458a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, SealDataBadDelegate) { 1459a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string data_to_seal("seal_data"); 1460a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1461a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.SealData( 1462a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi data_to_seal, "", nullptr, &sealed_data)); 1463a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1464a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1465a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, SealDataFailure) { 1466a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string data_to_seal("seal_data"); 1467a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1468a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, _, _, 1469a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi _, _, _, _, _, _, _)) 1470a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1471a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.SealData( 1472a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi data_to_seal, "", &mock_authorization_delegate_, &sealed_data)); 1473a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1474a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1475a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, SealDataParserFail) { 1476a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string data_to_seal("seal_data"); 1477a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1478a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_blob_parser_, SerializeKeyBlob(_, _, &sealed_data)) 1479a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(false)); 1480a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_TCTI_STRUCTURE, utility_.SealData( 1481a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi data_to_seal, "", &mock_authorization_delegate_, &sealed_data)); 1482a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1483a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1484a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, UnsealDataSuccess) { 1485a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1486b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi std::string tpm_unsealed_data("password"); 1487a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string unsealed_data; 1488a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM_HANDLE object_handle = 42; 1489b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi TPM2B_PUBLIC public_data; 1490b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi public_data.public_area.auth_policy.size = 0; 1491b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 1492b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_data), 1493b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1494b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(object_handle, _, _, _, _, _)) 1495b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_data), 1496b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1497a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 1498a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<4>(object_handle), 1499a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1500b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi TPM2B_SENSITIVE_DATA out_data = Make_TPM2B_SENSITIVE_DATA(tpm_unsealed_data); 1501a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, UnsealSync(object_handle, _, _, _)) 1502b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(out_data), 1503b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1504a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.UnsealData( 1505a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi sealed_data, &mock_authorization_delegate_, &unsealed_data)); 1506b23865882e3420660d7aad6e89bcc33f30230d88Utkarsh Sanghi EXPECT_EQ(unsealed_data, tpm_unsealed_data); 1507a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1508a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1509a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, UnsealDataBadDelegate) { 1510a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1511a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string unsealed_data; 1512a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.UnsealData( 1513a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi sealed_data, nullptr, &unsealed_data)); 1514a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1515a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1516a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, UnsealDataLoadFail) { 1517a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1518a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string unsealed_data; 1519a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 1520a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1521a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.UnsealData( 1522a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi sealed_data, &mock_authorization_delegate_, &unsealed_data)); 1523a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1524a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1525a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, UnsealDataBadKeyName) { 1526a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1527a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string unsealed_data; 1528a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 1529a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1530a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.UnsealData( 1531a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi sealed_data, &mock_authorization_delegate_, &unsealed_data)); 1532a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1533a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1534a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, UnsealObjectFailure) { 1535a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string sealed_data; 1536a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string unsealed_data; 1537a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, UnsealSync(_, _, _, _)) 1538a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1539a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.UnsealData( 1540a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi sealed_data, &mock_authorization_delegate_, &unsealed_data)); 1541a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1542a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1543a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, StartSessionSuccess) { 1544a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_hmac_session_, StartUnboundSession(true)) 1545a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 1546a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 1547a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.StartSession(&mock_hmac_session_)); 1548a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1549a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1550a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, StartSessionFailure) { 1551a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_hmac_session_, StartUnboundSession(true)) 1552a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1553a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1554a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.StartSession(&mock_hmac_session_)); 1555a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1556a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1557a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValueSuccess) { 1558a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1559a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string pcr_value("pcr_value"); 1560a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1561a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPML_PCR_SELECTION pcr_select; 1562a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_select.count = 1; 1563a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_select.pcr_selections[0].hash = TPM_ALG_SHA256; 1564a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_select.pcr_selections[0].sizeof_select = 1; 1565a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_select.pcr_selections[0].pcr_select[index / 8] = 1 << (index % 8); 1566a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPML_DIGEST pcr_values; 1567a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_values.count = 1; 1568a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi pcr_values.digests[0] = Make_TPM2B_DIGEST(pcr_value); 1569a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 1570a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(pcr_select), 1571a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi SetArgPointee<3>(pcr_values), 1572a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1573a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string tpm_pcr_value; 1574a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, PolicyPCR(index, _)) 1575a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SaveArg<1>(&tpm_pcr_value), 1576a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1577a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string tpm_policy_digest("digest"); 1578a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, GetDigest(_)) 1579a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<0>(tpm_policy_digest), 1580a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1581a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 1582a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, "", &policy_digest)); 1583a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(policy_digest, tpm_policy_digest); 1584a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(pcr_value, tpm_pcr_value); 1585a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1586a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1587a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValueSuccessWithPcrValue) { 1588a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1589a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string pcr_value("pcr_value"); 1590a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1591a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string tpm_pcr_value; 1592a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, PolicyPCR(index, _)) 1593a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SaveArg<1>(&tpm_pcr_value), 1594a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1595a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string tpm_policy_digest("digest"); 1596a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, GetDigest(_)) 1597a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<0>(tpm_policy_digest), 1598a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 1599a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 1600a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, pcr_value, &policy_digest)); 1601a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(policy_digest, tpm_policy_digest); 1602a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(pcr_value, tpm_pcr_value); 1603a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1604a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1605a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValueBadSession) { 1606a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1607a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string pcr_value("value"); 1608a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1609a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, StartUnboundSession(false)) 1610a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1611a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1612a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, pcr_value, &policy_digest)); 1613a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1614a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1615a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValuePcrReadFail) { 1616a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1617a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1618a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 1619a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1620a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1621a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, "", &policy_digest)); 1622a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1623a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1624a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValueBadPcr) { 1625a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1626a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string pcr_value("value"); 1627a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1628a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, PolicyPCR(index, _)) 1629a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1630a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1631a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, pcr_value, &policy_digest)); 1632a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1633a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 1634a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh SanghiTEST_F(TpmUtilityTest, GetPolicyDigestForPcrValueBadDigest) { 1635a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi int index = 5; 1636a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string pcr_value("value"); 1637a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string policy_digest; 1638a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_CALL(mock_policy_session_, GetDigest(&policy_digest)) 1639a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1640a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 1641a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi utility_.GetPolicyDigestForPcrValue(index, pcr_value, &policy_digest)); 1642a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi} 1643a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 164439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceSuccess) { 164539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 164639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 164739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 164839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM2B_NV_PUBLIC public_data; 164939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 165039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&public_data), 165139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 16525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.DefineNVSpace( 16535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, length, &mock_authorization_delegate_)); 165439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.nv_index, nvram_index); 165539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.name_alg, TPM_ALG_SHA256); 165639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.attributes, 16572da8ff25e7c88c78e8a9db8de9686c92817f0992Darren Krahn TPMA_NV_NO_DA | TPMA_NV_OWNERWRITE | TPMA_NV_WRITEDEFINE | 16582da8ff25e7c88c78e8a9db8de9686c92817f0992Darren Krahn TPMA_NV_AUTHREAD); 165939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.data_size, length); 166039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 166139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 166239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadLength) { 166339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t bad_length = 3000; 166439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, 16655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(0, bad_length, &mock_authorization_delegate_)); 166639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 166739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 166839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadIndex) { 166939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 167039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 16715d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(bad_index, 2, &mock_authorization_delegate_)); 167239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 167339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 167439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadSession) { 1675c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.DefineNVSpace(0, 2, nullptr)); 167639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 167739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 167839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceFail) { 167939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 168039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 168139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 168239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 168339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 16845d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(index, length, &mock_authorization_delegate_)); 168539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 168639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 168739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceSuccess) { 168839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 168939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 169039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 169139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)); 169239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 16935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(index, &mock_authorization_delegate_)); 169439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 169539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 169639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadIndex) { 169739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 169839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 16995d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(bad_index, &mock_authorization_delegate_)); 170039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 170139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 170239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadSession) { 1703c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.DestroyNVSpace(3, nullptr)); 170439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 170539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 170639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceFailure) { 170739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 170839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 170939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 171039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)) 171139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 171239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 17135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(index, &mock_authorization_delegate_)); 171439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 171539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 171639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceSuccess) { 171739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 171839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 17192da8ff25e7c88c78e8a9db8de9686c92817f0992Darren Krahn EXPECT_CALL(mock_tpm_, NV_WriteLockSync(TPM_RH_OWNER, _, nvram_index, _, _)) 172039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 172139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 17225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(index, &mock_authorization_delegate_)); 17236537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 17245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(index, &public_area)); 17256537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITELOCKED, TPMA_NV_WRITELOCKED); 172639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 172739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 172839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadIndex) { 172939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 173039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 17315d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(bad_index, &mock_authorization_delegate_)); 173239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 173339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 173439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadSession) { 1735c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.LockNVSpace(52, nullptr)); 173639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 173739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 173839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceFailure) { 173939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 174039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 17412da8ff25e7c88c78e8a9db8de9686c92817f0992Darren Krahn EXPECT_CALL(mock_tpm_, NV_WriteLockSync(TPM_RH_OWNER, _, nvram_index, _, _)) 174239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 174339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 17445d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(index, &mock_authorization_delegate_)); 174539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 174639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 174739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceSuccess) { 174839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 174939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 175039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 175139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 175239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 175339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 17545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.WriteNVSpace( 17555d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, "", &mock_authorization_delegate_)); 17566537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 17575d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(index, &public_area)); 17586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITTEN, TPMA_NV_WRITTEN); 175939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 176039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 176139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSize) { 176239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 176339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data(1025, 0); 17645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility_.WriteNVSpace( 17655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, 0, nvram_data, &mock_authorization_delegate_)); 176639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 176739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 176839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadIndex) { 176939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 17705d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.WriteNVSpace( 17715d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi bad_index, 0, "", &mock_authorization_delegate_)); 177239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 177339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 177439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSessions) { 1775c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 1776c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.WriteNVSpace(53, 0, "", nullptr)); 177739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 177839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 177939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceFailure) { 178039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 178139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 178239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 178339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 178439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 178539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 17865d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.WriteNVSpace( 17875d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, "", &mock_authorization_delegate_)); 178839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 178939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 179039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceSuccess) { 179139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 179239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 179339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 179439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 179539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 179639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 179739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 179839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 17995d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ReadNVSpace( 18005d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_delegate_)); 180139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 180239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 180339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadReadLength) { 180439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 1025; 180539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 18065d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility_.ReadNVSpace( 18075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi 52, 0, length, &nvram_data, &mock_authorization_delegate_)); 180839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 180939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 181039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadIndex) { 181139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 181239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 18135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.ReadNVSpace( 18145d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi bad_index, 0, 5, &nvram_data, &mock_authorization_delegate_)); 181539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 181639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 181739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadSession) { 181839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 181939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 1820c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.ReadNVSpace(53, 0, 5, &nvram_data, nullptr)); 182139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 182239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 182339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceFailure) { 182439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 182539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 182639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 182739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 182839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 182939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 183039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 183139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 18325d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadNVSpace( 18335d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_delegate_)); 183439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 183539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 183639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameSuccess) { 183739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 183839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 183939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 184039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 184139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 18425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpaceName(index, &name)); 184339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 184439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 184539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameFailure) { 184639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 184739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 184839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 184939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 18505d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.GetNVSpaceName(index, &name)); 185139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 185239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 18536537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaCachedSuccess) { 18546537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi uint32_t index = 53; 18556537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 18565d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi SetNVRAMMap(index, public_area); 18576537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 18586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi .Times(0); 18595d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpacePublicArea(index, &public_area)); 18606537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi} 18616537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 186239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaSuccess) { 186339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 186439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 186539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 186639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 186739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 18685d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpacePublicArea(index, &public_area)); 186939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 187039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 187139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaFailure) { 187239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 187339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 187439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 187539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 18765d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.GetNVSpacePublicArea(index, &public_area)); 187739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 187839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 187966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordSuccess) { 188066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 188166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(false)); 188266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 188366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 188466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, SetKnownOwnerPassword("password")); 188566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 188666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 188766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordOwnershipDone) { 188866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, SetKnownOwnerPassword("password")); 188966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 189066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 189166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordFailure) { 189266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 189366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(false)); 189466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 189566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 189666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, SetKnownOwnerPassword("password")); 189766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 189866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 189966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysSuccess) { 190066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 190166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 190266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 190366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 190466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 190566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 190666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysHandleConsistency) { 190766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_HANDLE test_handle = 42; 190866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 190966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 191066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 191166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 191266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<3>(test_handle), 191366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 191466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 191566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 191666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 191766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 191866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 191966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysCreateFailure) { 192066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 192166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 192266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 192366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 192466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys("password")); 192566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 192666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 192766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysPersistFailure) { 192866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 192966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 193066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 193166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 193266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys("password")); 193366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 193466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 193566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysAlreadyExist) { 193666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 193766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 193866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 193966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 194066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 194166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 194266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeySuccess) { 194366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 194466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 194566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 194666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 194712a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr TPM2B_PUBLIC public_area; 194812a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 194912a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr .WillOnce(DoAll(SaveArg<2>(&public_area), 195012a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr Return(TPM_RC_SUCCESS))); 195166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 195212a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr EXPECT_EQ(TPM_ALG_SHA256, public_area.public_area.name_alg); 195366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 195466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 195566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyConsistency) { 195666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 195766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 195866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 195966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 196045e57ff54637d95252144544c3b051107473844eUtkarsh Sanghi TPM_HANDLE test_handle = 42; 196166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 196266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<4>(test_handle), 196366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 196466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 196566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 196666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 196766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 196866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 196966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyCreateFailure) { 197066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 197166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 197266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 197366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 197466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 197566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 197666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 197766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 197866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 197966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyLoadFailure) { 198066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 198166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 198266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 198366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 198466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 198566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 198666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 198766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 198866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 198966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyPersistFailure) { 199066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 199166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 199266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 199366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 199466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 199566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 199666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 199766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 199866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 199966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyAlreadyExists) { 200066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 200166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 200266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 200366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 200466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 2005c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 2006