tpm_utility_impl.h revision 8b2bf63478b292937f85b3b0e215882af461a999
1c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved. 2c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Use of this source code is governed by a BSD-style license that can be 3c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// found in the LICENSE file. 4c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 5c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#ifndef TRUNKS_TPM_UTILITY_IMPL_H_ 6c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#define TRUNKS_TPM_UTILITY_IMPL_H_ 7c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 8c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_utility.h" 9c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 10c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <string> 11c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 12c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <base/macros.h> 1352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn#include <base/memory/scoped_ptr.h> 142ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi#include <gtest/gtest_prod.h> 15c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 16ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahn#include "trunks/trunks_export.h" 17ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahn 18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks { 19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass AuthorizationDelegate; 2152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahnclass AuthorizationSession; 22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass TrunksFactory; 23c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 24c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// A default implementation of TpmUtility. 25ef87f3e63b93ff722a8cbcee9c54d55d085221a3Darren Krahnclass TRUNKS_EXPORT TpmUtilityImpl : public TpmUtility { 26c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public: 27c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn explicit TpmUtilityImpl(const TrunksFactory& factory); 28c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn virtual ~TpmUtilityImpl(); 29c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // TpmUtility methods. 3103d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn TPM_RC Startup() override; 32d75dcae8a010d1ced7554dd25a440bee350a2d06Utkarsh Sanghi TPM_RC Clear() override; 33e8b9a556d4561617747fed4ee5ced70fce9a4392Utkarsh Sanghi void Shutdown() override; 34c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TPM_RC InitializeTpm() override; 352ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_RC TakeOwnership(const std::string& owner_password, 362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi const std::string& endorsement_password, 372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi const std::string& lockout_password) override; 388b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_RC StirRandom(const std::string& entropy_data, 398b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi AuthorizationSession* session) override; 4035af244e7cf856a02e46ec8f186f36c53582757dUtkarsh Sanghi TPM_RC GenerateRandom(size_t num_bytes, 418b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi AuthorizationSession* session, 42e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi std::string* random_data) override; 438b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPM_RC ExtendPCR(int pcr_index, 448b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi const std::string& extend_data, 458b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi AuthorizationSession* session) override; 46579dd8a934c684f2e2a34d9aa2f67953320428acUtkarsh Sanghi TPM_RC ReadPCR(int pcr_index, std::string* pcr_value) override; 47b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_RC AsymmetricEncrypt(TPM_HANDLE key_handle, 48b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_ID scheme, 499dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_ID hash_alg, 50b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi const std::string& plaintext, 518b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi AuthorizationSession* session, 52b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string* ciphertext) override; 53b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_RC AsymmetricDecrypt(TPM_HANDLE key_handle, 54b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi TPM_ALG_ID scheme, 559dc77fecdb2446da134b9b2901173bb4dcf5e5e4Utkarsh Sanghi TPM_ALG_ID hash_alg, 56b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi const std::string& ciphertext, 572ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi AuthorizationSession* session, 58b3ba5e0b579a5462c7137cf49b49cc9a78d87944Utkarsh Sanghi std::string* plaintext) override; 59748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_RC Sign(TPM_HANDLE key_handle, 60748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID scheme, 61748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID hash_alg, 62887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi const std::string& plaintext, 632ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi AuthorizationSession* session, 64748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi std::string* signature) override; 65748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_RC Verify(TPM_HANDLE key_handle, 66748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID scheme, 67748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi TPM_ALG_ID hash_alg, 68887ccbcc4db5fa0b5221018296aa49b86a5ac26fUtkarsh Sanghi const std::string& plaintext, 69748f7d68284813a78b883f9c05988f6de535fc8aUtkarsh Sanghi const std::string& signature) override; 7033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC ChangeKeyAuthorizationData(TPM_HANDLE key_handle, 7133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& new_password, 7233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AuthorizationSession* session, 7333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string* key_blob) override; 7433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC ImportRSAKey(AsymmetricKeyUsage key_type, 7533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& modulus, 7633ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi uint32_t public_exponent, 7733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& prime_factor, 7833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const std::string& password, 7933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi AuthorizationSession* session, 8033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string* key_blob) override; 816465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC CreateAndLoadRSAKey(AsymmetricKeyUsage key_type, 826465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi const std::string& password, 832ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi AuthorizationSession* session, 846465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_HANDLE* key_handle, 856465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi std::string* key_blob) override; 866465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC CreateRSAKeyPair(AsymmetricKeyUsage key_type, 876465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi int modulus_bits, 886465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi uint32_t public_exponent, 896465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi const std::string& password, 902ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi AuthorizationSession* session, 916465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi std::string* key_blob) override; 926465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC LoadKey(const std::string& key_blob, 932ff7e22ba2ef3bb7ce2747b1b9706dd242ef9284Utkarsh Sanghi AuthorizationSession* session, 946465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_HANDLE* key_handle) override; 956465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC GetKeyName(TPM_HANDLE handle, std::string* name) override; 966465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC GetKeyPublicArea(TPM_HANDLE handle, 978b2bf63478b292937f85b3b0e215882af461a999Utkarsh Sanghi TPMT_PUBLIC* public_data) override; 9839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC DefineNVSpace(uint32_t index, 9939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t num_bytes, 10039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi AuthorizationSession* session) override; 10139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC DestroyNVSpace(uint32_t index, AuthorizationSession* session) override; 10239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC LockNVSpace(uint32_t index, AuthorizationSession* session) override; 10339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC WriteNVSpace(uint32_t index, 10439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset, 10539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi const std::string& nvram_data, 10639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi AuthorizationSession* session) override; 10739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC ReadNVSpace(uint32_t index, 10839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi uint32_t offset, 10939dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi size_t num_bytes, 11039dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string* nvram_data, 11139dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi AuthorizationSession* session) override; 11239dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC GetNVSpaceName(uint32_t index, std::string* name) override; 11339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC GetNVSpacePublicArea(uint32_t index, 11439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPMS_NV_PUBLIC* public_data) override; 1151c4ff198686b6330dd863f872f52e8efd1a94e3dUtkarsh Sanghi 11680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // Creates a well-formed response with the given |error_code|. 11780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn static std::string CreateErrorResponse(TPM_RC error_code); 11880c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn 11980c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // Parses a |message| which may be a command or a response and provides 12080c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // whether the message |has_sessions|, the message |size|, and the command or 12180c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // response |code| for the message. Returns false if the message is not 12280c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn // well-formed. 12380c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn static bool ParseHeader(const std::string& message, 12480c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn bool* has_sessions, 12580c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn uint32_t* size, 12680c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn uint32_t* code); 12780c739e10fd606b24e2656cad6e566c66bb218d4Darren Krahn 1282ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi protected: 12933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, ImportRSAKeySuccess); 1302ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, RootKeysSuccess); 1312ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, RootKeysHandleConsistency); 1322ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, RootKeysCreateFailure); 1332ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, RootKeysPersistFailure); 1342ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, SaltingKeySuccess); 1352ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, SaltingKeyConsistency); 1362ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, SaltingKeyCreateFailure); 1372ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, SaltingKeyLoadFailure); 1382ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi FRIEND_TEST(TpmUtilityTest, SaltingKeyPersistFailure); 1392ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 140c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private: 141c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn const TrunksFactory& factory_; 142c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 1432ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // Synchronously derives storage root keys for RSA and ECC and persists the 1442ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // keys in the TPM. This operation must be authorized by the |owner_password| 1452ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // and, on success, KRSAStorageRootKey and kECCStorageRootKey can be used 1462ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // with an empty authorization value until the TPM is cleared. 1472ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_RC CreateStorageRootKeys(const std::string& owner_password); 1482ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 1492ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This method creates an RSA decryption key to be used for salting sessions. 1502ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // This method also makes the salting key permanent under the storage 1512ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi // hierarchy. 1522ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi TPM_RC CreateSaltingKey(const std::string& owner_password); 1532ee32a9d61896f544d87ecee24dc25cc33c9ebb3Utkarsh Sanghi 1546465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi // This method returns a partially filled TPMT_PUBLIC strucutre, 1556465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi // which can then be modified by other methods to create the public 1566465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi // template for a key. It takes a valid |key_type| tp construct the 1576465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi // parameters. 1586465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPMT_PUBLIC CreateDefaultPublicArea(TPM_ALG_ID key_alg); 1596465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 16052e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn // Sets TPM |hierarchy| authorization to |password| using |authorization|. 16152e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn TPM_RC SetHierarchyAuthorization(TPMI_RH_HIERARCHY_AUTH hierarchy, 16252e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn const std::string& password, 16352e2a45f585fbe34032eae5b094a092afdf217caDarren Krahn AuthorizationDelegate* authorization); 164c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 165c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // Disables the TPM platform hierarchy until the next startup. This requires 166c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn // platform |authorization|. 167c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn TPM_RC DisablePlatformHierarchy(AuthorizationDelegate* authorization); 168c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 1696465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC StringToKeyData(const std::string& key_blob, 1706465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM2B_PUBLIC* public_info, 1716465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM2B_PRIVATE* private_info); 1726465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 1736465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi TPM_RC KeyDataToString(const TPM2B_PUBLIC& public_info, 1746465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi const TPM2B_PRIVATE& private_info, 1756465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi std::string* key_blob); 1766465502c740d2599d95e09232c744f6d2ed54505Utkarsh Sanghi 17733ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // Given a public area, this method computes the object name. Following 17833ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // TPM2.0 Specification Part 1 section 16, 17933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // object_name = HashAlg || Hash(public_area); 18033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC ComputeKeyName(const TPMT_PUBLIC& public_area, 18133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi std::string* object_name); 18233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 18339dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi // Given a public area, this method computers the NVSpace's name. 18439dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi // It follows TPM2.0 Specification Part 1 section 16, 18539dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi // nv_name = HashAlg || Hash(nv_public_area); 18639dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi TPM_RC ComputeNVSpaceName(const TPMS_NV_PUBLIC& nv_public_area, 18739dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi std::string* nv_name); 18839dd58452d7fe3ebe93490a6239a76b385bd676dUtkarsh Sanghi 18933ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // This encrypts the |sensitive_data| struct according to the specification 19033ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi // defined in TPM2.0 spec Part 1: Figure 19. 19133ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM_RC EncryptPrivateData(const TPMT_SENSITIVE& sensitive_area, 19233ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi const TPMT_PUBLIC& public_area, 19333ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_PRIVATE* encrypted_private_data, 19433ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi TPM2B_DATA* encryption_key); 19533ca033c9665b8496f3491037403ae1574a54227Utkarsh Sanghi 196c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn DISALLOW_COPY_AND_ASSIGN(TpmUtilityImpl); 197c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}; 198c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 199c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn} // namespace trunks 200c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn 201c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#endif // TRUNKS_TPM_UTILITY_IMPL_H_ 202