1bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 2bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Copyright (C) 2014 The Android Open Source Project 3bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 4bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Licensed under the Apache License, Version 2.0 (the "License"); 5bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// you may not use this file except in compliance with the License. 6bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// You may obtain a copy of the License at 7bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 8bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// http://www.apache.org/licenses/LICENSE-2.0 9bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 10bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// Unless required by applicable law or agreed to in writing, software 11bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// distributed under the License is distributed on an "AS IS" BASIS, 12bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// See the License for the specific language governing permissions and 14bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// limitations under the License. 15bbef5dff2b94fef72012e721cd6124cd87621af4Utkarsh Sanghi// 16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 17c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/trunks_factory_for_test.h" 18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 1930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez#include <memory> 2030c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez 2130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez#include <base/memory/ptr_util.h> 22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <gmock/gmock.h> 23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/authorization_delegate.h" 250ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi#include "trunks/blob_parser.h" 26ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/hmac_session.h" 270ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi#include "trunks/mock_blob_parser.h" 28ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_hmac_session.h" 29ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_policy_session.h" 30ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/mock_session_manager.h" 31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm.h" 32c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/mock_tpm_state.h" 3303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn#include "trunks/mock_tpm_utility.h" 34ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/policy_session.h" 35ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi#include "trunks/session_manager.h" 36c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_generated.h" 37c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_state.h" 38c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility.h" 39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 40c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnusing testing::NiceMock; 41c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 42c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks { 43c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 44c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Forwards all calls to a target instance. 45c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TpmStateForwarder : public TpmState { 46c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public: 47c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn explicit TpmStateForwarder(TpmState* target) : target_(target) {} 480ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~TpmStateForwarder() override = default; 49c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 504dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC Initialize() override { return target_->Initialize(); } 51c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 524dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsOwnerPasswordSet() override { return target_->IsOwnerPasswordSet(); } 5352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 5452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn bool IsEndorsementPasswordSet() override { 5552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn return target_->IsEndorsementPasswordSet(); 5652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 5752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 5852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn bool IsLockoutPasswordSet() override { 5952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn return target_->IsLockoutPasswordSet(); 6052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 6152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 624dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsOwned() override { return target_->IsOwned(); } 63bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi 644dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsInLockout() override { return target_->IsInLockout(); } 65c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 66c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn bool IsPlatformHierarchyEnabled() override { 67c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn return target_->IsPlatformHierarchyEnabled(); 68c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 69c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 70bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi bool IsStorageHierarchyEnabled() override { 71bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi return target_->IsStorageHierarchyEnabled(); 72bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi } 73bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi 74bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi bool IsEndorsementHierarchyEnabled() override { 75bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi return target_->IsEndorsementHierarchyEnabled(); 76bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi } 77bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi 784dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsEnabled() override { return target_->IsEnabled(); } 79bb692f29c1cdf929ba4eab680e96f7f14c228190Utkarsh Sanghi 804dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool WasShutdownOrderly() override { return target_->WasShutdownOrderly(); } 81c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 824dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsRSASupported() override { return target_->IsRSASupported(); } 8366d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 844dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bool IsECCSupported() override { return target_->IsECCSupported(); } 8566d0d268e571647ca99a2bdf4835d967449d7ddeUtkarsh Sanghi 864dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn uint32_t GetLockoutCounter() override { return target_->GetLockoutCounter(); } 8709176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi 8809176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi uint32_t GetLockoutThreshold() override { 8909176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi return target_->GetLockoutThreshold(); 9009176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi } 9109176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi 9209176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi uint32_t GetLockoutInterval() override { 9309176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi return target_->GetLockoutInterval(); 9409176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi } 9509176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi 9609176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi uint32_t GetLockoutRecovery() override { 9709176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi return target_->GetLockoutRecovery(); 9809176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi } 9909176c007d5a81b5bea472853669aa53caa570c2Utkarsh Sanghi 100ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn uint32_t GetMaxNVSize() override { return target_->GetMaxNVSize(); } 101ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn 102ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn bool GetTpmProperty(TPM_PT property, uint32_t* value) override { 103ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn return target_->GetTpmProperty(property, value); 104ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn } 105ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn 106ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn bool GetAlgorithmProperties(TPM_ALG_ID algorithm, 107ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn TPMA_ALGORITHM* properties) override { 108ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn return target_->GetAlgorithmProperties(algorithm, properties); 109ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn } 110ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn 111c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private: 112c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TpmState* target_; 113c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 114c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 115c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Forwards all calls to a target instance. 11603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahnclass TpmUtilityForwarder : public TpmUtility { 11703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn public: 11803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn explicit TpmUtilityForwarder(TpmUtility* target) : target_(target) {} 1190ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~TpmUtilityForwarder() override = default; 12003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1214dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC Startup() override { return target_->Startup(); } 12203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1234dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC Clear() override { return target_->Clear(); } 124d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi 1254dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn void Shutdown() override { return target_->Shutdown(); } 126e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi 1274dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC InitializeTpm() override { return target_->InitializeTpm(); } 12803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 129e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi TPM_RC AllocatePCR(const std::string& platform_password) override { 130e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi return target_->AllocatePCR(platform_password); 131e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi } 132e7eb2bf306af6e8408cd77125861542d19e5ec6dUtkarsh Sanghi 1332ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_RC TakeOwnership(const std::string& owner_password, 1342ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi const std::string& endorsement_password, 1352ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi const std::string& lockout_password) override { 1364dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->TakeOwnership(owner_password, endorsement_password, 1372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi lockout_password); 1382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi } 1392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 1408b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_RC StirRandom(const std::string& entropy_data, 1415d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 1425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return target_->StirRandom(entropy_data, delegate); 14303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn } 14403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1458b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_RC GenerateRandom(size_t num_bytes, 1465d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 1478b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi std::string* random_data) override { 1485d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return target_->GenerateRandom(num_bytes, delegate, random_data); 14903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn } 15003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 1518b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_RC ExtendPCR(int pcr_index, 1528b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi const std::string& extend_data, 1535d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 1545d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return target_->ExtendPCR(pcr_index, extend_data, delegate); 155579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi } 156579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi 157579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi TPM_RC ReadPCR(int pcr_index, std::string* pcr_value) override { 158579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi return target_->ReadPCR(pcr_index, pcr_value); 159579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi } 160579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi 161b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_RC AsymmetricEncrypt(TPM_HANDLE key_handle, 162b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_ID scheme, 1639dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_ID hash_alg, 164b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi const std::string& plaintext, 1655d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 166748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string* ciphertext) override { 1674dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->AsymmetricEncrypt(key_handle, scheme, hash_alg, plaintext, 1684dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn delegate, ciphertext); 169b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi } 170b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 171b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_RC AsymmetricDecrypt(TPM_HANDLE key_handle, 172b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_ID scheme, 1739dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_ID hash_alg, 174b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi const std::string& ciphertext, 1755d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 176748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string* plaintext) override { 1774dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->AsymmetricDecrypt(key_handle, scheme, hash_alg, ciphertext, 1784dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn delegate, plaintext); 179b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi } 180b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi 181748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_RC Sign(TPM_HANDLE key_handle, 182748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID scheme, 183748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID hash_alg, 184887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi const std::string& plaintext, 1855d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 186748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string* signature) override { 1874dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->Sign(key_handle, scheme, hash_alg, plaintext, delegate, 188748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi signature); 189748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi } 190748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 191748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_RC Verify(TPM_HANDLE key_handle, 192748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID scheme, 193748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID hash_alg, 194887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi const std::string& plaintext, 1956f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi const std::string& signature, 1966f68562edf5f66006c08de24d558732d6a389631Utkarsh Sanghi AuthorizationDelegate* delegate) override { 1974dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->Verify(key_handle, scheme, hash_alg, plaintext, signature, 1984dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn delegate); 199748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi } 200748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi 201fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi TPM_RC CertifyCreation(TPM_HANDLE key_handle, 202fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi const std::string& creation_blob) override { 203fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi return target_->CertifyCreation(key_handle, creation_blob); 204fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi } 205fded77411da5ef66dff7389e49f40900c19d510cUtkarsh Sanghi 20633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC ChangeKeyAuthorizationData(TPM_HANDLE key_handle, 20733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& new_password, 2085d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 20933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string* key_blob) override { 2104dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->ChangeKeyAuthorizationData(key_handle, new_password, 2114dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn delegate, key_blob); 21233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi } 21333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 21433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC ImportRSAKey(AsymmetricKeyUsage key_type, 21533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& modulus, 21633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent, 21733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& prime_factor, 21833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& password, 2195d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 22033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string* key_blob) override { 22133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi return target_->ImportRSAKey(key_type, modulus, public_exponent, 2225d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi prime_factor, password, delegate, key_blob); 22333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi } 22433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 2256465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC CreateRSAKeyPair(AsymmetricKeyUsage key_type, 2266465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi int modulus_bits, 2276465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi uint32_t public_exponent, 2286465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi const std::string& password, 2296ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi const std::string& policy_digest, 2306ea135676cf391fac45b0051242ccac935c8bc62Utkarsh Sanghi bool use_only_policy_authorization, 2310ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi int creation_pcr_index, 2325d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 233a5a2f2ea49e0085bf8d7f6f2b6e7cd624d710c01Utkarsh Sanghi std::string* key_blob, 234a5a2f2ea49e0085bf8d7f6f2b6e7cd624d710c01Utkarsh Sanghi std::string* creation_blob) override { 2354dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->CreateRSAKeyPair( 2364dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn key_type, modulus_bits, public_exponent, password, policy_digest, 2374dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn use_only_policy_authorization, creation_pcr_index, delegate, key_blob, 2384dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn creation_blob); 2396465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi } 2406465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 2416465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC LoadKey(const std::string& key_blob, 2425d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate, 2436465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_HANDLE* key_handle) override { 2445d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return target_->LoadKey(key_blob, delegate, key_handle); 2456465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi } 2466465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 2476465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC GetKeyName(TPM_HANDLE handle, std::string* name) override { 2486465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi return target_->GetKeyName(handle, name); 2496465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi } 2506465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 2516465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC GetKeyPublicArea(TPM_HANDLE handle, 2528b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPMT_PUBLIC* public_data) override { 2536465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi return target_->GetKeyPublicArea(handle, public_data); 25482b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi } 25582b03cf80cbe7ab5d5edb2cb46d245721e993a68Utkarsh Sanghi 256a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM_RC SealData(const std::string& data_to_seal, 257a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi const std::string& policy_digest, 258a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi AuthorizationDelegate* delegate, 259a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string* sealed_data) override { 2604dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->SealData(data_to_seal, policy_digest, delegate, 2614dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn sealed_data); 262a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi } 263a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 264a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM_RC UnsealData(const std::string& sealed_data, 265a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi AuthorizationDelegate* delegate, 266a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string* unsealed_data) override { 267a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi return target_->UnsealData(sealed_data, delegate, unsealed_data); 268a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi } 269a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 270a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM_RC StartSession(HmacSession* session) override { 271a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi return target_->StartSession(session); 272a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi } 273a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 274a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi TPM_RC GetPolicyDigestForPcrValue(int pcr_index, 275a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi const std::string& pcr_value, 276a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi std::string* policy_digest) override { 277a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi return target_->GetPolicyDigestForPcrValue(pcr_index, pcr_value, 278a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi policy_digest); 279a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi } 280a6e332ee7f5fe52c1291d961dbeda975c8272044Utkarsh Sanghi 28139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC DefineNVSpace(uint32_t index, 28239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t num_bytes, 283b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPMA_NV attributes, 284b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn const std::string& authorization_value, 285b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn const std::string& policy_digest, 2865d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 287b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->DefineNVSpace(index, num_bytes, attributes, 288b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn authorization_value, policy_digest, delegate); 28939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 29039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 29139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC DestroyNVSpace(uint32_t index, 2925d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 2935d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi return target_->DestroyNVSpace(index, delegate); 29439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 29539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 296b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPM_RC LockNVSpace(uint32_t index, 297b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool lock_read, 298b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool lock_write, 299b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool using_owner_authorization, 300b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn AuthorizationDelegate* delegate) override { 301b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->LockNVSpace(index, lock_read, lock_write, 302b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn using_owner_authorization, delegate); 30339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 30439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 30539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC WriteNVSpace(uint32_t index, 30639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset, 30739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi const std::string& nvram_data, 308b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool using_owner_authorization, 309b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool extend, 3105d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 311b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->WriteNVSpace(index, offset, nvram_data, 312b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn using_owner_authorization, extend, delegate); 31339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 31439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 31539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC ReadNVSpace(uint32_t index, 31639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset, 31739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t num_bytes, 318b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn bool using_owner_authorization, 31939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string* nvram_data, 3205d3b9451ae2e912aefed0669dd50b2a777ea0ab2Utkarsh Sanghi AuthorizationDelegate* delegate) override { 321b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->ReadNVSpace(index, offset, num_bytes, 322b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn using_owner_authorization, nvram_data, 323b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn delegate); 32439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 32539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 32639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC GetNVSpaceName(uint32_t index, std::string* name) override { 32739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi return target_->GetNVSpaceName(index, name); 32839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 32939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 33039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC GetNVSpacePublicArea(uint32_t index, 33139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC* public_data) override { 33239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi return target_->GetNVSpacePublicArea(index, public_data); 33339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi } 33439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 335b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPM_RC ListNVSpaces(std::vector<uint32_t>* index_list) override { 336b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->ListNVSpaces(index_list); 337b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 338b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 339b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPM_RC SetDictionaryAttackParameters( 340b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn uint32_t max_tries, 341b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn uint32_t recovery_time, 342b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn uint32_t lockout_recovery, 343b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn AuthorizationDelegate* delegate) override { 344b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->SetDictionaryAttackParameters(max_tries, recovery_time, 345b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn lockout_recovery, delegate); 346b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 347b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 348b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPM_RC ResetDictionaryAttackLock(AuthorizationDelegate* delegate) override { 349b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn return target_->ResetDictionaryAttackLock(delegate); 350b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn } 351b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 35203d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn private: 35303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TpmUtility* target_; 35403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn}; 35503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 35603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn// Forwards all calls to a target instance. 357c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass AuthorizationDelegateForwarder : public AuthorizationDelegate { 358c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public: 359c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn explicit AuthorizationDelegateForwarder(AuthorizationDelegate* target) 360c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn : target_(target) {} 3610ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~AuthorizationDelegateForwarder() override = default; 362c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 363c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn bool GetCommandAuthorization(const std::string& command_hash, 3641aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn bool is_command_parameter_encryption_possible, 3651aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn bool is_response_parameter_encryption_possible, 366c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn std::string* authorization) override { 3671aeb5969d4f286e36fe88152ad8c96cff668c25fDarren Krahn return target_->GetCommandAuthorization( 3684dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn command_hash, is_command_parameter_encryption_possible, 3694dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn is_response_parameter_encryption_possible, authorization); 370c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 371c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 372c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn bool CheckResponseAuthorization(const std::string& response_hash, 373c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn const std::string& authorization) override { 374c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn return target_->CheckResponseAuthorization(response_hash, authorization); 375c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 376c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 377c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn bool EncryptCommandParameter(std::string* parameter) override { 378c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn return target_->EncryptCommandParameter(parameter); 379c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 380c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 381c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn bool DecryptResponseParameter(std::string* parameter) override { 382c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn return target_->DecryptResponseParameter(parameter); 383c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn } 384c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 385c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private: 386c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn AuthorizationDelegate* target_; 387c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 388c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 38952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn// Forwards all calls to a target instance. 390ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass SessionManagerForwarder : public SessionManager { 39152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn public: 392ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi explicit SessionManagerForwarder(SessionManager* target) : target_(target) {} 393ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi ~SessionManagerForwarder() override {} 394ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 395ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_HANDLE GetSessionHandle() const override { 396ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi return target_->GetSessionHandle(); 397ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 398ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 3994dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn void CloseSession() override { return target_->CloseSession(); } 400ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 4014dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC StartSession(TPM_SE session_type, 4024dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPMI_DH_ENTITY bind_entity, 403ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi const std::string& bind_authorization_value, 404ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi bool enable_encryption, 405ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi HmacAuthorizationDelegate* delegate) override { 406ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi return target_->StartSession(session_type, bind_entity, 4074dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn bind_authorization_value, enable_encryption, 4084dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn delegate); 409ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 410ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 411ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi private: 412ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi SessionManager* target_; 413ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi}; 414ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 415ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi// Forwards all calls to a target instance. 416ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass HmacSessionForwarder : public HmacSession { 417ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public: 4184dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn explicit HmacSessionForwarder(HmacSession* target) : target_(target) {} 4190ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~HmacSessionForwarder() override = default; 42052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 42152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn AuthorizationDelegate* GetDelegate() override { 42252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn return target_->GetDelegate(); 42352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 42452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 425ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RC StartBoundSession(TPMI_DH_ENTITY bind_entity, 426ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi const std::string& bind_authorization_value, 427ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi bool enable_encryption) override { 4284dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->StartBoundSession(bind_entity, bind_authorization_value, 42952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn enable_encryption); 43052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 43152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 43252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TPM_RC StartUnboundSession(bool enable_encryption) override { 43352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn return target_->StartUnboundSession(enable_encryption); 43452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 43552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 43652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn void SetEntityAuthorizationValue(const std::string& value) override { 43752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn return target_->SetEntityAuthorizationValue(value); 43852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn } 43952e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 440d89b4dc09f61e540caa077c6d53b9abf698e6d6fUtkarsh Sanghi void SetFutureAuthorizationValue(const std::string& value) override { 441d89b4dc09f61e540caa077c6d53b9abf698e6d6fUtkarsh Sanghi return target_->SetFutureAuthorizationValue(value); 442d89b4dc09f61e540caa077c6d53b9abf698e6d6fUtkarsh Sanghi } 443d89b4dc09f61e540caa077c6d53b9abf698e6d6fUtkarsh Sanghi 44452e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn private: 445ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi HmacSession* target_; 446ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi}; 447ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 448ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi// Forwards all calls to a target instance. 449ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghiclass PolicySessionForwarder : public PolicySession { 450ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi public: 4514dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn explicit PolicySessionForwarder(PolicySession* target) : target_(target) {} 4520ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~PolicySessionForwarder() override = default; 453ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 454ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi AuthorizationDelegate* GetDelegate() override { 455ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi return target_->GetDelegate(); 456ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 457ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 458ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RC StartBoundSession(TPMI_DH_ENTITY bind_entity, 459ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi const std::string& bind_authorization_value, 460ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi bool enable_encryption) override { 4614dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn return target_->StartBoundSession(bind_entity, bind_authorization_value, 462ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi enable_encryption); 463ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 464ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 465ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi TPM_RC StartUnboundSession(bool enable_encryption) override { 466ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi return target_->StartUnboundSession(enable_encryption); 467ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi } 468ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 469fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi TPM_RC GetDigest(std::string* digest) override { 470fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi return target_->GetDigest(digest); 471fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi } 472fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 473fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi TPM_RC PolicyOR(const std::vector<std::string>& digests) override { 474fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi return target_->PolicyOR(digests); 475fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi } 476fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 477fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi TPM_RC PolicyPCR(uint32_t pcr_index, const std::string& pcr_value) override { 478fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi return target_->PolicyPCR(pcr_index, pcr_value); 479fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi } 480fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 481fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi TPM_RC PolicyCommandCode(TPM_CC command_code) override { 482fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi return target_->PolicyCommandCode(command_code); 483fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi } 484fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 4854dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn TPM_RC PolicyAuthValue() override { return target_->PolicyAuthValue(); } 486fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 487b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn TPM_RC PolicyRestart() override { return target_->PolicyRestart(); } 488b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn 489fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi void SetEntityAuthorizationValue(const std::string& value) override { 490fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi return target_->SetEntityAuthorizationValue(value); 491fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi } 492fc942a5ffc967b7b2b206aee8b91b3bae1933382Utkarsh Sanghi 493ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi private: 494ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi PolicySession* target_; 49552e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn}; 49652e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 4970ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi// Forwards all calls to a target instance. 4980ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghiclass BlobParserForwarder : public BlobParser { 4990ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi public: 5004dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn explicit BlobParserForwarder(BlobParser* target) : target_(target) {} 5010ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi ~BlobParserForwarder() override = default; 5020ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 5030ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi bool SerializeKeyBlob(const TPM2B_PUBLIC& public_info, 5040ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi const TPM2B_PRIVATE& private_info, 5050ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string* key_blob) override { 5060ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi return target_->SerializeKeyBlob(public_info, private_info, key_blob); 5070ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi } 5080ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 5090ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi bool ParseKeyBlob(const std::string& key_blob, 5100ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM2B_PUBLIC* public_info, 5110ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM2B_PRIVATE* private_info) override { 5120ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi return target_->ParseKeyBlob(key_blob, public_info, private_info); 5130ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi } 5140ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 5150ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi bool SerializeCreationBlob(const TPM2B_CREATION_DATA& creation_data, 5160ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi const TPM2B_DIGEST& creation_hash, 5170ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi const TPMT_TK_CREATION& creation_ticket, 5180ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi std::string* creation_blob) override { 5190ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi return target_->SerializeCreationBlob(creation_data, creation_hash, 5200ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi creation_ticket, creation_blob); 5210ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi } 5220ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 5230ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi bool ParseCreationBlob(const std::string& creation_blob, 5240ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM2B_CREATION_DATA* creation_data, 5250ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPM2B_DIGEST* creation_hash, 5260ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi TPMT_TK_CREATION* creation_ticket) override { 5270ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi return target_->ParseCreationBlob(creation_blob, creation_data, 5280ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi creation_hash, creation_ticket); 5290ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi } 5300ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 5310ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi private: 5320ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi BlobParser* target_; 5330ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi}; 5340ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 535c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTrunksFactoryForTest::TrunksFactoryForTest() 536c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn : default_tpm_(new NiceMock<MockTpm>()), 537c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn tpm_(default_tpm_.get()), 538c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn default_tpm_state_(new NiceMock<MockTpmState>()), 539c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn tpm_state_(default_tpm_state_.get()), 54003d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn default_tpm_utility_(new NiceMock<MockTpmUtility>()), 54103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn tpm_utility_(default_tpm_utility_.get()), 5426318d4413806a501783a003bf249e3ae627c73edUtkarsh Sanghi default_authorization_delegate_(new PasswordAuthorizationDelegate("")), 54352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn password_authorization_delegate_(default_authorization_delegate_.get()), 544ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi default_session_manager_(new NiceMock<MockSessionManager>()), 545ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi session_manager_(default_session_manager_.get()), 546ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi default_hmac_session_(new NiceMock<MockHmacSession>()), 547ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi hmac_session_(default_hmac_session_.get()), 548ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi default_policy_session_(new NiceMock<MockPolicySession>()), 5490ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi policy_session_(default_policy_session_.get()), 550b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn default_trial_session_(new NiceMock<MockPolicySession>()), 551b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn trial_session_(default_trial_session_.get()), 5520ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi default_blob_parser_(new NiceMock<MockBlobParser>()), 5534dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn blob_parser_(default_blob_parser_.get()) {} 554c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 555ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh SanghiTrunksFactoryForTest::~TrunksFactoryForTest() {} 556c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 557c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren KrahnTpm* TrunksFactoryForTest::GetTpm() const { 558c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn return tpm_; 559c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 560c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 56130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<TpmState> TrunksFactoryForTest::GetTpmState() const { 56230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<TpmStateForwarder>(tpm_state_); 563c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 564c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 56530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<TpmUtility> TrunksFactoryForTest::GetTpmUtility() const { 56630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<TpmUtilityForwarder>(tpm_utility_); 56703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn} 56803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn 56930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<AuthorizationDelegate> 5704dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren KrahnTrunksFactoryForTest::GetPasswordAuthorization( 5714dc4629c415e7ca90ff146d7bb75b5646ecd8b17Darren Krahn const std::string& password) const { 57230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<AuthorizationDelegateForwarder>( 57330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez password_authorization_delegate_); 574c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} 575c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 576b180754b429c078cbc99175a6059a8b5d0491002Darren Krahnstd::unique_ptr<SessionManager> TrunksFactoryForTest::GetSessionManager() 577b180754b429c078cbc99175a6059a8b5d0491002Darren Krahn const { 57830c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<SessionManagerForwarder>(session_manager_); 579ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 580ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 58130c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<HmacSession> TrunksFactoryForTest::GetHmacSession() const { 58230c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<HmacSessionForwarder>(hmac_session_); 583ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi} 584ff7f2da556b21253a52abbc82e7cf7bee54a850eUtkarsh Sanghi 58530c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<PolicySession> TrunksFactoryForTest::GetPolicySession() const { 58630c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<PolicySessionForwarder>(policy_session_); 58752e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn} 58852e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn 58930c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<PolicySession> TrunksFactoryForTest::GetTrialSession() const { 590ce32afbb304bbca521ec0333b41c82d736295ec7Darren Krahn return base::MakeUnique<PolicySessionForwarder>(trial_session_); 591be41115c49f10e8b81ae27963dfebb893c98f06aUtkarsh Sanghi} 592be41115c49f10e8b81ae27963dfebb893c98f06aUtkarsh Sanghi 59330c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavezstd::unique_ptr<BlobParser> TrunksFactoryForTest::GetBlobParser() const { 59430c921db09d27768acc1ea0d8b6a9c8e814f931aLuis Hector Chavez return base::MakeUnique<BlobParserForwarder>(blob_parser_); 5950ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi} 5960ebbc58fe6d45378a5b502c33eb1c4289fd8b05bUtkarsh Sanghi 597c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 598