tpm_utility_test.cc revision 6537cf15412f04bda9fc1a80f7209d55c955c61f
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() {} 34295e851b66fb19c05a14401e834337962a58c493Darren Krahn ~TpmUtilityTest() override {} 35295e851b66fb19c05a14401e834337962a58c493Darren Krahn void SetUp() override { 36c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm_state(&mock_tpm_state_); 37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn factory_.set_tpm(&mock_tpm_); 38b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi factory_.set_authorization_session(&mock_authorization_session_); 39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 406537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 416537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPM_RC CreateStorageRootKeys(TpmUtilityImpl utility, 426537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const std::string& password) { 436537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return utility.CreateStorageRootKeys(password); 446537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 456537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 466537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPM_RC CreateSaltingKey(TpmUtilityImpl utility, 476537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const std::string& password) { 486537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return utility.CreateSaltingKey(password); 496537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 506537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 516537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPM_RC ComputeKeyName(TpmUtilityImpl utility, 526537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const TPMT_PUBLIC& public_area, 536537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi std::string* object_name) { 546537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return utility.ComputeKeyName(public_area, object_name); 556537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 566537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 576537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi void SetNVRAMMap(TpmUtilityImpl utility, 586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi uint32_t index, 596537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi const TPMS_NV_PUBLIC& public_area) { 606537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi utility.nvram_public_area_map_[index] = public_area; 616537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 626537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 636537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPM_RC GetNVRAMMap(TpmUtilityImpl utility, 646537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi uint32_t index, 656537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC* public_area) { 666537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi auto it = utility.nvram_public_area_map_.find(index); 676537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi if (it == utility.nvram_public_area_map_.end()) { 686537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_FAILURE; 696537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 706537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi *public_area = it->second; 716537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi return TPM_RC_SUCCESS; 726537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi } 736537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 74c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn protected: 75c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TrunksFactoryForTest factory_; 76c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpmState> mock_tpm_state_; 77c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn NiceMock<MockTpm> mock_tpm_; 78b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi NiceMock<MockAuthorizationSession> mock_authorization_session_; 79c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 80c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 8103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSuccess) { 8203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 8303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.Startup()); 8403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 8503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 8603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupAlreadyStarted) { 8703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 8803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_INITIALIZE)); 8903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 9003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.Startup()); 9103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 9203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 9303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupFailure) { 9403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, StartupSync(_, _)) 9503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 9603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 9703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.Startup()); 9803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 9903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 10003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren KrahnTEST_F(TpmUtilityTest, StartupSelfTestFailure) { 10103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, SelfTestSync(_, _)) 10203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 10303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtilityImpl utility(factory_); 10403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.Startup()); 10503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 10603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 107d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearSuccess) { 108d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 109d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 110d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 111d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Clear()); 112d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 113d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 114d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearAfterBadInit) { 115d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 116d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 117d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_AUTH_MISSING)) 118d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 119d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Clear()); 120d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 121d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 122d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh SanghiTEST_F(TpmUtilityTest, ClearFail) { 123d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TpmUtilityImpl utility(factory_); 124d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ClearSync(_, _, _)) 125d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 126d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Clear()); 127d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi} 128d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 129e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh SanghiTEST_F(TpmUtilityTest, ShutdownTest) { 130e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TpmUtilityImpl utility(factory_); 131e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ShutdownSync(TPM_SU_CLEAR, _)); 132e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi utility.Shutdown(); 133e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi} 134e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi 135c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmAlreadyInit) { 136c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 137c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm()); 138c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 139c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 140c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmSuccess) { 141c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 142c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 143c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 144c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 145c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.InitializeTpm()); 146c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 147c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 148c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmBadAuth) { 149c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 150c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 151c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 152c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 153c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Reject attempts to set platform auth. 154c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_PLATFORM, _, _, _)) 155c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 156c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm()); 157c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 158c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 159c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTEST_F(TpmUtilityTest, InitializeTpmDisablePHFails) { 160c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmUtilityImpl utility(factory_); 161c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Setup a hierarchy that needs to be disabled. 162c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_CALL(mock_tpm_state_, IsPlatformHierarchyEnabled()) 163c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillOnce(Return(true)); 16452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to disable the platform hierarchy. 16503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyControlSync(_, _, TPM_RH_PLATFORM, _, _)) 166c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 167c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.InitializeTpm()); 168c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 169c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 17052e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipSuccess) { 17152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 17252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 17352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 17452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 17552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 17652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 17752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 17852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 1792ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2); 18052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 18152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 18252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 18352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 18452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 18552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 18652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 18752e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipAlreadyDone) { 18852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 18952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 19052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 19152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 19252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 19352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 19452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 19552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(_, _, _, _)) 1962ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(1); 19752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 19852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 19952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 20052e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipPartial) { 20152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 20252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 20352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 20452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 20552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillOnce(Return(false)); 20652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 20752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(true)); 20852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 2092ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(1); 21052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 21152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(1); 21252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 21352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .Times(0); 21452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_SUCCESS, utility.TakeOwnership("a", "b", "c")); 21552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 21652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 21752e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipOwnerFailure) { 21852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 21952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 22052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 22252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 22452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 22552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set owner auth. 22652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 22752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 22852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 22952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 23052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 23152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 23252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 23352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 23452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 23552e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipEndorsementFailure) { 23652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 23752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 23852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 23952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 24052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 24152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 24252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 24352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set endorsement auth. 24452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 24552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 24652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 24752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 24852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 24952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 25052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 25152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 25252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 25352e2a45f585fbe34032eae5b094a092afdf217caDarren KrahnTEST_F(TpmUtilityTest, TakeOwnershipLockoutFailure) { 25452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 25552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsOwnerPasswordSet()) 25652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 25752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsEndorsementPasswordSet()) 25852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 25952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_state_, IsLockoutPasswordSet()) 26052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(false)); 26152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Reject attempts to set lockout auth. 26252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_OWNER, _, _, _)) 26352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 26452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_ENDORSEMENT, _, _, _)) 26552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_SUCCESS)); 26652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_CALL(mock_tpm_, HierarchyChangeAuthSync(TPM_RH_LOCKOUT, _, _, _)) 26752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn .WillRepeatedly(Return(TPM_RC_FAILURE)); 26852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn EXPECT_EQ(TPM_RC_FAILURE, utility.TakeOwnership("a", "b", "c")); 26952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 27052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2712ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomSuccess) { 27252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("large test data", 100); 2748b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 2758b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 2768b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 2778b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, &delegate)) 2782ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 2798b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 2808b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.StirRandom(entropy_data, &mock_authorization_session_)); 28152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 28252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 2832ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, StirRandomFails) { 28452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 2852ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string entropy_data("test data"); 2868b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, StirRandomSync(_, NULL)) 2872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 2888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.StirRandom(entropy_data, NULL)); 2892ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 2902ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 2912ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomSuccess) { 2922ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 2932ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This number is larger than the max bytes the GetRandom call can return. 2942ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // Therefore we expect software to make multiple calls to fill this many 2952ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // bytes. 2962ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 72; 2972ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 2982ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST large_random; 2992ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi large_random.size = 32; 3002ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM2B_DIGEST small_random; 3012ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi small_random.size = 8; 3028b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 3038b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 3048b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 3058b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, &delegate)) 3062ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .Times(2) 3072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<1>(large_random), 30852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn Return(TPM_RC_SUCCESS))); 3098b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(8, _, &delegate)) 3102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<1>(small_random), 3112ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3128b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GenerateRandom(num_bytes, 3138b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &mock_authorization_session_, 3148b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &random_data)); 3152ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(num_bytes, random_data.size()); 31652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 31752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3182ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, GenerateRandomFails) { 31952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 3202ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int num_bytes = 5; 3212ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string random_data; 3228b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, GetRandomSync(_, _, NULL)) 3232ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3248b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 3258b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.GenerateRandom(num_bytes, NULL, &random_data)); 32652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 32752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 3282ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRSuccess) { 32952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TpmUtilityImpl utility(factory_); 3308b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + 1; 3318b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 3328b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 3338b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 3348b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, &delegate)) 3358b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 3368b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 3378b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi utility.ExtendPCR(1, "test digest", &mock_authorization_session_)); 3382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3402ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRFail) { 3412ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3422ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 0; 3432ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE pcr_handle = HR_PCR + pcr_index; 3442ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ExtendSync(pcr_handle, _, _, _)) 3452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3468b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ExtendPCR(pcr_index, "test digest", NULL)); 3472ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3482ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3492ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ExtendPCRBadParam) { 3502ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3518b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ExtendPCR(-1, "test digest", NULL)); 3522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3542ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRSuccess) { 3552ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3562ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // The |pcr_index| is chosen to match the structure for |pcr_select|. 3572ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // If you change |pcr_index|, remember to change |pcr_select|. 3582ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi int pcr_index = 1; 3592ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_PCR_SELECTION pcr_select; 3612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.count = 1; 3622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].hash = TPM_ALG_SHA256; 3632ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].sizeof_select = 1; 3642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_select.pcr_selections[0].pcr_select[0] = 2; 3652ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPML_DIGEST pcr_values; 3662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.count = 1; 3672ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi pcr_values.digests[0].size = 5; 3682ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3692ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<2>(pcr_select), 3702ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi SetArgPointee<3>(pcr_values), 3712ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 3722ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ReadPCR(pcr_index, &pcr_value)); 3732ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3742ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3752ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRFail) { 3762ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3772ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3782ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3792ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 3802ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadPCR(1, &pcr_value)); 3812ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 3822ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 3832ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, ReadPCRBadReturn) { 3842ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 3852ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi std::string pcr_value; 3862ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, PCR_ReadSync(_, _, _, _, _)) 3872ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 3882ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadPCR(1, &pcr_value)); 38952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 39052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 391b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSuccess) { 392b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 393b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 394b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 395b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 396b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 397b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 398b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_ciphertext); 399b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 400b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 401b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4028b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4038b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 404b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 405b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 406b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4078b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NiceMock<MockAuthorizationDelegate> delegate; 4088b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_authorization_session_, GetDelegate()) 4098b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillOnce(Return(&delegate)); 4108b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, &delegate)) 411b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 412b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4138b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt( 4148b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi key_handle, 4158b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4168b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_ALG_NULL, 4178b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi plaintext, 4188b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &mock_authorization_session_, 4198b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi &ciphertext)); 420b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, ciphertext.compare(output_ciphertext)); 421b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 422b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 423b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptFail) { 424b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 425b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 426b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 427b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 428b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 429b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 430b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4318b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4328b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 433b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 434b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 435b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4368b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 437b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 438b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.AsymmetricEncrypt(key_handle, 439b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 4409dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 441b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 4428b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 443b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 444b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 445b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 446b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptBadParams) { 447b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 448b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 449b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 450b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 451b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 452b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 453b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 4548b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, NULL)) 455b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 456b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 457b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.AsymmetricEncrypt(key_handle, 458b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_RSAES, 4599dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 460b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi plaintext, 4618b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 462b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &ciphertext)); 463b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 4649dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4659dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptNullSchemeForward) { 4669dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 4679dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4689dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 4699dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 4709dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 4719dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 4729dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 4739dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 4749dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 4759dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 4768b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 4778b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 4789dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 4799dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 4809dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 4819dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4828b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 4839dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 4849dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 4859dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 4869dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt(key_handle, 4879dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4889dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 4899dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 4908b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 4919dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 4929dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 4939dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 4949dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 4959dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 4969dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricEncryptSchemeForward) { 4979dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 4989dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 4999dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 5009dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_ciphertext("ciphertext"); 5019dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 5029dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 5039dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_ciphertext); 5049dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 5059dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 5069dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5078b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5088b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 5099dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 5109dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 5119dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 5129dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5138b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_EncryptSync(key_handle, _, _, _, _, _, NULL)) 5149dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 5159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 5169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5179dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricEncrypt(key_handle, 5189dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_RSAES, 5199dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 5209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi plaintext, 5218b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi NULL, 5229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi &ciphertext)); 5239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 5249dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 5259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 526b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSuccess) { 527b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 5282ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 529b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 530b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 531b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string output_plaintext("plaintext"); 532b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 5332ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 534b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 535b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi output_plaintext); 536b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 537b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 538b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5398b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5408b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 541b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 542b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 543b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 544b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 545b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 546b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 547b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt(key_handle, 548b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_NULL, 5499dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_NULL, 550b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi ciphertext, 5512ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 552b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi &plaintext)); 553b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_EQ(0, plaintext.compare(output_plaintext)); 554b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 555b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 556b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptFail) { 557b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 558b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 559b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 560b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 561b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 562b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 563b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 564b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 565b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 5668b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 5678b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 568b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 569b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 570b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 571b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 572b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 5731ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.AsymmetricDecrypt( 5741ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5751ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5761ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5771ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 5781ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 5791ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 580b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 581b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 582b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadParams) { 583b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TpmUtilityImpl utility(factory_); 584b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_HANDLE key_handle; 585b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string key_name; 586b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string plaintext; 587b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string ciphertext; 588b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string password; 589b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM2B_PUBLIC public_area; 590b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 591b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt | kRestricted; 592b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 593b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 594b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 5951ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.AsymmetricDecrypt( 5961ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 5971ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 5981ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 5991ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6001ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 6011ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 602b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi} 603b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 6042ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptBadSession) { 6052ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi TpmUtilityImpl utility(factory_); 6061ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 6072ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string key_name; 6082ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string plaintext; 6092ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string ciphertext; 6102ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 6111ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.AsymmetricDecrypt( 6121ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, TPM_ALG_RSAES, TPM_ALG_NULL, ciphertext, NULL, &plaintext)); 6132ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 6142ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 6159dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptNullSchemeForward) { 6169dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 6179dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6189dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6199dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6209dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6219dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6229dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6239dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6249dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6259dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6269dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6278b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6288b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6299dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6309dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6319dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6329dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6339dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6349dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6359dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6369dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6371ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt( 6381ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6421ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 6431ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6449dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_OAEP); 6459dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.details.oaep.hash_alg, TPM_ALG_SHA256); 6469dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6479dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 6489dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh SanghiTEST_F(TpmUtilityTest, AsymmetricDecryptSchemeForward) { 6499dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TpmUtilityImpl utility(factory_); 6509dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_HANDLE key_handle; 6519dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string plaintext; 6529dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string output_plaintext("plaintext"); 6539dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string ciphertext; 6549dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi std::string password; 6559dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC_KEY_RSA out_message = Make_TPM2B_PUBLIC_KEY_RSA( 6569dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi output_plaintext); 6579dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM2B_PUBLIC public_area; 6589dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 6599dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 6608b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6618b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 6629dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPMT_RSA_DECRYPT scheme; 6639dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 6649dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 6659dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6669dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_CALL(mock_tpm_, RSA_DecryptSync(key_handle, _, _, _, _, _, _)) 6679dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(out_message), 6689dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi SaveArg<3>(&scheme), 6699dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 6701ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.AsymmetricDecrypt( 6711ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, 6721ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAES, 6731ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 6741ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi ciphertext, 6751ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 6761ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &plaintext)); 6779dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAES); 6789dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi} 6799dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi 680748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSuccess) { 681748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 6822ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 683748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 6842ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password("password"); 685e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 686748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 687748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 2; 688748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[0] = 'h'; 689748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.buffer[1] = 'i'; 690748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 691748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 692748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 693748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 6948b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 6958b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 696748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 697748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 698748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 699748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 700748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 701748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 702748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 703748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 704748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 705748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7062ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 707748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 708748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(0, signature.compare("hi")); 709748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 710748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 711748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignFail) { 712748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 713748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 714748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 715e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 716748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 717748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 718748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 719748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 7208b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 7218b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 722748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 723748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 724748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 725748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 726748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 727748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Sign(key_handle, 728748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 729748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 730748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7311ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 732748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 733748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 734748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 735748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams1) { 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 = kSign | kRestricted; 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 7552ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh SanghiTEST_F(TpmUtilityTest, SignBadAuthorizationSession) { 7562ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi TpmUtilityImpl utility(factory_); 7571ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_HANDLE key_handle = TPM_RH_FIRST; 7582ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string password; 7592ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string digest(32, 'a'); 7602ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi std::string signature; 7611ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.Sign(key_handle, 7621ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_RSAPSS, 7631ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi TPM_ALG_NULL, 7641ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi digest, 7651ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL, 7661ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &signature)); 7672ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi} 7682ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi 769748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams2) { 770748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 771748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 772748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 773e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 774748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 775748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 776748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 777748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 778748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 779748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 780748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 781748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 782748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 783748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 784748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 7851ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 786748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 787748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 788748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 789748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams3) { 790748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 791748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 792748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 793e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 794748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 795748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 796748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 797748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 798748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 799748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 800748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 801748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 802748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 803748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 804748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8051ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 806748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 807748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 808748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 809748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams4) { 810748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 811748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 812748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 813e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 814748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 815748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 816748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 817748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 818748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 819748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 820748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 821748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Sign(key_handle, 822748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 823748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 824748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8251ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 826748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 827748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 828748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 829748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignBadParams5) { 830748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 831748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle = 0; 832748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 833e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 834748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 835748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Sign(key_handle, 836748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_AES, 837748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 838748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8391ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 840748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 841748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 842748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 843748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 844748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignNullSchemeForward) { 845748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 846748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 847748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 848e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 849748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 850748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 851748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 852748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 853748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 854748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 855748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8568b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8578b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 858748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 859748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 860748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 861748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 862748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 863748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 864748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 865748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 866748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 867748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 868748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 8691ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 870748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 871748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSASSA); 872748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.details.rsassa.hash_alg, TPM_ALG_SHA256); 873748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 874748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 875748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, SignSchemeForward) { 876748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 877748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 878748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string password; 879e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 880748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_out; 881748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature_out.signature.rsassa.sig.size = 0; 882748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 883748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 884748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIG_SCHEME scheme; 885748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 886748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 8878b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 8888b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 889748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 890748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 891748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 892748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, SignSync(key_handle, _, _, _, _, _, _)) 893748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SetArgPointee<5>(signature_out), 894748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi SaveArg<3>(&scheme), 895748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 896748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Sign(key_handle, 897748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 898887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi TPM_ALG_SHA1, 899748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 9001ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 901748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi &signature)); 902748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(scheme.scheme, TPM_ALG_RSAPSS); 903887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(scheme.details.rsapss.hash_alg, TPM_ALG_SHA1); 904748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 905748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 906748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySuccess) { 907748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 908748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 909e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 910748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 911748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 912748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 913748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 914748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 915748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 916748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 917748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 918748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 919748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 920748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 921748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 922748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 923748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 924748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 925748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 926748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyFail) { 927748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 928748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 929e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 930748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 931748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 932748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 933748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 934748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 935748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 936748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 937748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 938748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 939748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Verify(key_handle, 940748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 941748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 942748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 943748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 944748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 945748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 946748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams1) { 947748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 948748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 949e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 950748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 951748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 952748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 953748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign | kRestricted; 954748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 955748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 956748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 957748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 958748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 959748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 960748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 961748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 962748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 963748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 964748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams2) { 965748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 966748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 967e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 968748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 969748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 970748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 971748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kDecrypt; 972748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 973748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 974748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 975748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 976748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 977748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 978748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 979748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 980748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 981748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 982748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams3) { 983748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 984748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 985e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 986748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 987748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 988748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_ECC; 989748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 990748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 991748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 992748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 993748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 994748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 995748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 996748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 997748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 998748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 999748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1000748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams4) { 1001748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1002748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1003e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1004748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1005748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1006748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1007748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1008748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1009748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1010748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_FAILURE))); 1011748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.Verify(key_handle, 1012748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1013748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1014748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1015748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1016748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1017748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1018748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyBadParams5) { 1019748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1020748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1021e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1022748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1023748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1024748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1025748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1026748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1027748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1028748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1029748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.Verify(key_handle, 1030748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_AES, 1031748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1032748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1033748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1034748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1035748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1036748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifyNullSchemeForward) { 1037748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1038748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1039e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(32, 'a'); 1040748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1041748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1042748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1043748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1044748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1045748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1046748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1047748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1048748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1049748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1050748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1051748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 1052748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1053748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_NULL, 1054748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1055748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1056748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSASSA); 1057748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA256); 1058748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1059748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 1060748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh SanghiTEST_F(TpmUtilityTest, VerifySchemeForward) { 1061748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TpmUtilityImpl utility(factory_); 1062748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_HANDLE key_handle; 1063e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi std::string digest(64, 'a'); 1064748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string signature; 1065748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM2B_PUBLIC public_area; 1066748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPMT_SIGNATURE signature_in; 1067748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 1068748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi public_area.public_area.object_attributes = kSign; 1069748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 1070748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 1071748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1072748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_CALL(mock_tpm_, VerifySignatureSync(key_handle, _, _, _, _, _)) 1073748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&signature_in), 1074748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 1075748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.Verify(key_handle, 1076748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_RSAPSS, 1077887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi TPM_ALG_SHA1, 1078748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi digest, 1079748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature)); 1080748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi EXPECT_EQ(signature_in.sig_alg, TPM_ALG_RSAPSS); 1081887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi EXPECT_EQ(signature_in.signature.rsassa.hash, TPM_ALG_SHA1); 1082748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi} 1083748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 108433ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataSuccess) { 108533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 108633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 108733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 10881ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ChangeKeyAuthorizationData( 10891ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 109033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 109133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 109233ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataKeyNameFail) { 109333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 109433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 109533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string old_password; 109633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 109733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(key_handle, _, _, _, _, _)) 109833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 10991ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ChangeKeyAuthorizationData( 11001ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 110133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 110233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 110333ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataFailure) { 110433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 110533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 110633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 110733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ObjectChangeAuthSync(key_handle, _, _, _, _, _, _)) 110833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 11091ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ChangeKeyAuthorizationData( 11101ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, NULL)); 111133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 111233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 111333ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ChangeAuthDataWithReturnSuccess) { 111433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 111533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_HANDLE key_handle = 1; 111633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string new_password; 111733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 11188b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM2B_PUBLIC public_area; 11198b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.type = TPM_ALG_RSA; 11208b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.auth_policy.size = 0; 11218b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi public_area.public_area.unique.rsa.size = 0; 11228b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 11238b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<2>(public_area), 11248b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 11251ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ChangeKeyAuthorizationData( 11261ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi key_handle, new_password, &mock_authorization_session_, &key_blob)); 112733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 112833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 112933ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccess) { 113033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 113133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 113233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 113333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 113433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password("password"); 113533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string key_blob; 113633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DATA encryption_key; 113733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PUBLIC public_data; 113833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PRIVATE private_data; 113933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 114033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&encryption_key), 114133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<3>(&public_data), 114233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi SaveArg<4>(&private_data), 114333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 114433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ImportRSAKey( 114533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 11461ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 11471ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 11481ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 11491ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 11501ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 11511ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &key_blob)); 115233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate that the public area was properly constructed. 115333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.key_bits, 115433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.size() * 8); 115533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.parameters.rsa_detail.exponent, 115633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi public_exponent); 115733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(public_data.public_area.unique.rsa.size, modulus.size()); 115833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(public_data.public_area.unique.rsa.buffer, 115933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi modulus.data(), modulus.size())); 116033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Validate the private struct construction. 116133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(kAesKeySize, encryption_key.size); 116233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_KEY key; 116333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_set_encrypt_key(encryption_key.buffer, kAesKeySize * 8, &key); 116433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi unsigned char iv[MAX_AES_BLOCK_SIZE_BYTES] = {0}; 116533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi int iv_in = 0; 116633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string unencrypted_private(private_data.size, 0); 116733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AES_cfb128_encrypt( 116833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<const unsigned char*>(private_data.buffer), 116933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi reinterpret_cast<unsigned char*>(string_as_array(&unencrypted_private)), 117033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi private_data.size, &key, iv, &iv_in, AES_DECRYPT); 117133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DIGEST inner_integrity; 117233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_DIGEST(&unencrypted_private, 117333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi &inner_integrity, NULL)); 117433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string object_name; 11756537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 11766537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi ComputeKeyName(utility, public_data.public_area, &object_name)); 117733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string integrity_value = crypto::SHA256HashString(unencrypted_private + 117833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi object_name); 117933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(integrity_value.size(), inner_integrity.size); 118033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(inner_integrity.buffer, 118133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi integrity_value.data(), 118233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi inner_integrity.size)); 118333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_SENSITIVE sensitive_data; 118433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, Parse_TPM2B_SENSITIVE(&unencrypted_private, 118533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi &sensitive_data, NULL)); 118633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.auth_value.size, password.size()); 118733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.auth_value.buffer, 118833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi password.data(), password.size())); 118933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(sensitive_data.sensitive_area.sensitive.rsa.size, 119033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.size()); 119133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(0, memcmp(sensitive_data.sensitive_area.sensitive.rsa.buffer, 119233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi prime_factor.data(), prime_factor.size())); 119333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 119433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 119533ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeySuccessWithNoBlob) { 119633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 119733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 119833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 119933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 120033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 120133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 120233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 120333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ImportRSAKey( 120433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12051ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12061ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 12071ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12081ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12091ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12101ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 121133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 121233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 121333ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyParentNameFail) { 121433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 121533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent = 0x10001; 121633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus(256, 'a'); 121733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor(128, 'b'); 121833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 121933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ReadPublicSync(_, _, _, _, _, _)) 122033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 122133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ImportRSAKey( 122233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12231ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12241ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi public_exponent, 12251ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12261ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12271ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12281ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 122933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 123033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 123133ca033c9665b8496f3491037403ae1574a54227Utkarsh SanghiTEST_F(TpmUtilityTest, ImportRSAKeyFail) { 123233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtilityImpl utility(factory_); 123333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string modulus; 123433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string prime_factor; 123533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string password; 123633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_CALL(mock_tpm_, ImportSync(_, _, _, _, _, _, _, _, _)) 123733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 123833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ImportRSAKey( 123933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 12401ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi modulus, 12411ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi 0x10001, 12421ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi prime_factor, 12431ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi password, 12441ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12451ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi NULL)); 124633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi} 124733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 12486465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyDecryptSuccess) { 124982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 12502ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi scoped_ptr<AuthorizationSession> session(factory_.GetAuthorizationSession()); 125182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 125282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 125382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 125482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 125582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 125682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 125782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 12586465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 125982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 126082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12612ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi session.get(), 12626465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12636465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 126482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 126582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, 0); 126682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1267e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 126882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 126982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12706465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeySignSuccess) { 127182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 127282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 127382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 127482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 127582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 127682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 127782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 127882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 12796465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 128082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kSignKey, 128182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 12821ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 12836465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 12846465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 128582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 128682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, 0); 128782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 1288e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi TPM_ALG_NULL); 128982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 129082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 12916465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyLegacySuccess) { 129282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 129382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 129482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM2B_PUBLIC public_area; 129582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 129682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(DoAll(SaveArg<2>(&public_area), 129782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 129882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 129982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 13006465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.CreateAndLoadRSAKey( 130182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptAndSignKey, 130282b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 13031ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 13046465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 13056465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 130682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kDecrypt, kDecrypt); 130782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.object_attributes & kSign, kSign); 130882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_EQ(public_area.public_area.parameters.rsa_detail.scheme.scheme, 130982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_ALG_NULL); 131082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 131182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13126465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyFail1) { 131382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 131482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 131582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 131682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 13176465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateAndLoadRSAKey( 131882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 131982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 13201ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 13216465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 13226465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 132382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 132482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 13256465502c740d2599d95e09232c744f6d2ed54505Utkarsh SanghiTEST_F(TpmUtilityTest, CreateAndLoadRSAKeyFail2) { 132682b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtilityImpl utility(factory_); 132782b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TPM_HANDLE key_handle; 132882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 132982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 133082b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 133182b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 13326465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.CreateAndLoadRSAKey( 133382b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi TpmUtility::AsymmetricKeyUsage::kDecryptKey, 133482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi "password", 13351ef82e4a52abc91d0e8db12500c2da0d8c21f62cUtkarsh Sanghi &mock_authorization_session_, 13366465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi &key_handle, 13376465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi NULL)); 133882b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi} 133982b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 134039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceSuccess) { 134139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 134239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 134339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 134439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 134539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM2B_NV_PUBLIC public_data; 134639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 134739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(DoAll(SaveArg<3>(&public_data), 134839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi Return(TPM_RC_SUCCESS))); 134939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 135039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(index, length, &mock_authorization_session_)); 135139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.nv_index, nvram_index); 135239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.name_alg, TPM_ALG_SHA256); 135339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.attributes, 135439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMA_NV_OWNERWRITE | TPMA_NV_WRITEDEFINE | TPMA_NV_AUTHREAD); 135539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(public_data.nv_public.data_size, length); 135639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 135739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 135839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadLength) { 135939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 136039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t bad_length = 3000; 136139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, 136239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(0, bad_length, &mock_authorization_session_)); 136339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 136439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 136539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadIndex) { 136639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 136739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 136839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 136939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(bad_index, 2, &mock_authorization_session_)); 137039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 137139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceBadSession) { 137339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 137439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.DefineNVSpace(0, 2, NULL)); 137539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 137639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 137739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DefineNVSpaceFail) { 137839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 137939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 59; 138039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 256; 138139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_DefineSpaceSync(TPM_RH_OWNER, _, _, _, _)) 138239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 138339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 138439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DefineNVSpace(index, length, &mock_authorization_session_)); 138539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 138639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 138739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceSuccess) { 138839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 138939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 139039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 139139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 139239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)); 139339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 139439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(index, &mock_authorization_session_)); 139539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 139639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 139739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadIndex) { 139839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 139939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<29; 140039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 140139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(bad_index, &mock_authorization_session_)); 140239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 140339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 140439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceBadSession) { 140539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 140639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.DestroyNVSpace(3, NULL)); 140739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 140839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 140939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, DestroyNVSpaceFailure) { 141039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 141139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 141239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 141339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 141439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_UndefineSpaceSync(TPM_RH_OWNER, _, nvram_index, _, _)) 141539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 141639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 141739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.DestroyNVSpace(index, &mock_authorization_session_)); 141839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 141939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 142039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceSuccess) { 142139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 142239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 142339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 142439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 142539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 142639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, 142739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(index, &mock_authorization_session_)); 14286537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 14296537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(utility, index, &public_area)); 14306537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITELOCKED, TPMA_NV_WRITELOCKED); 143139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 143239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 143339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadIndex) { 143439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 143539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 143639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, 143739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(bad_index, &mock_authorization_session_)); 143839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 143939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 144039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceBadSession) { 144139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 144239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.LockNVSpace(52, NULL)); 144339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 144439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 144539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, LockNVSpaceFailure) { 144639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 144739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 144839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 144939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_WriteLockSync(nvram_index, _, nvram_index, _, _)) 145039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 145139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, 145239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.LockNVSpace(index, &mock_authorization_session_)); 145339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 145439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 145539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceSuccess) { 145639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 145739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 145839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 145939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 146039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 146139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 146239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 146339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.WriteNVSpace( 146439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, "", &mock_authorization_session_)); 14656537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 14666537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, GetNVRAMMap(utility, index, &public_area)); 14676537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(public_area.attributes & TPMA_NV_WRITTEN, TPMA_NV_WRITTEN); 146839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 146939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 147039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSize) { 147139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 147239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 147339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data(1025, 0); 147439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility.WriteNVSpace( 147539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, 0, nvram_data, &mock_authorization_session_)); 147639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 147739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 147839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadIndex) { 147939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 148039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 148139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.WriteNVSpace( 148239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi bad_index, 0, "", &mock_authorization_session_)); 148339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 148439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 148539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceBadSessions) { 148639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 148739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, utility.WriteNVSpace(53, 0, "", NULL)); 148839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 148939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 149039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, WriteNVSpaceFailure) { 149139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 149239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 149339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 149439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 149539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 149639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_WriteSync(TPM_RH_OWNER, _, nvram_index, _, _, offset, _)) 149739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 149839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.WriteNVSpace( 149939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, "", &mock_authorization_session_)); 150039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 150139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 150239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceSuccess) { 150339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 150439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 150539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 150639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 150739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 150839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 150939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 151039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 151139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 151239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.ReadNVSpace( 151339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_session_)); 151439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 151539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 151639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadReadLength) { 151739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 151839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 1025; 151939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 152039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_SIZE, utility.ReadNVSpace( 152139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 52, 0, length, &nvram_data, &mock_authorization_session_)); 152239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 152339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 152439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadIndex) { 152539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 152639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t bad_index = 1<<24; 152739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 152839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_BAD_PARAMETER, utility.ReadNVSpace( 152939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi bad_index, 0, 5, &nvram_data, &mock_authorization_session_)); 153039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 153139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 153239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceBadSession) { 153339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 153439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 153539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(SAPI_RC_INVALID_SESSIONS, 153639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi utility.ReadNVSpace(53, 0, 5, &nvram_data, NULL)); 153739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 153839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 153939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, ReadNVSpaceFailure) { 154039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 154139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 154239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset = 5; 154339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nv_index = NV_INDEX_FIRST + index; 154439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t length = 24; 154539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string nvram_data; 154639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, 154739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi NV_ReadSync(nv_index, _, nv_index, _, length, offset, _, _)) 154839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 154939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.ReadNVSpace( 155039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi index, offset, length, &nvram_data, &mock_authorization_session_)); 155139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 155239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 155339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameSuccess) { 155439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 155539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 155639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 155739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 155839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 155939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 156039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GetNVSpaceName(index, &name)); 156139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 156239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 156339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpaceNameFailure) { 156439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 156539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 156639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string name; 156739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 156839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 156939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.GetNVSpaceName(index, &name)); 157039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 157139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 15726537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaCachedSuccess) { 15736537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TpmUtilityImpl utility(factory_); 15746537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi uint32_t index = 53; 15756537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 15766537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi SetNVRAMMap(utility, index, public_area); 15776537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 15786537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi .Times(0); 15796537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GetNVSpacePublicArea(index, &public_area)); 15806537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi} 15816537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi 158239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaSuccess) { 158339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 158439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 158539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t nvram_index = NV_INDEX_FIRST + index; 158639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 158739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(nvram_index, _, _, _, _)) 158839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_SUCCESS)); 158939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, utility.GetNVSpacePublicArea(index, &public_area)); 159039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 159139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 159239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh SanghiTEST_F(TpmUtilityTest, GetNVSpacePublicAreaFailure) { 159339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TpmUtilityImpl utility(factory_); 159439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t index = 53; 159539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC public_area; 159639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_CALL(mock_tpm_, NV_ReadPublicSync(_, _, _, _, _)) 159739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi .WillOnce(Return(TPM_RC_FAILURE)); 159839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, utility.GetNVSpacePublicArea(index, &public_area)); 159939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi} 160039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 16012ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysSuccess) { 16022ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16036537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys(utility, "password")); 16042ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16052ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16062ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysHandleConsistency) { 16072ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16082ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE test_handle = 42; 16092ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 16102ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<3>(test_handle), 16112ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 16122ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 16132ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 16146537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateStorageRootKeys(utility, "password")); 16152ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16162ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16172ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysCreateFailure) { 16182ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16192ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreatePrimarySyncShort(_, _, _, _, _, _, _, _, _, _)) 16202ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16216537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys(utility, "password")); 16222ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16232ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16242ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, RootKeysPersistFailure) { 16252ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16262ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 16272ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16286537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateStorageRootKeys(utility, "password")); 16292ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16302ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16312ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeySuccess) { 16322ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16336537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey(utility, "password")); 16342ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16352ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyConsistency) { 16372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_HANDLE test_handle = 42; 16392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 16402ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(DoAll(SetArgPointee<4>(test_handle), 16412ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi Return(TPM_RC_SUCCESS))); 16422ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, test_handle, _, _, _)) 16432ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_SUCCESS)); 16446537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_SUCCESS, CreateSaltingKey(utility, "password")); 16452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16462ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16472ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyCreateFailure) { 16482ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16492ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, CreateSyncShort(_, _, _, _, _, _, _, _, _, _)) 16502ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16516537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey(utility, "password")); 16522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16542ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyLoadFailure) { 16552ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16562ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, LoadSync(_, _, _, _, _, _, _)) 16572ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16586537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey(utility, "password")); 16592ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16602ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 16612ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh SanghiTEST_F(TpmUtilityTest, SaltingKeyPersistFailure) { 16622ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TpmUtilityImpl utility(factory_); 16632ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi EXPECT_CALL(mock_tpm_, EvictControlSync(_, _, _, _, _, _)) 16642ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi .WillRepeatedly(Return(TPM_RC_FAILURE)); 16656537cf15412f04bda9fc1a80f7209d55c955c61fUtkarsh Sanghi EXPECT_EQ(TPM_RC_FAILURE, CreateSaltingKey(utility, "password")); 16662ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi} 16672ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 1668c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 1669