tpm_utility_test.cc revision 12a12083abb8fc9b1bd9ac69e2be983bb7227818
1c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved. 2c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Use of this source code is governed by a BSD-style license that can be 3c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// found in the LICENSE file. 4c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <base/stl_util.h> 633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <crypto/sha2.h> 7c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gmock/gmock.h> 8c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gtest/gtest.h> 933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include <openssl/aes.h> 10c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 11b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi#include "trunks/error_codes.h" 1233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi#include "trunks/hmac_authorization_delegate.h" 13b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi#include "trunks/mock_authorization_delegate.h" 14ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_hmac_session.h" 15c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm.h" 16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm_state.h" 1739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi#include "trunks/tpm_constants.h" 18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility_impl.h" 19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory_for_test.h" 20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 21c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::_; 22e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghiusing testing::DoAll; 23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::NiceMock; 24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::Return; 25748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghiusing testing::SaveArg; 26e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghiusing testing::SetArgPointee; 27c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 28c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks { 29c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// A test fixture for TpmUtility tests. 31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmUtilityTest : public testing::Test { 32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public: 335d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TpmUtilityTest() : utility_(factory_) {} 34295e851b66fb19c05a14401e834337962a58c493Darren Krahn ~TpmUtilityTest() override {} 35295e851b66fb19c05a14401e834337962a58c493Darren Krahn void SetUp() override { 36c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm_state(&mock_tpm_state_); 37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm(&mock_tpm_); 38ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi factory_.set_hmac_session(&mock_hmac_session_); 39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 406537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_RC ComputeKeyName(const TPMT_PUBLIC& public_area, 426537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi std::string* object_name) { 435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return utility_.ComputeKeyName(public_area, object_name); 446537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 456537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 465d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi void SetNVRAMMap(uint32_t index, 476537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const TPMS_NV_PUBLIC& public_area) { 485d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.nvram_public_area_map_[index] = public_area; 496537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 506537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 515d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_RC GetNVRAMMap(uint32_t index, 526537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC* public_area) { 535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi auto it = utility_.nvram_public_area_map_.find(index); 545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi if (it == utility_.nvram_public_area_map_.end()) { 556537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_FAILURE; 566537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 576537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi *public_area = it->second; 586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_SUCCESS; 596537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 606537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 6166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC SetKnownOwnerPassword(const std::string& owner_password) { 6266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.SetKnownOwnerPassword(owner_password); 6366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 6466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 6566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC CreateStorageRootKeys(const std::string& owner_password) { 6666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.CreateStorageRootKeys(owner_password); 6766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 6866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 6966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_RC CreateSaltingKey(const std::string& owner_password) { 7066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi return utility_.CreateSaltingKey(owner_password); 7166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi } 7266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 73c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn protected: 74c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TrunksFactoryForTest factory_; 75c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpmState> mock_tpm_state_; 76c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpm> mock_tpm_; 775d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> mock_authorization_delegate_; 78ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi NiceMock<MockHmacSession> mock_hmac_session_; 795d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TpmUtilityImpl utility_; 80c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 81c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 8203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSuccess) { 835d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Startup()); 8403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 8503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 8603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupAlreadyStarted) { 8703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 8803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_INITIALIZE)); 895d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Startup()); 9003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 9103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 9203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupFailure) { 9303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 9403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 955d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Startup()); 9603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 9703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 9803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSelfTestFailure) { 9903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, SelfTestSync(_, _)) 10003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1015d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Startup()); 10203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 10303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 104d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearSuccess) { 105d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 106d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 1075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Clear()); 108d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 109d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 110d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearAfterBadInit) { 111d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 112d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_AUTH_MISSING)) 113d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 1145d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Clear()); 115d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 116d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 117d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearFail) { 118d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 119d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 1205d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Clear()); 121d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 122d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 123e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh SanghiTEST_F(TpmUtilityTest, ShutdownTest) { 124e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ShutdownSync(TPM_SU_CLEAR, _)); 1255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.Shutdown(); 126e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi} 127e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi 128c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmAlreadyInit) { 1295d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 1305d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 131c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 132c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 133c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmSuccess) { 134c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 135c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 136c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 137e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 138e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(YES), 139e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1405d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.InitializeTpm()); 141c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 142c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 143c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmBadAuth) { 144c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 145c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 146c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 147c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Reject attempts to set platform auth. 148c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_PLATFORM, _, _, _)) 149c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1505d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.InitializeTpm()); 151c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 152c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 153c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmDisablePHFails) { 154c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 155c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 156c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 157e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 158e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(YES), 159e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 16052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to disable the platform hierarchy. 16103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyControlSync(_, _, TPM_RH_PLATFORM, _, _)) 162c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 1635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.InitializeTpm()); 164c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 165c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 166e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRSuccess) { 167e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi TPML_PCR_SELECTION pcr_allocation; 168e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(TPM_RH_PLATFORM, _, _, _, _, _, _, _)) 169e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&pcr_allocation), 170e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi SetArgPointee<3>(YES), 171e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 172e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AllocatePCR("")); 173e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(1, pcr_allocation.count); 174e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_ALG_SHA256, pcr_allocation.pcr_selections[0].hash); 175e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(PCR_SELECT_MIN, pcr_allocation.pcr_selections[0].sizeof_select); 176e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0xFF, pcr_allocation.pcr_selections[0].pcr_select[0]); 177e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0xFF, pcr_allocation.pcr_selections[0].pcr_select[1]); 178e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 179e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 180e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRCommandFailure) { 181e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 182e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 183e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AllocatePCR("")); 184e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 185e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 186e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh SanghiTEST_F(TpmUtilityTest, AllocatePCRTpmFailure) { 187e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_AllocateSync(_, _, _, _, _, _, _, _)) 188e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<3>(NO), 189e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 190e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AllocatePCR("")); 191e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi} 192e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 19352e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipSuccess) { 19452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 19552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 19652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 19752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 19852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 19952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 20166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 20266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 20352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 20452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 20566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipOwnershipDone) { 20652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 20752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 20852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 20952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 21052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 21152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 21266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 21366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 21466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 21566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 21666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 21766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipBadSession) { 218ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi EXPECT_CALL(mock_hmac_session_, StartUnboundSession(true)) 21966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 22066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 22166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 22266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 22352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 22452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 22566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, TakeOwnershipFailure) { 22666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 22766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 22866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 22966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 23066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 23166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 23266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 23366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndorsementDone) { 23452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 23566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 23652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 23752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 23866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 23966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 24066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 24166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 24266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 24352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 24452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 24566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordLockoutDone) { 24652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 24752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 24852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 24952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 25052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 25166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(true)); 25266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 25366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 25466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 25552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 25652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 25766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndorsementLockoutDone) { 25852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 25952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 26052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 26166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(true)); 26252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 26366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(true)); 26466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.TakeOwnership("owner", 26566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 26666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 26766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 26866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 26966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordEndoresmentFail) { 27066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 27152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 27266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 27366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(false)); 27466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 27552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 27652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 27752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 27866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 27966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 28066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 28152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 28252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 28366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, ChangeOwnerPasswordLockoutFailure) { 28452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 28552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 28652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 28752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 28852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 28952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 29066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 29152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 29252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 29352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 29466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.TakeOwnership("owner", 29566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "endorsement", 29666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi "lockout")); 2970f46c15b948ee17f5668c332a25a0dbaecb2cc47Utkarsh Sanghi} 2980f46c15b948ee17f5668c332a25a0dbaecb2cc47Utkarsh Sanghi 2992ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomSuccess) { 3002ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("large test data", 100); 3015d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, &mock_authorization_delegate_)) 3022ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 3038b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 3045d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.StirRandom(entropy_data, &mock_authorization_delegate_)); 30552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 30652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomFails) { 3082ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("test data"); 309c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, nullptr)) 3102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 311c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.StirRandom(entropy_data, nullptr)); 3122ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3132ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3142ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomSuccess) { 3152ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This number is larger than the max bytes the GetRandom call can return. 3162ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // Therefore we expect software to make multiple calls to fill this many 3172ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // bytes. 3182ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 72; 3192ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 3202ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST large_random; 3212ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi large_random.size = 32; 3222ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST small_random; 3232ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi small_random.size = 8; 3245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, &mock_authorization_delegate_)) 3252ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2) 3262ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<1>(large_random), 32752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn Return(TPM_RC_SUCCESS))); 3285d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(8, _, &mock_authorization_delegate_)) 3292ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<1>(small_random), 3302ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3315d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GenerateRandom( 3325d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi num_bytes, &mock_authorization_delegate_, &random_data)); 3332ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(num_bytes, random_data.size()); 33452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 33552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomFails) { 3372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 5; 3382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 339c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, nullptr)) 3402ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3418b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 342c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.GenerateRandom(num_bytes, nullptr, &random_data)); 34352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 34452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRSuccess) { 3468b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + 1; 347e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi TPML_DIGEST_VALUES digests; 3485d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, 3495d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi PCR_ExtendSync(pcr_handle, _, _, &mock_authorization_delegate_)) 350e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&digests), 351e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 352e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ExtendPCR(1, "test digest", 353e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi &mock_authorization_delegate_)); 354e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(1, digests.count); 355e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(TPM_ALG_SHA256, digests.digests[0].hash_alg); 356e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi std::string hash_string = crypto::SHA256HashString("test digest"); 357e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi EXPECT_EQ(0, memcmp(hash_string.data(), 358e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi digests.digests[0].digest.sha256, 359e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi crypto::kSHA256Length)); 3602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRFail) { 3632ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 0; 3642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + pcr_index; 3652ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, _)) 3662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 367c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 368c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.ExtendPCR(pcr_index, "test digest", nullptr)); 3692ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3702ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3712ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRBadParam) { 372c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ExtendPCR(-1, "test digest", nullptr)); 3732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3742ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3752ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRSuccess) { 3762ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // The |pcr_index| is chosen to match the structure for |pcr_select|. 3772ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // If you change |pcr_index|, remember to change |pcr_select|. 3782ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 1; 3792ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3802ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_PCR_SELECTION pcr_select; 3812ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.count = 1; 3822ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].hash = TPM_ALG_SHA256; 3832ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].sizeof_select = 1; 3842ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].pcr_select[0] = 2; 3852ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_DIGEST pcr_values; 3862ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.count = 1; 3872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.digests[0].size = 5; 3882ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3892ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(pcr_select), 3902ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi SetArgPointee<3>(pcr_values), 3912ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3925d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ReadPCR(pcr_index, &pcr_value)); 3932ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3942ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3952ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRFail) { 3962ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3972ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3982ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3995d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadPCR(1, &pcr_value)); 4002ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 4012ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 4022ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRBadReturn) { 4032ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 4042ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 4052ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 4065d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadPCR(1, &pcr_value)); 40752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 40852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 409b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSuccess) { 410b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 411b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 412b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 413b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 414b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 415b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_ciphertext); 416b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 417b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 418b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4198b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4208b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 421b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 422b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 423b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, 4255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 426b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 427b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4285d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt( 4298b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi key_handle, 4308b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4318b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4328b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi plaintext, 4335d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 4348b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &ciphertext)); 435b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, ciphertext.compare(output_ciphertext)); 436b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 437b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 438b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptFail) { 439b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 440b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 441b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 442b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 443b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 444b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4458b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4468b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 447b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 448b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 449b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 450c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 451b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 4525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AsymmetricEncrypt(key_handle, 453b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 4549dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 455b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 456c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 457b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 458b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 459b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 460b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptBadParams) { 461b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 462b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 463b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 464b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 465b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 466b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 467c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, nullptr)) 468b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 469b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4705d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.AsymmetricEncrypt(key_handle, 471b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_RSAES, 4729dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 473b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 474c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 475b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 476b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 4779dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4789dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptNullSchemeForward) { 4799dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4809dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 4819dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 4829dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 4839dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 4849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 4859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 4869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 4879dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4898b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 4909dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 4919dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 4929dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 4939dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 494c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 4959dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 4969dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 4979dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4985d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt(key_handle, 4999dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 5009dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 5019dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 502c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 5039dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 5049dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 5059dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 5069dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 5079dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 5089dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSchemeForward) { 5099dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 5109dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 5119dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 5129dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 5139dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 5149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 5159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 5169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 5179dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5188b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5198b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 5209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 5219dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 5229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 5239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 524c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, nullptr)) 5259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 5269dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 5279dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5285d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricEncrypt(key_handle, 5299dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_RSAES, 5309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 5319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 532c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 5339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 5349dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 5359dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 5369dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 537b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSuccess) { 538b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 539b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 540b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_plaintext("plaintext"); 541b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 5422ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 543b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 544b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_plaintext); 545b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 546b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 547b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5488b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5498b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 550b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 551b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 552b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, 5545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 555b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 556b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5575d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 5585d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi key_handle, 5595d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 5605d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 5615d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi ciphertext, 5625d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 5635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &plaintext)); 564b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, plaintext.compare(output_plaintext)); 565b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 566b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 567b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptFail) { 568b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 569b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 570b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 571b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 572b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 573b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 574b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 575b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5768b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5778b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 578b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 579b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 580b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 581b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 582b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 5835d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.AsymmetricDecrypt( 5841ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5851ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5861ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5871ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5885d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 5891ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 590b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 591b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 592b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadParams) { 593b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 594b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 595b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 596b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 597b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 598b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 599b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 600b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 601b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 602b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 603b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6045d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.AsymmetricDecrypt( 6051ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6061ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 6071ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6081ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6095d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 6101ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 611b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 612b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 6132ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadSession) { 6141ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 6152ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string key_name; 6162ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string plaintext; 6172ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string ciphertext; 6182ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 6195d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.AsymmetricDecrypt( 620c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, TPM_ALG_RSAES, TPM_ALG_NULL, 621c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi ciphertext, nullptr, &plaintext)); 6222ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 6232ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 6249dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptNullSchemeForward) { 6259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6269dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6279dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6289dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6299dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6329dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6349dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6358b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6368b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6379dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6389dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6399dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6409dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6419dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6429dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6439dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6449dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6455d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 6461ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6471ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6481ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6491ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6505d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 6511ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6529dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 6539dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 6549dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6559dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 6569dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSchemeForward) { 6579dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6589dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6599dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6609dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6619dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6629dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6639dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6649dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6659dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6669dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6678b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6688b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6699dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6709dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6719dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6729dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6739dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6749dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6759dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6769dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6775d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.AsymmetricDecrypt( 6781ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6791ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 6801ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6811ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6825d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 6831ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 6859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 687748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSuccess) { 688748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 6892ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 690e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 691748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 692748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 2; 693748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[0] = 'h'; 694748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[1] = 'i'; 695748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 696748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 697748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 698748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 6998b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 7008b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 701748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 702748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 703748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7045d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, 7055d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 706748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 707748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7085d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 7095d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7115d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7125d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7135d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 714748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(0, signature.compare("hi")); 715748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 716748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 717748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignFail) { 718748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 719748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 720e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 721748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 722748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 723748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 724748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 7258b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 7268b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 727748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 728748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 729748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 730748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 731748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 7325d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Sign(key_handle, 7335d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7345d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7355d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7375d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 738748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 739748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 740748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams1) { 741748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 742748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 743e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 744748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 745748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 746748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 747748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 748748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 749748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 750748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7515d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 7525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7555d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7565d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 757748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 758748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 7592ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, SignBadAuthorizationSession) { 7601ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 7612ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 7622ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string digest(32, 'a'); 7632ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string signature; 7645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.Sign(key_handle, 7655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7665d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7675d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 768c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr, 7695d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 7702ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 7712ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 772748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams2) { 773748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 774748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 775e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 776748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 777748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 778748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 779748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 780748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 781748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 782748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 7835d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 7845d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 7855d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 7865d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 7875d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 7885d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 789748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 790748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 791748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams3) { 792748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 793748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 794e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 795748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 796748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 797748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 798748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 799748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 800748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 801748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 8025d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 8035d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 8045d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8055d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8065d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 808748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 809748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 810748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams4) { 811748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 812748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 813e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 814748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 815748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 816748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 817748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 818748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 819748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 820748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 8215d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Sign(key_handle, 8225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 8235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 827748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 828748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 829748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams5) { 830748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle = 0; 831748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 832e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 833748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 8345d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Sign(key_handle, 8355d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_AES, 8365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8375d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8385d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8395d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 840748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 841748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 842748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 843748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignNullSchemeForward) { 844748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 845748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 846e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 847748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 848748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 849748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 850748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 851748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 852748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 853748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8548b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8558b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 856748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 857748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 858748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 859748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 860748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 861748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 862748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 8635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 8645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 8665d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8675d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8685d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 869748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSASSA); 870748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.details.rsassa.hash_alg, TPM_ALG_SHA256); 871748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 872748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 873748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSchemeForward) { 874748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 875748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 876e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 877748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 878748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 879748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 880748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 881748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 882748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 883748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8848b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8858b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 886748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 887748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 888748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 889748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 890748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 891748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 892748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 8935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Sign(key_handle, 8945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 8955d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_SHA1, 8965d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 8975d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 8985d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &signature)); 899748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAPSS); 900887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(scheme.details.rsapss.hash_alg, TPM_ALG_SHA1); 901748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 902748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 903748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySuccess) { 904748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 905e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 906748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 907748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 908748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 909748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 910748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 911748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 912748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 913748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 914748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 9155d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 9165d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9185d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9196f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9206f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 921748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 922748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 923748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyFail) { 924748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 925e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 926748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 927748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 928748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 929748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 930748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 931748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 932748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 933748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 934748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 9355d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Verify(key_handle, 9365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9375d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9385d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9396f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9406f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 941748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 942748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 943748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams1) { 944748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 945e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 946748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 947748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 948748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 949748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 950748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 951748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 952748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9555d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9565d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9576f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9586f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 959748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 960748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 961748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams2) { 962748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 963e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 964748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 965748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 966748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 967748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 968748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 969748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 970748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9715d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9725d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9735d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9745d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9756f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9766f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 977748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 978748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 979748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams3) { 980748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 981e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 982748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 983748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 984748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 985748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 986748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 987748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 988748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 9895d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 9905d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9915d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 9925d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 9936f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 9946f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 995748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 996748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 997748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams4) { 998748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 999e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1000748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1001748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1002748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1003748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1004748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1005748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1006748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 10075d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.Verify(key_handle, 10085d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10095d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10116f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10126f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1013748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1014748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1015748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams5) { 1016748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1017e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1018748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1019748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1020748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1021748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1022748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1023748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1024748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10255d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.Verify(key_handle, 10265d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_AES, 10275d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10285d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10296f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10306f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1031748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1032748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1033748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyNullSchemeForward) { 1034748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1035e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1036748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1037748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1038748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1039748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1040748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1041748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1042748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1043748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1044748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1045748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1046748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10475d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 10485d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10495d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_NULL, 10505d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10516f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10526f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1053748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSASSA); 1054748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA256); 1055748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1056748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1057748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySchemeForward) { 1058748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1059e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 1060748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1061748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1062748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1063748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1064748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1065748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1066748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1067748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1068748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1069748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1070748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 10715d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.Verify(key_handle, 10725d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_RSAPSS, 10735d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi TPM_ALG_SHA1, 10745d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi digest, 10756f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi signature, 10766f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi nullptr)); 1077748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSAPSS); 1078887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA1); 1079748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1080748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 108133ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataSuccess) { 108233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 108333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 10845d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ChangeKeyAuthorizationData( 1085c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, nullptr)); 108633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 108733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 108833ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataKeyNameFail) { 108933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 109033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string old_password; 109133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 109233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 109333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 10945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ChangeKeyAuthorizationData( 1095c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, nullptr)); 109633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 109733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 109833ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataFailure) { 109933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 110033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 110133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ObjectChangeAuthSync(key_handle, _, _, _, _, _, _)) 110233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 11035d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ChangeKeyAuthorizationData( 1104c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, nullptr)); 110533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 110633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 110733ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataWithReturnSuccess) { 110833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 110933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 111033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 11118b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM2B_PUBLIC public_area; 11128b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 11138b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 11148b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 11158b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 11168b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 11178b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 11185d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ChangeKeyAuthorizationData( 11195d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi key_handle, new_password, &mock_authorization_delegate_, &key_blob)); 112033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 112133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 112233ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccess) { 112333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 112433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 112533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 112633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password("password"); 112733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 112833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DATA encryption_key; 112933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PUBLIC public_data; 113033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PRIVATE private_data; 113133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 113233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&encryption_key), 113333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<3>(&public_data), 113433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<4>(&private_data), 113533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 11365d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ImportRSAKey( 113733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11381ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 11431ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &key_blob)); 114433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate that the public area was properly constructed. 114533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.key_bits, 114633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.size() * 8); 114733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.exponent, 114833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi public_exponent); 114933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.unique.rsa.size, modulus.size()); 115033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_data.public_area.unique.rsa.buffer, 115133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.data(), modulus.size())); 115233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate the private struct construction. 115333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(kAesKeySize, encryption_key.size); 115433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_KEY key; 115533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_set_encrypt_key(encryption_key.buffer, kAesKeySize * 8, &key); 115633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi unsigned char iv[MAX_AES_BLOCK_SIZE_BYTES] = {0}; 115733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi int iv_in = 0; 115833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string unencrypted_private(private_data.size, 0); 115933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_cfb128_encrypt( 116033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<const unsigned char*>(private_data.buffer), 116133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<unsigned char*>(string_as_array(&unencrypted_private)), 116233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi private_data.size, &key, iv, &iv_in, AES_DECRYPT); 116333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DIGEST inner_integrity; 116433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_DIGEST(&unencrypted_private, 1165c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi &inner_integrity, nullptr)); 116633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string object_name; 11676537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 11685d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi ComputeKeyName(public_data.public_area, &object_name)); 116933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string integrity_value = crypto::SHA256HashString(unencrypted_private + 117033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi object_name); 117133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(integrity_value.size(), inner_integrity.size); 117233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(inner_integrity.buffer, 117333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi integrity_value.data(), 117433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi inner_integrity.size)); 117533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_SENSITIVE sensitive_data; 117633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_SENSITIVE(&unencrypted_private, 1177c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi &sensitive_data, nullptr)); 117833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.auth_value.size, password.size()); 117933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.auth_value.buffer, 118033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi password.data(), password.size())); 118133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.sensitive.rsa.size, 118233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.size()); 118333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.sensitive.rsa.buffer, 118433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.data(), prime_factor.size())); 118533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 118633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 118733ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccessWithNoBlob) { 118833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 118933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 119033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 119133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 119233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 119333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 11945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ImportRSAKey( 119533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11961ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11971ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11981ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11991ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12005d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1201c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 120233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 120333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 120433ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyParentNameFail) { 120533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 120633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 120733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 120833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 120933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 121033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12115d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ImportRSAKey( 121233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12131ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12141ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 12151ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12161ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1218c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 121933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 122033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 122133ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyFail) { 122233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus; 122333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor; 122433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 122533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 122633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12275d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ImportRSAKey( 122833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12291ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12301ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi 0x10001, 12311ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12321ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12335d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_, 1234c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi nullptr)); 123533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 123633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 12376f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairSuccess) { 123882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 12396f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 12406f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 12415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi &mock_authorization_delegate_)) 124282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 124382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 12446f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 12456f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 12466f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptAndSignKey, 2048, 0x10001, 12476ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi "password", "", false, &mock_authorization_delegate_, &key_blob)); 124882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 12496f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 12506ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kUserWithAuth, 12516ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi kUserWithAuth); 12526ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kAdminWithPolicy, 0); 125382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1254e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 125582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 125682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12576f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairDecryptKeySuccess) { 125882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 12596f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 12606f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 12616f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 126282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 126382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 12646f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 12656f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 12666ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 2048, 0x10001, 12676ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi "password", "", false, &mock_authorization_delegate_, &key_blob)); 12686f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 12696f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, 0); 127082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1271e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 127282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 127382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12746f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairSignKeySuccess) { 127582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 12766f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM2B_SENSITIVE_CREATE sensitive_create; 12776f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 12786f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 12796f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 12806f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi .WillOnce(DoAll(SaveArg<1>(&sensitive_create), 12816f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi SaveArg<2>(&public_area), 128282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 12836f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 12846f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string policy_digest(32, 'a'); 12856f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_auth("password"); 12866f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.CreateRSAKeyPair( 12876f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, key_auth, 12886ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi policy_digest, true, // use_only_policy_authorization 12896ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi &mock_authorization_delegate_, &key_blob)); 12906f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, 0); 129182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 12926ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kUserWithAuth, 0); 12936ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kAdminWithPolicy, 12946ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi kAdminWithPolicy); 129582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 129682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_ALG_NULL); 12976f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.key_bits, 2048); 12986f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.exponent, 0x10001); 12996f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(public_area.public_area.auth_policy.size, policy_digest.size()); 13006f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_area.public_area.auth_policy.buffer, 13016f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi policy_digest.data(), policy_digest.size())); 13026f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(sensitive_create.sensitive.user_auth.size, key_auth.size()); 13036f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_create.sensitive.user_auth.buffer, 13046f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_auth.data(), key_auth.size())); 130582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 130682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13076f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairBadDelegate) { 13086f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13096f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.CreateRSAKeyPair( 13106f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 2048, 0x10001, "password", 13116ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi "", false, nullptr, &key_blob)); 13126f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 13136f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 13146f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, CreateRSAKeyPairFailure) { 13156f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(kRSAStorageRootKey, 13166f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi _, _, _, _, _, _, _, _, 13176f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 131882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 13196f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13206f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.CreateRSAKeyPair( 13216f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 2048, 0x10001, "password", 13226ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi "", false, &mock_authorization_delegate_, &key_blob)); 132382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 132482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13256f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeySuccess) { 13266f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 13276f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE loaded_handle; 13286f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(kRSAStorageRootKey, _, _, _, _, _, 13296f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi &mock_authorization_delegate_)) 13306f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<4>(key_handle), 13316f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 13326f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13336f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.LoadKey( 13346f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, &mock_authorization_delegate_, &loaded_handle)); 13356f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(loaded_handle, key_handle); 13366f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 13376f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 13386f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeyFailure) { 133982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 134082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 134182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 13426f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13436f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.LoadKey( 13446f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, &mock_authorization_delegate_, &key_handle)); 13456f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi} 13466f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 13476f68562edf5f66006c08de24d558732d6a389631Utkarsh SanghiTEST_F(TpmUtilityTest, LoadKeyBadDelegate) { 13486f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi TPM_HANDLE key_handle; 13496f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi std::string key_blob; 13506f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.LoadKey( 13516f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi key_blob, nullptr, &key_handle)); 135282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 135382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13546f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi 135539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceSuccess) { 135639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 135739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 135839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 135939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM2B_NV_PUBLIC public_data; 136039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 136139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&public_data), 136239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 13635d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.DefineNVSpace( 13645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, length, &mock_authorization_delegate_)); 136539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.nv_index, nvram_index); 136639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.name_alg, TPM_ALG_SHA256); 136739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.attributes, 136839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMA_NV_OWNERWRITE | TPMA_NV_WRITEDEFINE | TPMA_NV_AUTHREAD); 136939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.data_size, length); 137039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 137139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadLength) { 137339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t bad_length = 3000; 137439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, 13755d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(0, bad_length, &mock_authorization_delegate_)); 137639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 137739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadIndex) { 137939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 138039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 13815d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(bad_index, 2, &mock_authorization_delegate_)); 138239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 138339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 138439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadSession) { 1385c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.DefineNVSpace(0, 2, nullptr)); 138639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 138739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 138839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceFail) { 138939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 139039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 139139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 139239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 139339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 13945d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DefineNVSpace(index, length, &mock_authorization_delegate_)); 139539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 139639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 139739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceSuccess) { 139839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 139939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 140039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 140139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)); 140239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 14035d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(index, &mock_authorization_delegate_)); 140439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 140539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 140639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadIndex) { 140739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 140839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 14095d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(bad_index, &mock_authorization_delegate_)); 141039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 141139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 141239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadSession) { 1413c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.DestroyNVSpace(3, nullptr)); 141439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 141539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 141639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceFailure) { 141739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 141839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 141939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 142039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)) 142139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 142239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 14235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.DestroyNVSpace(index, &mock_authorization_delegate_)); 142439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 142539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 142639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceSuccess) { 142739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 142839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 142939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 143039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 143139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 14325d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(index, &mock_authorization_delegate_)); 14336537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 14345d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(index, &public_area)); 14356537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITELOCKED, TPMA_NV_WRITELOCKED); 143639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 143739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 143839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadIndex) { 143939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 144039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 14415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(bad_index, &mock_authorization_delegate_)); 144239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 144339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 144439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadSession) { 1445c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility_.LockNVSpace(52, nullptr)); 144639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 144739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 144839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceFailure) { 144939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 145039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 145139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 145239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 145339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 14545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi utility_.LockNVSpace(index, &mock_authorization_delegate_)); 145539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 145639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 145739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceSuccess) { 145839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 145939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 146039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 146139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 146239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 146339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 14645d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.WriteNVSpace( 14655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, "", &mock_authorization_delegate_)); 14666537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 14675d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(index, &public_area)); 14686537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITTEN, TPMA_NV_WRITTEN); 146939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 147039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 147139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSize) { 147239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 147339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data(1025, 0); 14745d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility_.WriteNVSpace( 14755d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, 0, nvram_data, &mock_authorization_delegate_)); 147639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 147739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 147839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadIndex) { 147939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 14805d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.WriteNVSpace( 14815d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi bad_index, 0, "", &mock_authorization_delegate_)); 148239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 148339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 148439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSessions) { 1485c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 1486c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.WriteNVSpace(53, 0, "", nullptr)); 148739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 148839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 148939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceFailure) { 149039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 149139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 149239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 149339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 149439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 149539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 14965d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.WriteNVSpace( 14975d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, "", &mock_authorization_delegate_)); 149839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 149939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 150039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceSuccess) { 150139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 150239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 150339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 150439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 150539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 150639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 150739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 150839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 15095d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.ReadNVSpace( 15105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_delegate_)); 151139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 151239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 151339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadReadLength) { 151439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 1025; 151539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 15165d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility_.ReadNVSpace( 15175d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi 52, 0, length, &nvram_data, &mock_authorization_delegate_)); 151839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 151939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 152039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadIndex) { 152139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 152239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 15235d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility_.ReadNVSpace( 15245d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi bad_index, 0, 5, &nvram_data, &mock_authorization_delegate_)); 152539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 152639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 152739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadSession) { 152839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 152939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 1530c04decde2a6e9b74395f402818852e752534254bUtkarsh Sanghi utility_.ReadNVSpace(53, 0, 5, &nvram_data, nullptr)); 153139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 153239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 153339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceFailure) { 153439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 153539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 153639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 153739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 153839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 153939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 154039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 154139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 15425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.ReadNVSpace( 15435d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_delegate_)); 154439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 154539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 154639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameSuccess) { 154739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 154839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 154939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 155039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 155139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 15525d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpaceName(index, &name)); 155339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 155439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 155539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameFailure) { 155639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 155739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 155839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 155939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 15605d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.GetNVSpaceName(index, &name)); 156139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 156239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 15636537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaCachedSuccess) { 15646537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi uint32_t index = 53; 15656537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 15665d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi SetNVRAMMap(index, public_area); 15676537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 15686537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi .Times(0); 15695d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpacePublicArea(index, &public_area)); 15706537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi} 15716537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 157239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaSuccess) { 157339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 157439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 157539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 157639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 157739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 15785d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility_.GetNVSpacePublicArea(index, &public_area)); 157939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 158039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 158139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaFailure) { 158239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 158339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 158439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 158539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 15865d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility_.GetNVSpacePublicArea(index, &public_area)); 158739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 158839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 158966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordSuccess) { 159066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 159166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(false)); 159266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 159366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 159466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, SetKnownOwnerPassword("password")); 159566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 159666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 159766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordOwnershipDone) { 159866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 159966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(true)); 160066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, SetKnownOwnerPassword("password")); 160166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 160266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 160366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SetKnownPasswordFailure) { 160466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 160566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(false)); 160666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 160766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 160866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, SetKnownOwnerPassword("password")); 160966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 161066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 161166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysSuccess) { 161266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 161366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 161466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 161566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 161666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 161766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 161866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysHandleConsistency) { 161966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_HANDLE test_handle = 42; 162066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 162166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 162266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 162366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 162466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<3>(test_handle), 162566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 162666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 162766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 162866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 162966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 163066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 163166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysCreateFailure) { 163266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 163366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 163466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 163566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 163666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys("password")); 163766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 163866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 163966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysPersistFailure) { 164066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 164166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 164266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 164366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 164466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys("password")); 164566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 164666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 164766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, RootKeysAlreadyExist) { 164866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 164966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .Times(2) 165066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 165166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys("password")); 165266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 165366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 165466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeySuccess) { 165566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 165666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 165766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 165866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 165912a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr TPM2B_PUBLIC public_area; 166012a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 166112a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr .WillOnce(DoAll(SaveArg<2>(&public_area), 166212a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr Return(TPM_RC_SUCCESS))); 166366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 166412a12083abb8fc9b1bd9ac69e2be983bb7227818Jocelyn Bohr EXPECT_EQ(TPM_ALG_SHA256, public_area.public_area.name_alg); 166566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 166666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 166766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyConsistency) { 166866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 166966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 167066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi TPM_HANDLE test_handle = 42; 167166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 167266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 167366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 167466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<4>(test_handle), 167566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 167666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 167766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 167866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 167966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 168066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 168166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyCreateFailure) { 168266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 168366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 168466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 168566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 168666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 168766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 168866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 168966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 169066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 169166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyLoadFailure) { 169266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 169366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 169466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 169566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 169666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 169766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 169866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 169966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 170066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 170166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyPersistFailure) { 170266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 170366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 170466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 170566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 170666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 170766d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 170866d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey("password")); 170966d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 171066d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 171166d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyAlreadyExists) { 171266d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(kSaltingKey, _, _, _, _, _)) 171366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 171466d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey("password")); 171566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi} 171666d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 1717c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 1718