tpm_utility_test.cc revision 8b2bf63478b292937f85b3b0e215882af461a999
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" 14b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi#include "trunks/mock_authorization_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: 33c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityTest() {} 34c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn virtual ~TpmUtilityTest() {} 35c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn void SetUp() { 36c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm_state(&mock_tpm_state_); 37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm(&mock_tpm_); 38b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi factory_.set_authorization_session(&mock_authorization_session_); 39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 40c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn protected: 41c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TrunksFactoryForTest factory_; 42c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpmState> mock_tpm_state_; 43c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpm> mock_tpm_; 44b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi NiceMock<MockAuthorizationSession> mock_authorization_session_; 45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 4703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSuccess) { 4803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 4903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.Startup()); 5003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 5103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 5203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupAlreadyStarted) { 5303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 5403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_INITIALIZE)); 5503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 5603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.Startup()); 5703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 5803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 5903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupFailure) { 6003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 6103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 6203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 6303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.Startup()); 6403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 6503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 6603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSelfTestFailure) { 6703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, SelfTestSync(_, _)) 6803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 6903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 7003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.Startup()); 7103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 7203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 73d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearSuccess) { 74d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 75d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 76d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 77d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Clear()); 78d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 79d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 80d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearAfterBadInit) { 81d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 82d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 83d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_AUTH_MISSING)) 84d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 85d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Clear()); 86d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 87d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 88d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearFail) { 89d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 90d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 91d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 92d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Clear()); 93d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 94d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 95e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh SanghiTEST_F(TpmUtilityTest, ShutdownTest) { 96e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TpmUtilityImpl utility(factory_); 97e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ShutdownSync(TPM_SU_CLEAR, _)); 98e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi utility.Shutdown(); 99e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi} 100e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi 101c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmAlreadyInit) { 102c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 103c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm()); 104c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 105c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 106c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmSuccess) { 107c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 108c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 109c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 110c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 111c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm()); 112c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 113c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 114c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmBadAuth) { 115c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 116c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 117c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 118c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 119c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Reject attempts to set platform auth. 120c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_PLATFORM, _, _, _)) 121c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 122c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm()); 123c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 124c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 125c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmDisablePHFails) { 126c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 127c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 128c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 129c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 13052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to disable the platform hierarchy. 13103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyControlSync(_, _, TPM_RH_PLATFORM, _, _)) 132c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 133c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm()); 134c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 135c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 13652e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipSuccess) { 13752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 13852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 13952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 14052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 14152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 14252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 14352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 14452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 1452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2); 14652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 14752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 14852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 14952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 15052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 15152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 15252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 15352e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipAlreadyDone) { 15452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 15552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 15652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 15752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 15852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 15952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 16052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 16152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 1622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(1); 16352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 16452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 16552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 16652e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipPartial) { 16752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 16852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 16952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 17052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 17152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillOnce(Return(false)); 17252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 17352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 17452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 1752ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(1); 17652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 17752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 17852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 17952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(0); 18052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 18152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 18252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 18352e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipOwnerFailure) { 18452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 18552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 18652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 18752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 18852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 18952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 19052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 19152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set owner auth. 19252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 19352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 19452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 19552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 19652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 19752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 19852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 19952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 20052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 20152e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipEndorsementFailure) { 20252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 20352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 20452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 20652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 20852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 20952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set endorsement auth. 21052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 21152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 21252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 21352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 21452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 21552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 21652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 21752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 21852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 21952e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipLockoutFailure) { 22052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 22152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 22252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 22452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 22652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set lockout auth. 22852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 22952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 23052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 23152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 23252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 23352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 23452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 23552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 23652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomSuccess) { 23852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("large test data", 100); 2408b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 2418b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 2428b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 2438b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, &delegate)) 2442ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 2458b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 2468b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.StirRandom(entropy_data, &mock_authorization_session_)); 24752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 24852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2492ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomFails) { 25052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2512ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("test data"); 2528b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, NULL)) 2532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 2548b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.StirRandom(entropy_data, NULL)); 2552ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 2562ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 2572ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomSuccess) { 2582ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 2592ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This number is larger than the max bytes the GetRandom call can return. 2602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // Therefore we expect software to make multiple calls to fill this many 2612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // bytes. 2622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 72; 2632ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 2642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST large_random; 2652ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi large_random.size = 32; 2662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST small_random; 2672ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi small_random.size = 8; 2688b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 2698b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 2708b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 2718b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, &delegate)) 2722ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2) 2732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<1>(large_random), 27452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn Return(TPM_RC_SUCCESS))); 2758b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(8, _, &delegate)) 2762ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<1>(small_random), 2772ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 2788b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GenerateRandom(num_bytes, 2798b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &mock_authorization_session_, 2808b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &random_data)); 2812ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(num_bytes, random_data.size()); 28252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 28352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2842ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomFails) { 28552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2862ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 5; 2872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 2888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, NULL)) 2892ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 2908b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 2918b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.GenerateRandom(num_bytes, NULL, &random_data)); 29252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 29352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2942ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRSuccess) { 29552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2968b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + 1; 2978b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 2988b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 2998b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 3008b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, &delegate)) 3018b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 3028b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 3038b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.ExtendPCR(1, "test digest", &mock_authorization_session_)); 3042ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3052ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3062ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRFail) { 3072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3082ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 0; 3092ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + pcr_index; 3102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, _)) 3112ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3128b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ExtendPCR(pcr_index, "test digest", NULL)); 3132ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3142ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3152ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRBadParam) { 3162ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3178b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ExtendPCR(-1, "test digest", NULL)); 3182ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3192ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3202ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRSuccess) { 3212ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3222ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // The |pcr_index| is chosen to match the structure for |pcr_select|. 3232ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // If you change |pcr_index|, remember to change |pcr_select|. 3242ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 1; 3252ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3262ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_PCR_SELECTION pcr_select; 3272ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.count = 1; 3282ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].hash = TPM_ALG_SHA256; 3292ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].sizeof_select = 1; 3302ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].pcr_select[0] = 2; 3312ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_DIGEST pcr_values; 3322ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.count = 1; 3332ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.digests[0].size = 5; 3342ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3352ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(pcr_select), 3362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi SetArgPointee<3>(pcr_values), 3372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ReadPCR(pcr_index, &pcr_value)); 3392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3402ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3412ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRFail) { 3422ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3432ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3442ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3462ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadPCR(1, &pcr_value)); 3472ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3482ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3492ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRBadReturn) { 3502ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3512ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 3542ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadPCR(1, &pcr_value)); 35552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 35652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 357b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSuccess) { 358b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 359b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 360b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 361b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 362b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 363b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 364b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_ciphertext); 365b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 366b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 367b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 3688b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 3698b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 370b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 371b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 372b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3738b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 3748b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 3758b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 3768b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, &delegate)) 377b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 378b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3798b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt( 3808b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi key_handle, 3818b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 3828b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 3838b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi plaintext, 3848b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &mock_authorization_session_, 3858b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &ciphertext)); 386b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, ciphertext.compare(output_ciphertext)); 387b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 388b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 389b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptFail) { 390b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 391b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 392b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 393b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 394b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 395b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 396b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 3978b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 3988b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 399b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 400b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 401b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4028b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 403b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 404b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.AsymmetricEncrypt(key_handle, 405b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 4069dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 407b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 4088b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 409b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 410b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 411b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 412b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptBadParams) { 413b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 414b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 415b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 416b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 417b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 418b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 419b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 4208b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, NULL)) 421b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 422b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 423b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.AsymmetricEncrypt(key_handle, 424b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_RSAES, 4259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 426b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 4278b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 428b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 429b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 4309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptNullSchemeForward) { 4329dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 4339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4349dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 4359dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 4369dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 4379dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 4389dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 4399dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 4409dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 4419dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4428b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4438b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 4449dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 4459dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 4469dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 4479dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4488b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 4499dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 4509dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 4519dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4529dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt(key_handle, 4539dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4549dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4559dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 4568b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 4579dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 4589dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 4599dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 4609dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 4619dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4629dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSchemeForward) { 4639dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 4649dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4659dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 4669dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 4679dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 4689dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 4699dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 4709dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 4719dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 4729dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4738b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4748b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 4759dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 4769dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 4779dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 4789dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4798b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 4809dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 4819dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 4829dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4839dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt(key_handle, 4849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_RSAES, 4859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 4878b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 4889dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 4899dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 4909dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 4919dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 492b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSuccess) { 493b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 4942ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 495b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 496b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 497b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_plaintext("plaintext"); 498b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 4992ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 500b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 501b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_plaintext); 502b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 503b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 504b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5058b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5068b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 507b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 508b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 509b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 510b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 511b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 512b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 513b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt(key_handle, 514b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 5159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 516b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi ciphertext, 5172ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 518b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &plaintext)); 519b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, plaintext.compare(output_plaintext)); 520b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 521b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 522b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptFail) { 523b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 524b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 525b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 526b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 527b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 528b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 529b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 530b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 531b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5328b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5338b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 534b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 535b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 536b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 537b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 538b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 5391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.AsymmetricDecrypt( 5401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5421ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5431ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5441ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 5451ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 546b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 547b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 548b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadParams) { 549b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 550b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 551b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 552b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 553b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 554b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 555b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 556b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 557b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 558b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 559b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 560b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5611ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.AsymmetricDecrypt( 5621ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5631ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 5641ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5651ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5661ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 5671ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 568b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 569b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 5702ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadSession) { 5712ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi TpmUtilityImpl utility(factory_); 5721ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 5732ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string key_name; 5742ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string plaintext; 5752ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string ciphertext; 5762ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 5771ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.AsymmetricDecrypt( 5781ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, TPM_ALG_RSAES, TPM_ALG_NULL, ciphertext, NULL, &plaintext)); 5792ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 5802ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 5819dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptNullSchemeForward) { 5829dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 5839dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 5849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 5859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 5869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 5879dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 5889dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 5899dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 5909dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 5919dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 5929dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5938b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5948b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 5959dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 5969dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 5979dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 5989dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5999dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6009dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6019dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6029dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6031ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt( 6041ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6051ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6061ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6071ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6081ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 6091ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6109dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 6119dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 6129dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6139dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 6149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSchemeForward) { 6159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 6169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6179dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6189dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6199dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6219dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6249dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6268b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6278b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6289dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6299dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6329dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6349dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6359dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6361ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt( 6371ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6381ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 6391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 6421ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6439dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 6449dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6459dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 646748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSuccess) { 647748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 6482ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 649748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 6502ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 651e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 652748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 653748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 2; 654748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[0] = 'h'; 655748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[1] = 'i'; 656748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 657748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 658748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 659748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 6608b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6618b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 662748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 663748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 664748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 665748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 666748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 667748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 668748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 669748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 670748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 671748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 6722ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 673748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 674748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(0, signature.compare("hi")); 675748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 676748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 677748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignFail) { 678748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 679748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 680748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 681e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 682748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 683748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 684748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 685748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 6868b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6878b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 688748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 689748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 690748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 691748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 692748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 693748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Sign(key_handle, 694748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 695748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 696748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 6971ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 698748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 699748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 700748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 701748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams1) { 702748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 703748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 704748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 705e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 706748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 707748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 708748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 709748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 710748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 711748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 712748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 713748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 714748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 715748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 716748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7171ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 718748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 719748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 720748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 7212ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, SignBadAuthorizationSession) { 7222ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi TpmUtilityImpl utility(factory_); 7231ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 7242ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 7252ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string digest(32, 'a'); 7262ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string signature; 7271ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.Sign(key_handle, 7281ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAPSS, 7291ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 7301ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi digest, 7311ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL, 7321ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &signature)); 7332ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 7342ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 735748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams2) { 736748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 737748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 738748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 739e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 740748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 741748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 742748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 743748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 744748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 745748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 746748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 747748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 748748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 749748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 750748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7511ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 752748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 753748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 754748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 755748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams3) { 756748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 757748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 758748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 759e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 760748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 761748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 762748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 763748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 764748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 765748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 766748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 767748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 768748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 769748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 770748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7711ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 772748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 773748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 774748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 775748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams4) { 776748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 777748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 778748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 779e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 780748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 781748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 782748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 783748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 784748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 785748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 786748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 787748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Sign(key_handle, 788748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 789748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 790748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7911ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 792748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 793748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 794748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 795748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams5) { 796748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 797748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle = 0; 798748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 799e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 800748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 801748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 802748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_AES, 803748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 804748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8051ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 806748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 807748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 808748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 809748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 810748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignNullSchemeForward) { 811748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 812748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 813748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 814e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 815748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 816748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 817748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 818748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 819748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 820748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 821748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8228b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8238b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 824748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 825748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 826748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 827748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 828748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 829748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 830748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 831748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 832748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 833748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 834748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8351ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 836748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 837748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSASSA); 838748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.details.rsassa.hash_alg, TPM_ALG_SHA256); 839748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 840748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 841748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSchemeForward) { 842748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 843748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 844748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 845e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 846748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 847748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 848748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 849748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 850748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 851748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 852748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8538b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8548b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 855748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 856748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 857748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 858748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 859748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 860748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 861748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 862748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 863748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 864887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi TPM_ALG_SHA1, 865748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8661ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 867748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 868748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAPSS); 869887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(scheme.details.rsapss.hash_alg, TPM_ALG_SHA1); 870748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 871748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 872748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySuccess) { 873748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 874748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 875e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 876748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 877748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 878748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 879748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 880748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 881748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 882748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 883748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 884748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 885748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 886748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 887748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 888748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 889748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 890748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 891748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 892748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyFail) { 893748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 894748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 895e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 896748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 897748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 898748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 899748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 900748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 901748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 902748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 903748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 904748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 905748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Verify(key_handle, 906748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 907748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 908748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 909748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 910748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 911748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 912748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams1) { 913748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 914748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 915e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 916748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 917748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 918748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 919748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 920748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 921748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 922748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 923748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 924748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 925748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 926748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 927748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 928748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 929748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 930748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams2) { 931748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 932748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 933e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 934748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 935748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 936748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 937748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 938748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 939748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 940748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 941748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 942748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 943748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 944748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 945748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 946748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 947748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 948748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams3) { 949748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 950748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 951e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 952748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 953748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 954748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 955748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 956748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 957748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 958748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 959748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 960748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 961748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 962748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 963748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 964748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 965748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 966748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams4) { 967748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 968748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 969e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 970748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 971748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 972748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 973748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 974748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 975748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 976748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 977748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Verify(key_handle, 978748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 979748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 980748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 981748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 982748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 983748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 984748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams5) { 985748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 986748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 987e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 988748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 989748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 990748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 991748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 992748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 993748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 994748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 995748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 996748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_AES, 997748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 998748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 999748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1000748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1001748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1002748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyNullSchemeForward) { 1003748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1004748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1005e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1006748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1007748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1008748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1009748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1010748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1011748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1012748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1013748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1014748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1015748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1016748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1017748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 1018748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1019748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1020748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1021748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1022748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSASSA); 1023748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA256); 1024748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1025748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1026748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySchemeForward) { 1027748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1028748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1029e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 1030748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1031748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1032748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1033748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1034748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1035748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1036748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1037748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1038748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1039748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1040748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1041748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 1042748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 1043887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi TPM_ALG_SHA1, 1044748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1045748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1046748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSAPSS); 1047887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA1); 1048748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1049748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 105033ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataSuccess) { 105133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 105233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 105333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 10541ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ChangeKeyAuthorizationData( 10551ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 105633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 105733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 105833ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataKeyNameFail) { 105933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 106033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 106133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string old_password; 106233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 106333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 106433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 10651ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ChangeKeyAuthorizationData( 10661ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 106733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 106833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 106933ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataFailure) { 107033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 107133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 107233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 107333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ObjectChangeAuthSync(key_handle, _, _, _, _, _, _)) 107433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 10751ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ChangeKeyAuthorizationData( 10761ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 107733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 107833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 107933ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataWithReturnSuccess) { 108033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 108133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 108233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 108333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 10848b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM2B_PUBLIC public_area; 10858b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 10868b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 10878b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 10888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 10898b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 10908b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 10911ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ChangeKeyAuthorizationData( 10921ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, &key_blob)); 109333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 109433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 109533ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccess) { 109633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 109733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 109833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 109933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 110033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password("password"); 110133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 110233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DATA encryption_key; 110333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PUBLIC public_data; 110433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PRIVATE private_data; 110533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 110633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&encryption_key), 110733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<3>(&public_data), 110833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<4>(&private_data), 110933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 111033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ImportRSAKey( 111133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11121ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11131ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11141ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11151ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11161ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 11171ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &key_blob)); 111833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate that the public area was properly constructed. 111933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.key_bits, 112033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.size() * 8); 112133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.exponent, 112233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi public_exponent); 112333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.unique.rsa.size, modulus.size()); 112433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_data.public_area.unique.rsa.buffer, 112533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.data(), modulus.size())); 112633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate the private struct construction. 112733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(kAesKeySize, encryption_key.size); 112833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_KEY key; 112933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_set_encrypt_key(encryption_key.buffer, kAesKeySize * 8, &key); 113033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi unsigned char iv[MAX_AES_BLOCK_SIZE_BYTES] = {0}; 113133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi int iv_in = 0; 113233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string unencrypted_private(private_data.size, 0); 113333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_cfb128_encrypt( 113433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<const unsigned char*>(private_data.buffer), 113533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<unsigned char*>(string_as_array(&unencrypted_private)), 113633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi private_data.size, &key, iv, &iv_in, AES_DECRYPT); 113733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DIGEST inner_integrity; 113833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_DIGEST(&unencrypted_private, 113933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi &inner_integrity, NULL)); 114033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string object_name; 114133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ComputeKeyName(public_data.public_area, 114233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi &object_name)); 114333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string integrity_value = crypto::SHA256HashString(unencrypted_private + 114433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi object_name); 114533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(integrity_value.size(), inner_integrity.size); 114633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(inner_integrity.buffer, 114733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi integrity_value.data(), 114833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi inner_integrity.size)); 114933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_SENSITIVE sensitive_data; 115033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_SENSITIVE(&unencrypted_private, 115133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi &sensitive_data, NULL)); 115233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.auth_value.size, password.size()); 115333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.auth_value.buffer, 115433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi password.data(), password.size())); 115533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.sensitive.rsa.size, 115633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.size()); 115733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.sensitive.rsa.buffer, 115833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.data(), prime_factor.size())); 115933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 116033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 116133ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccessWithNoBlob) { 116233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 116333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 116433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 116533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 116633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 116733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 116833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 116933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ImportRSAKey( 117033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11711ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11721ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11731ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11741ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11751ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 11761ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 117733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 117833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 117933ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyParentNameFail) { 118033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 118133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 118233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 118333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 118433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 118533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 118633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 118733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ImportRSAKey( 118833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11891ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11901ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11911ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11921ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11931ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 11941ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 119533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 119633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 119733ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyFail) { 119833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 119933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus; 120033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor; 120133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 120233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 120333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 120433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ImportRSAKey( 120533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12061ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12071ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi 0x10001, 12081ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12091ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12101ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12111ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 121233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 121333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 12146465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyDecryptSuccess) { 121582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 12162ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 121782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 121882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 121982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 122082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 122182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 122282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 122382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 12246465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 122582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 122682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12272ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 12286465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12296465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 123082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 123182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, 0); 123282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1233e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 123482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 123582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12366465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeySignSuccess) { 123782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 123882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 123982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 124082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 124182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 124282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 124382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 124482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 12456465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 124682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 124782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12481ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12496465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12506465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 125182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 125282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, 0); 125382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1254e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 125582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 125682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12576465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyLegacySuccess) { 125882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 125982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 126082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 126182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 126282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 126382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 126482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 126582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 12666465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 126782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptAndSignKey, 126882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12691ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12706465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12716465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 127282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 127382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 127482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 127582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_ALG_NULL); 127682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 127782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12786465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyFail1) { 127982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 128082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 128182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 128282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12836465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateAndLoadRSAKey( 128482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 128582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12861ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12876465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12886465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 128982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 129082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12916465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyFail2) { 129282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 129382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 129482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 129582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 129682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 129782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 12986465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateAndLoadRSAKey( 129982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 130082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 13011ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 13026465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 13036465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 130482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 130582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 130639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceSuccess) { 130739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 130839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 130939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 131039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 131139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM2B_NV_PUBLIC public_data; 131239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 131339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&public_data), 131439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 131539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 131639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(index, length, &mock_authorization_session_)); 131739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.nv_index, nvram_index); 131839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.name_alg, TPM_ALG_SHA256); 131939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.attributes, 132039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMA_NV_OWNERWRITE | TPMA_NV_WRITEDEFINE | TPMA_NV_AUTHREAD); 132139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.data_size, length); 132239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 132339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 132439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadLength) { 132539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 132639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t bad_length = 3000; 132739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, 132839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(0, bad_length, &mock_authorization_session_)); 132939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 133039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 133139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadIndex) { 133239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 133339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 133439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 133539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(bad_index, 2, &mock_authorization_session_)); 133639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 133739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 133839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadSession) { 133939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 134039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.DefineNVSpace(0, 2, NULL)); 134139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 134239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 134339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceFail) { 134439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 134539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 134639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 134739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 134839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 134939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 135039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(index, length, &mock_authorization_session_)); 135139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 135239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 135339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceSuccess) { 135439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 135539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 135639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 135739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 135839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)); 135939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 136039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(index, &mock_authorization_session_)); 136139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 136239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 136339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadIndex) { 136439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 136539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 136639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 136739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(bad_index, &mock_authorization_session_)); 136839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 136939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadSession) { 137139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 137239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.DestroyNVSpace(3, NULL)); 137339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 137439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceFailure) { 137639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 137739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 137839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 137939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 138039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)) 138139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 138239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 138339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(index, &mock_authorization_session_)); 138439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 138539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 138639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceSuccess) { 138739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 138839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 138939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 139039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 139139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 139239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 139339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(index, &mock_authorization_session_)); 139439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 139539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 139639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadIndex) { 139739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 139839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 139939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 140039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(bad_index, &mock_authorization_session_)); 140139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 140239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 140339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadSession) { 140439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 140539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.LockNVSpace(52, NULL)); 140639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 140739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 140839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceFailure) { 140939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 141039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 141139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 141239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 141339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 141439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 141539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(index, &mock_authorization_session_)); 141639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 141739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 141839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceSuccess) { 141939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 142039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 142139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 142239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 142339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 142439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 142539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 142639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.WriteNVSpace( 142739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, "", &mock_authorization_session_)); 142839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 142939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 143039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSize) { 143139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 143239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 143339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data(1025, 0); 143439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility.WriteNVSpace( 143539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, 0, nvram_data, &mock_authorization_session_)); 143639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 143739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 143839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadIndex) { 143939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 144039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 144139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.WriteNVSpace( 144239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi bad_index, 0, "", &mock_authorization_session_)); 144339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 144439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 144539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSessions) { 144639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 144739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.WriteNVSpace(53, 0, "", NULL)); 144839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 144939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 145039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceFailure) { 145139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 145239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 145339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 145439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 145539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 145639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 145739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 145839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.WriteNVSpace( 145939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, "", &mock_authorization_session_)); 146039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 146139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 146239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceSuccess) { 146339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 146439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 146539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 146639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 146739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 146839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 146939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 147039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 147139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 147239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ReadNVSpace( 147339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_session_)); 147439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 147539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 147639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadReadLength) { 147739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 147839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 1025; 147939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 148039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility.ReadNVSpace( 148139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 52, 0, length, &nvram_data, &mock_authorization_session_)); 148239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 148339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 148439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadIndex) { 148539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 148639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 148739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 148839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.ReadNVSpace( 148939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi bad_index, 0, 5, &nvram_data, &mock_authorization_session_)); 149039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 149139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 149239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadSession) { 149339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 149439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 149539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 149639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.ReadNVSpace(53, 0, 5, &nvram_data, NULL)); 149739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 149839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 149939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceFailure) { 150039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 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_FAILURE)); 150939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadNVSpace( 151039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_session_)); 151139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 151239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 151339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameSuccess) { 151439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 151539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 151639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 151739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 151839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 151939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 152039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GetNVSpaceName(index, &name)); 152139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 152239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 152339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameFailure) { 152439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 152539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 152639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 152739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 152839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 152939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.GetNVSpaceName(index, &name)); 153039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 153139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 153239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaSuccess) { 153339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 153439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 153539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 153639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 153739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 153839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 153939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GetNVSpacePublicArea(index, &public_area)); 154039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 154139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 154239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaFailure) { 154339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 154439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 154539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 154639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 154739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 154839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.GetNVSpacePublicArea(index, &public_area)); 154939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 155039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 15512ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysSuccess) { 15522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateStorageRootKeys("password")); 15542ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15552ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15562ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysHandleConsistency) { 15572ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15582ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE test_handle = 42; 15592ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 15602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<3>(test_handle), 15612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 15622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 15632ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 15642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateStorageRootKeys("password")); 15652ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15672ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysCreateFailure) { 15682ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15692ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 15702ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 15712ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateStorageRootKeys("password")); 15722ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15742ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysPersistFailure) { 15752ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15762ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 15772ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 15782ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateStorageRootKeys("password")); 15792ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15802ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15812ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeySuccess) { 15822ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15832ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateSaltingKey("password")); 15842ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15852ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15862ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyConsistency) { 15872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15882ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE test_handle = 42; 15892ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 15902ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<4>(test_handle), 15912ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 15922ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 15932ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 15942ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateSaltingKey("password")); 15952ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 15962ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 15972ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyCreateFailure) { 15982ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 15992ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 16002ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16012ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateSaltingKey("password")); 16022ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16032ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16042ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyLoadFailure) { 16052ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16062ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 16072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16082ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateSaltingKey("password")); 16092ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16112ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyPersistFailure) { 16122ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16132ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 16142ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16152ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateSaltingKey("password")); 16162ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16172ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 1618c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 1619