//
// Copyright (C) 2014 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef TRUNKS_MOCK_TPM_H_
#define TRUNKS_MOCK_TPM_H_

#include <string>

#include <base/callback.h>
#include <gmock/gmock.h>

#include "trunks/tpm_generated.h"

namespace trunks {

class MockTpm : public Tpm {
 public:
  explicit MockTpm(CommandTransceiver* transceiver = nullptr);
  ~MockTpm() override;

  MOCK_METHOD0(get_transceiver, CommandTransceiver*());
  MOCK_METHOD3(Startup,
               void(const TPM_SU& startup_type,
                    AuthorizationDelegate* authorization_delegate,
                    const StartupResponse& callback));
  MOCK_METHOD2(StartupSync,
               TPM_RC(const TPM_SU& startup_type,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(Shutdown,
               void(const TPM_SU& shutdown_type,
                    AuthorizationDelegate* authorization_delegate,
                    const ShutdownResponse& callback));
  MOCK_METHOD2(ShutdownSync,
               TPM_RC(const TPM_SU& shutdown_type,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(SelfTest,
               void(const TPMI_YES_NO& full_test,
                    AuthorizationDelegate* authorization_delegate,
                    const SelfTestResponse& callback));
  MOCK_METHOD2(SelfTestSync,
               TPM_RC(const TPMI_YES_NO& full_test,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(IncrementalSelfTest,
               void(const TPML_ALG& to_test,
                    AuthorizationDelegate* authorization_delegate,
                    const IncrementalSelfTestResponse& callback));
  MOCK_METHOD3(IncrementalSelfTestSync,
               TPM_RC(const TPML_ALG& to_test,
                      TPML_ALG* to_do_list,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD2(GetTestResult,
               void(AuthorizationDelegate* authorization_delegate,
                    const GetTestResultResponse& callback));
  MOCK_METHOD3(GetTestResultSync,
               TPM_RC(TPM2B_MAX_BUFFER* out_data,
                      TPM_RC* test_result,
                      AuthorizationDelegate* authorization_delegate));
  // Too many args to mock, forward to *Short version.
  void StartAuthSession(const TPMI_DH_OBJECT& tpm_key,
                        const std::string& tpm_key_name,
                        const TPMI_DH_ENTITY& bind,
                        const std::string& bind_name,
                        const TPM2B_NONCE& nonce_caller,
                        const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
                        const TPM_SE& session_type,
                        const TPMT_SYM_DEF& symmetric,
                        const TPMI_ALG_HASH& auth_hash,
                        AuthorizationDelegate* authorization_delegate,
                        const StartAuthSessionResponse& callback) override;
  MOCK_METHOD9(StartAuthSessionShort,
               void(const TPMI_DH_OBJECT& tpm_key,
                    const TPMI_DH_ENTITY& bind,
                    const TPM2B_NONCE& nonce_caller,
                    const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
                    const TPM_SE& session_type,
                    const TPMT_SYM_DEF& symmetric,
                    const TPMI_ALG_HASH& auth_hash,
                    AuthorizationDelegate* authorization_delegate,
                    const StartAuthSessionResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC StartAuthSessionSync(
      const TPMI_DH_OBJECT& tpm_key,
      const std::string& tpm_key_name,
      const TPMI_DH_ENTITY& bind,
      const std::string& bind_name,
      const TPM2B_NONCE& nonce_caller,
      const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
      const TPM_SE& session_type,
      const TPMT_SYM_DEF& symmetric,
      const TPMI_ALG_HASH& auth_hash,
      TPMI_SH_AUTH_SESSION* session_handle,
      TPM2B_NONCE* nonce_tpm,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(StartAuthSessionSyncShort,
                TPM_RC(const TPMI_DH_OBJECT& tpm_key,
                       const TPMI_DH_ENTITY& bind,
                       const TPM2B_NONCE& nonce_caller,
                       const TPM2B_ENCRYPTED_SECRET& encrypted_salt,
                       const TPM_SE& session_type,
                       const TPMT_SYM_DEF& symmetric,
                       const TPMI_ALG_HASH& auth_hash,
                       TPMI_SH_AUTH_SESSION* session_handle,
                       TPM2B_NONCE* nonce_tpm,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PolicyRestart,
               void(const TPMI_SH_POLICY& session_handle,
                    const std::string& session_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyRestartResponse& callback));
  MOCK_METHOD3(PolicyRestartSync,
               TPM_RC(const TPMI_SH_POLICY& session_handle,
                      const std::string& session_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(Create,
               void(const TPMI_DH_OBJECT& parent_handle,
                    const std::string& parent_handle_name,
                    const TPM2B_SENSITIVE_CREATE& in_sensitive,
                    const TPM2B_PUBLIC& in_public,
                    const TPM2B_DATA& outside_info,
                    const TPML_PCR_SELECTION& creation_pcr,
                    AuthorizationDelegate* authorization_delegate,
                    const CreateResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC CreateSync(const TPMI_DH_OBJECT& parent_handle,
                    const std::string& parent_handle_name,
                    const TPM2B_SENSITIVE_CREATE& in_sensitive,
                    const TPM2B_PUBLIC& in_public,
                    const TPM2B_DATA& outside_info,
                    const TPML_PCR_SELECTION& creation_pcr,
                    TPM2B_PRIVATE* out_private,
                    TPM2B_PUBLIC* out_public,
                    TPM2B_CREATION_DATA* creation_data,
                    TPM2B_DIGEST* creation_hash,
                    TPMT_TK_CREATION* creation_ticket,
                    AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(CreateSyncShort,
                TPM_RC(const TPMI_DH_OBJECT& parent_handle,
                       const TPM2B_SENSITIVE_CREATE& in_sensitive,
                       const TPM2B_PUBLIC& in_public,
                       const TPML_PCR_SELECTION& creation_pcr,
                       TPM2B_PRIVATE* out_private,
                       TPM2B_PUBLIC* out_public,
                       TPM2B_CREATION_DATA* creation_data,
                       TPM2B_DIGEST* creation_hash,
                       TPMT_TK_CREATION* creation_ticket,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(Load,
               void(const TPMI_DH_OBJECT& parent_handle,
                    const std::string& parent_handle_name,
                    const TPM2B_PRIVATE& in_private,
                    const TPM2B_PUBLIC& in_public,
                    AuthorizationDelegate* authorization_delegate,
                    const LoadResponse& callback));
  MOCK_METHOD7(LoadSync,
               TPM_RC(const TPMI_DH_OBJECT& parent_handle,
                      const std::string& parent_handle_name,
                      const TPM2B_PRIVATE& in_private,
                      const TPM2B_PUBLIC& in_public,
                      TPM_HANDLE* object_handle,
                      TPM2B_NAME* name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(LoadExternal,
               void(const TPM2B_SENSITIVE& in_private,
                    const TPM2B_PUBLIC& in_public,
                    const TPMI_RH_HIERARCHY& hierarchy,
                    AuthorizationDelegate* authorization_delegate,
                    const LoadExternalResponse& callback));
  MOCK_METHOD6(LoadExternalSync,
               TPM_RC(const TPM2B_SENSITIVE& in_private,
                      const TPM2B_PUBLIC& in_public,
                      const TPMI_RH_HIERARCHY& hierarchy,
                      TPM_HANDLE* object_handle,
                      TPM2B_NAME* name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(ReadPublic,
               void(const TPMI_DH_OBJECT& object_handle,
                    const std::string& object_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ReadPublicResponse& callback));
  MOCK_METHOD6(ReadPublicSync,
               TPM_RC(const TPMI_DH_OBJECT& object_handle,
                      const std::string& object_handle_name,
                      TPM2B_PUBLIC* out_public,
                      TPM2B_NAME* name,
                      TPM2B_NAME* qualified_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(ActivateCredential,
               void(const TPMI_DH_OBJECT& activate_handle,
                    const std::string& activate_handle_name,
                    const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_ID_OBJECT& credential_blob,
                    const TPM2B_ENCRYPTED_SECRET& secret,
                    AuthorizationDelegate* authorization_delegate,
                    const ActivateCredentialResponse& callback));
  MOCK_METHOD8(ActivateCredentialSync,
               TPM_RC(const TPMI_DH_OBJECT& activate_handle,
                      const std::string& activate_handle_name,
                      const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_ID_OBJECT& credential_blob,
                      const TPM2B_ENCRYPTED_SECRET& secret,
                      TPM2B_DIGEST* cert_info,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(MakeCredential,
               void(const TPMI_DH_OBJECT& handle,
                    const std::string& handle_name,
                    const TPM2B_DIGEST& credential,
                    const TPM2B_NAME& object_name,
                    AuthorizationDelegate* authorization_delegate,
                    const MakeCredentialResponse& callback));
  MOCK_METHOD7(MakeCredentialSync,
               TPM_RC(const TPMI_DH_OBJECT& handle,
                      const std::string& handle_name,
                      const TPM2B_DIGEST& credential,
                      const TPM2B_NAME& object_name,
                      TPM2B_ID_OBJECT* credential_blob,
                      TPM2B_ENCRYPTED_SECRET* secret,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(Unseal,
               void(const TPMI_DH_OBJECT& item_handle,
                    const std::string& item_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const UnsealResponse& callback));
  MOCK_METHOD4(UnsealSync,
               TPM_RC(const TPMI_DH_OBJECT& item_handle,
                      const std::string& item_handle_name,
                      TPM2B_SENSITIVE_DATA* out_data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(ObjectChangeAuth,
               void(const TPMI_DH_OBJECT& object_handle,
                    const std::string& object_handle_name,
                    const TPMI_DH_OBJECT& parent_handle,
                    const std::string& parent_handle_name,
                    const TPM2B_AUTH& new_auth,
                    AuthorizationDelegate* authorization_delegate,
                    const ObjectChangeAuthResponse& callback));
  MOCK_METHOD7(ObjectChangeAuthSync,
               TPM_RC(const TPMI_DH_OBJECT& object_handle,
                      const std::string& object_handle_name,
                      const TPMI_DH_OBJECT& parent_handle,
                      const std::string& parent_handle_name,
                      const TPM2B_AUTH& new_auth,
                      TPM2B_PRIVATE* out_private,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(Duplicate,
               void(const TPMI_DH_OBJECT& object_handle,
                    const std::string& object_handle_name,
                    const TPMI_DH_OBJECT& new_parent_handle,
                    const std::string& new_parent_handle_name,
                    const TPM2B_DATA& encryption_key_in,
                    const TPMT_SYM_DEF_OBJECT& symmetric_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const DuplicateResponse& callback));
  MOCK_METHOD10(DuplicateSync,
                TPM_RC(const TPMI_DH_OBJECT& object_handle,
                       const std::string& object_handle_name,
                       const TPMI_DH_OBJECT& new_parent_handle,
                       const std::string& new_parent_handle_name,
                       const TPM2B_DATA& encryption_key_in,
                       const TPMT_SYM_DEF_OBJECT& symmetric_alg,
                       TPM2B_DATA* encryption_key_out,
                       TPM2B_PRIVATE* duplicate,
                       TPM2B_ENCRYPTED_SECRET* out_sym_seed,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD9(Rewrap,
               void(const TPMI_DH_OBJECT& old_parent,
                    const std::string& old_parent_name,
                    const TPMI_DH_OBJECT& new_parent,
                    const std::string& new_parent_name,
                    const TPM2B_PRIVATE& in_duplicate,
                    const TPM2B_NAME& name,
                    const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
                    AuthorizationDelegate* authorization_delegate,
                    const RewrapResponse& callback));
  MOCK_METHOD10(RewrapSync,
                TPM_RC(const TPMI_DH_OBJECT& old_parent,
                       const std::string& old_parent_name,
                       const TPMI_DH_OBJECT& new_parent,
                       const std::string& new_parent_name,
                       const TPM2B_PRIVATE& in_duplicate,
                       const TPM2B_NAME& name,
                       const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
                       TPM2B_PRIVATE* out_duplicate,
                       TPM2B_ENCRYPTED_SECRET* out_sym_seed,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD9(Import,
               void(const TPMI_DH_OBJECT& parent_handle,
                    const std::string& parent_handle_name,
                    const TPM2B_DATA& encryption_key,
                    const TPM2B_PUBLIC& object_public,
                    const TPM2B_PRIVATE& duplicate,
                    const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
                    const TPMT_SYM_DEF_OBJECT& symmetric_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const ImportResponse& callback));
  MOCK_METHOD9(ImportSync,
               TPM_RC(const TPMI_DH_OBJECT& parent_handle,
                      const std::string& parent_handle_name,
                      const TPM2B_DATA& encryption_key,
                      const TPM2B_PUBLIC& object_public,
                      const TPM2B_PRIVATE& duplicate,
                      const TPM2B_ENCRYPTED_SECRET& in_sym_seed,
                      const TPMT_SYM_DEF_OBJECT& symmetric_alg,
                      TPM2B_PRIVATE* out_private,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(RSA_Encrypt,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_PUBLIC_KEY_RSA& message,
                    const TPMT_RSA_DECRYPT& in_scheme,
                    const TPM2B_DATA& label,
                    AuthorizationDelegate* authorization_delegate,
                    const RSA_EncryptResponse& callback));
  MOCK_METHOD7(RSA_EncryptSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_PUBLIC_KEY_RSA& message,
                      const TPMT_RSA_DECRYPT& in_scheme,
                      const TPM2B_DATA& label,
                      TPM2B_PUBLIC_KEY_RSA* out_data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(RSA_Decrypt,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_PUBLIC_KEY_RSA& cipher_text,
                    const TPMT_RSA_DECRYPT& in_scheme,
                    const TPM2B_DATA& label,
                    AuthorizationDelegate* authorization_delegate,
                    const RSA_DecryptResponse& callback));
  MOCK_METHOD7(RSA_DecryptSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_PUBLIC_KEY_RSA& cipher_text,
                      const TPMT_RSA_DECRYPT& in_scheme,
                      const TPM2B_DATA& label,
                      TPM2B_PUBLIC_KEY_RSA* message,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(ECDH_KeyGen,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ECDH_KeyGenResponse& callback));
  MOCK_METHOD5(ECDH_KeyGenSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      TPM2B_ECC_POINT* z_point,
                      TPM2B_ECC_POINT* pub_point,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(ECDH_ZGen,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_ECC_POINT& in_point,
                    AuthorizationDelegate* authorization_delegate,
                    const ECDH_ZGenResponse& callback));
  MOCK_METHOD5(ECDH_ZGenSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_ECC_POINT& in_point,
                      TPM2B_ECC_POINT* out_point,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(ECC_Parameters,
               void(const TPMI_ECC_CURVE& curve_id,
                    AuthorizationDelegate* authorization_delegate,
                    const ECC_ParametersResponse& callback));
  MOCK_METHOD3(ECC_ParametersSync,
               TPM_RC(const TPMI_ECC_CURVE& curve_id,
                      TPMS_ALGORITHM_DETAIL_ECC* parameters,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(ZGen_2Phase,
               void(const TPMI_DH_OBJECT& key_a,
                    const std::string& key_a_name,
                    const TPM2B_ECC_POINT& in_qs_b,
                    const TPM2B_ECC_POINT& in_qe_b,
                    const TPMI_ECC_KEY_EXCHANGE& in_scheme,
                    const UINT16& counter,
                    AuthorizationDelegate* authorization_delegate,
                    const ZGen_2PhaseResponse& callback));
  MOCK_METHOD9(ZGen_2PhaseSync,
               TPM_RC(const TPMI_DH_OBJECT& key_a,
                      const std::string& key_a_name,
                      const TPM2B_ECC_POINT& in_qs_b,
                      const TPM2B_ECC_POINT& in_qe_b,
                      const TPMI_ECC_KEY_EXCHANGE& in_scheme,
                      const UINT16& counter,
                      TPM2B_ECC_POINT* out_z1,
                      TPM2B_ECC_POINT* out_z2,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(EncryptDecrypt,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPMI_YES_NO& decrypt,
                    const TPMI_ALG_SYM_MODE& mode,
                    const TPM2B_IV& iv_in,
                    const TPM2B_MAX_BUFFER& in_data,
                    AuthorizationDelegate* authorization_delegate,
                    const EncryptDecryptResponse& callback));
  MOCK_METHOD9(EncryptDecryptSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPMI_YES_NO& decrypt,
                      const TPMI_ALG_SYM_MODE& mode,
                      const TPM2B_IV& iv_in,
                      const TPM2B_MAX_BUFFER& in_data,
                      TPM2B_MAX_BUFFER* out_data,
                      TPM2B_IV* iv_out,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(Hash,
               void(const TPM2B_MAX_BUFFER& data,
                    const TPMI_ALG_HASH& hash_alg,
                    const TPMI_RH_HIERARCHY& hierarchy,
                    AuthorizationDelegate* authorization_delegate,
                    const HashResponse& callback));
  MOCK_METHOD6(HashSync,
               TPM_RC(const TPM2B_MAX_BUFFER& data,
                      const TPMI_ALG_HASH& hash_alg,
                      const TPMI_RH_HIERARCHY& hierarchy,
                      TPM2B_DIGEST* out_hash,
                      TPMT_TK_HASHCHECK* validation,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(HMAC,
               void(const TPMI_DH_OBJECT& handle,
                    const std::string& handle_name,
                    const TPM2B_MAX_BUFFER& buffer,
                    const TPMI_ALG_HASH& hash_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const HMACResponse& callback));
  MOCK_METHOD6(HMACSync,
               TPM_RC(const TPMI_DH_OBJECT& handle,
                      const std::string& handle_name,
                      const TPM2B_MAX_BUFFER& buffer,
                      const TPMI_ALG_HASH& hash_alg,
                      TPM2B_DIGEST* out_hmac,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(GetRandom,
               void(const UINT16& bytes_requested,
                    AuthorizationDelegate* authorization_delegate,
                    const GetRandomResponse& callback));
  MOCK_METHOD3(GetRandomSync,
               TPM_RC(const UINT16& bytes_requested,
                      TPM2B_DIGEST* random_bytes,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(StirRandom,
               void(const TPM2B_SENSITIVE_DATA& in_data,
                    AuthorizationDelegate* authorization_delegate,
                    const StirRandomResponse& callback));
  MOCK_METHOD2(StirRandomSync,
               TPM_RC(const TPM2B_SENSITIVE_DATA& in_data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(HMAC_Start,
               void(const TPMI_DH_OBJECT& handle,
                    const std::string& handle_name,
                    const TPM2B_AUTH& auth,
                    const TPMI_ALG_HASH& hash_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const HMAC_StartResponse& callback));
  MOCK_METHOD6(HMAC_StartSync,
               TPM_RC(const TPMI_DH_OBJECT& handle,
                      const std::string& handle_name,
                      const TPM2B_AUTH& auth,
                      const TPMI_ALG_HASH& hash_alg,
                      TPMI_DH_OBJECT* sequence_handle,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(HashSequenceStart,
               void(const TPM2B_AUTH& auth,
                    const TPMI_ALG_HASH& hash_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const HashSequenceStartResponse& callback));
  MOCK_METHOD4(HashSequenceStartSync,
               TPM_RC(const TPM2B_AUTH& auth,
                      const TPMI_ALG_HASH& hash_alg,
                      TPMI_DH_OBJECT* sequence_handle,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(SequenceUpdate,
               void(const TPMI_DH_OBJECT& sequence_handle,
                    const std::string& sequence_handle_name,
                    const TPM2B_MAX_BUFFER& buffer,
                    AuthorizationDelegate* authorization_delegate,
                    const SequenceUpdateResponse& callback));
  MOCK_METHOD4(SequenceUpdateSync,
               TPM_RC(const TPMI_DH_OBJECT& sequence_handle,
                      const std::string& sequence_handle_name,
                      const TPM2B_MAX_BUFFER& buffer,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(SequenceComplete,
               void(const TPMI_DH_OBJECT& sequence_handle,
                    const std::string& sequence_handle_name,
                    const TPM2B_MAX_BUFFER& buffer,
                    const TPMI_RH_HIERARCHY& hierarchy,
                    AuthorizationDelegate* authorization_delegate,
                    const SequenceCompleteResponse& callback));
  MOCK_METHOD7(SequenceCompleteSync,
               TPM_RC(const TPMI_DH_OBJECT& sequence_handle,
                      const std::string& sequence_handle_name,
                      const TPM2B_MAX_BUFFER& buffer,
                      const TPMI_RH_HIERARCHY& hierarchy,
                      TPM2B_DIGEST* result,
                      TPMT_TK_HASHCHECK* validation,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(EventSequenceComplete,
               void(const TPMI_DH_PCR& pcr_handle,
                    const std::string& pcr_handle_name,
                    const TPMI_DH_OBJECT& sequence_handle,
                    const std::string& sequence_handle_name,
                    const TPM2B_MAX_BUFFER& buffer,
                    AuthorizationDelegate* authorization_delegate,
                    const EventSequenceCompleteResponse& callback));
  MOCK_METHOD7(EventSequenceCompleteSync,
               TPM_RC(const TPMI_DH_PCR& pcr_handle,
                      const std::string& pcr_handle_name,
                      const TPMI_DH_OBJECT& sequence_handle,
                      const std::string& sequence_handle_name,
                      const TPM2B_MAX_BUFFER& buffer,
                      TPML_DIGEST_VALUES* results,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(Certify,
               void(const TPMI_DH_OBJECT& object_handle,
                    const std::string& object_handle_name,
                    const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const TPM2B_DATA& qualifying_data,
                    const TPMT_SIG_SCHEME& in_scheme,
                    AuthorizationDelegate* authorization_delegate,
                    const CertifyResponse& callback));
  MOCK_METHOD9(CertifySync,
               TPM_RC(const TPMI_DH_OBJECT& object_handle,
                      const std::string& object_handle_name,
                      const TPMI_DH_OBJECT& sign_handle,
                      const std::string& sign_handle_name,
                      const TPM2B_DATA& qualifying_data,
                      const TPMT_SIG_SCHEME& in_scheme,
                      TPM2B_ATTEST* certify_info,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD10(CertifyCreation,
                void(const TPMI_DH_OBJECT& sign_handle,
                     const std::string& sign_handle_name,
                     const TPMI_DH_OBJECT& object_handle,
                     const std::string& object_handle_name,
                     const TPM2B_DATA& qualifying_data,
                     const TPM2B_DIGEST& creation_hash,
                     const TPMT_SIG_SCHEME& in_scheme,
                     const TPMT_TK_CREATION& creation_ticket,
                     AuthorizationDelegate* authorization_delegate,
                     const CertifyCreationResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC CertifyCreationSync(
      const TPMI_DH_OBJECT& sign_handle,
      const std::string& sign_handle_name,
      const TPMI_DH_OBJECT& object_handle,
      const std::string& object_handle_name,
      const TPM2B_DATA& qualifying_data,
      const TPM2B_DIGEST& creation_hash,
      const TPMT_SIG_SCHEME& in_scheme,
      const TPMT_TK_CREATION& creation_ticket,
      TPM2B_ATTEST* certify_info,
      TPMT_SIGNATURE* signature,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD9(CertifyCreationSyncShort,
               TPM_RC(const TPMI_DH_OBJECT& sign_handle,
                      const TPMI_DH_OBJECT& object_handle,
                      const TPM2B_DATA& qualifying_data,
                      const TPM2B_DIGEST& creation_hash,
                      const TPMT_SIG_SCHEME& in_scheme,
                      const TPMT_TK_CREATION& creation_ticket,
                      TPM2B_ATTEST* certify_info,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(Quote,
               void(const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const TPM2B_DATA& qualifying_data,
                    const TPMT_SIG_SCHEME& in_scheme,
                    const TPML_PCR_SELECTION& pcrselect,
                    AuthorizationDelegate* authorization_delegate,
                    const QuoteResponse& callback));
  MOCK_METHOD8(QuoteSync,
               TPM_RC(const TPMI_DH_OBJECT& sign_handle,
                      const std::string& sign_handle_name,
                      const TPM2B_DATA& qualifying_data,
                      const TPMT_SIG_SCHEME& in_scheme,
                      const TPML_PCR_SELECTION& pcrselect,
                      TPM2B_ATTEST* quoted,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD10(GetSessionAuditDigest,
                void(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
                     const std::string& privacy_admin_handle_name,
                     const TPMI_DH_OBJECT& sign_handle,
                     const std::string& sign_handle_name,
                     const TPMI_SH_HMAC& session_handle,
                     const std::string& session_handle_name,
                     const TPM2B_DATA& qualifying_data,
                     const TPMT_SIG_SCHEME& in_scheme,
                     AuthorizationDelegate* authorization_delegate,
                     const GetSessionAuditDigestResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC GetSessionAuditDigestSync(
      const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
      const std::string& privacy_admin_handle_name,
      const TPMI_DH_OBJECT& sign_handle,
      const std::string& sign_handle_name,
      const TPMI_SH_HMAC& session_handle,
      const std::string& session_handle_name,
      const TPM2B_DATA& qualifying_data,
      const TPMT_SIG_SCHEME& in_scheme,
      TPM2B_ATTEST* audit_info,
      TPMT_SIGNATURE* signature,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD8(GetSessionAuditDigestSyncShort,
               TPM_RC(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
                      const TPMI_DH_OBJECT& sign_handle,
                      const TPMI_SH_HMAC& session_handle,
                      const TPM2B_DATA& qualifying_data,
                      const TPMT_SIG_SCHEME& in_scheme,
                      TPM2B_ATTEST* audit_info,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(GetCommandAuditDigest,
               void(const TPMI_RH_ENDORSEMENT& privacy_handle,
                    const std::string& privacy_handle_name,
                    const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const TPM2B_DATA& qualifying_data,
                    const TPMT_SIG_SCHEME& in_scheme,
                    AuthorizationDelegate* authorization_delegate,
                    const GetCommandAuditDigestResponse& callback));
  MOCK_METHOD9(GetCommandAuditDigestSync,
               TPM_RC(const TPMI_RH_ENDORSEMENT& privacy_handle,
                      const std::string& privacy_handle_name,
                      const TPMI_DH_OBJECT& sign_handle,
                      const std::string& sign_handle_name,
                      const TPM2B_DATA& qualifying_data,
                      const TPMT_SIG_SCHEME& in_scheme,
                      TPM2B_ATTEST* audit_info,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(GetTime,
               void(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
                    const std::string& privacy_admin_handle_name,
                    const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const TPM2B_DATA& qualifying_data,
                    const TPMT_SIG_SCHEME& in_scheme,
                    AuthorizationDelegate* authorization_delegate,
                    const GetTimeResponse& callback));
  MOCK_METHOD9(GetTimeSync,
               TPM_RC(const TPMI_RH_ENDORSEMENT& privacy_admin_handle,
                      const std::string& privacy_admin_handle_name,
                      const TPMI_DH_OBJECT& sign_handle,
                      const std::string& sign_handle_name,
                      const TPM2B_DATA& qualifying_data,
                      const TPMT_SIG_SCHEME& in_scheme,
                      TPM2B_ATTEST* time_info,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(Commit,
               void(const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const UINT32& param_size,
                    const TPM2B_ECC_POINT& p1,
                    const TPM2B_SENSITIVE_DATA& s2,
                    const TPM2B_ECC_PARAMETER& y2,
                    AuthorizationDelegate* authorization_delegate,
                    const CommitResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC CommitSync(const TPMI_DH_OBJECT& sign_handle,
                    const std::string& sign_handle_name,
                    const UINT32& param_size,
                    const TPM2B_ECC_POINT& p1,
                    const TPM2B_SENSITIVE_DATA& s2,
                    const TPM2B_ECC_PARAMETER& y2,
                    UINT32* param_size_out,
                    TPM2B_ECC_POINT* k,
                    TPM2B_ECC_POINT* l,
                    TPM2B_ECC_POINT* e,
                    UINT16* counter,
                    AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(CommitSyncShort,
                TPM_RC(const TPMI_DH_OBJECT& sign_handle,
                       const UINT32& param_size,
                       const TPM2B_ECC_POINT& p1,
                       const TPM2B_ECC_PARAMETER& y2,
                       UINT32* param_size_out,
                       TPM2B_ECC_POINT* k,
                       TPM2B_ECC_POINT* l,
                       TPM2B_ECC_POINT* e,
                       UINT16* counter,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(EC_Ephemeral,
               void(const UINT32& param_size,
                    const TPMI_ECC_CURVE& curve_id,
                    AuthorizationDelegate* authorization_delegate,
                    const EC_EphemeralResponse& callback));
  MOCK_METHOD6(EC_EphemeralSync,
               TPM_RC(const UINT32& param_size,
                      const TPMI_ECC_CURVE& curve_id,
                      UINT32* param_size_out,
                      TPM2B_ECC_POINT* q,
                      UINT16* counter,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(VerifySignature,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_DIGEST& digest,
                    const TPMT_SIGNATURE& signature,
                    AuthorizationDelegate* authorization_delegate,
                    const VerifySignatureResponse& callback));
  MOCK_METHOD6(VerifySignatureSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_DIGEST& digest,
                      const TPMT_SIGNATURE& signature,
                      TPMT_TK_VERIFIED* validation,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(Sign,
               void(const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_DIGEST& digest,
                    const TPMT_SIG_SCHEME& in_scheme,
                    const TPMT_TK_HASHCHECK& validation,
                    AuthorizationDelegate* authorization_delegate,
                    const SignResponse& callback));
  MOCK_METHOD7(SignSync,
               TPM_RC(const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_DIGEST& digest,
                      const TPMT_SIG_SCHEME& in_scheme,
                      const TPMT_TK_HASHCHECK& validation,
                      TPMT_SIGNATURE* signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(SetCommandCodeAuditStatus,
               void(const TPMI_RH_PROVISION& auth,
                    const std::string& auth_name,
                    const TPMI_ALG_HASH& audit_alg,
                    const TPML_CC& set_list,
                    const TPML_CC& clear_list,
                    AuthorizationDelegate* authorization_delegate,
                    const SetCommandCodeAuditStatusResponse& callback));
  MOCK_METHOD6(SetCommandCodeAuditStatusSync,
               TPM_RC(const TPMI_RH_PROVISION& auth,
                      const std::string& auth_name,
                      const TPMI_ALG_HASH& audit_alg,
                      const TPML_CC& set_list,
                      const TPML_CC& clear_list,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PCR_Extend,
               void(const TPMI_DH_PCR& pcr_handle,
                    const std::string& pcr_handle_name,
                    const TPML_DIGEST_VALUES& digests,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_ExtendResponse& callback));
  MOCK_METHOD4(PCR_ExtendSync,
               TPM_RC(const TPMI_DH_PCR& pcr_handle,
                      const std::string& pcr_handle_name,
                      const TPML_DIGEST_VALUES& digests,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PCR_Event,
               void(const TPMI_DH_PCR& pcr_handle,
                    const std::string& pcr_handle_name,
                    const TPM2B_EVENT& event_data,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_EventResponse& callback));
  MOCK_METHOD5(PCR_EventSync,
               TPM_RC(const TPMI_DH_PCR& pcr_handle,
                      const std::string& pcr_handle_name,
                      const TPM2B_EVENT& event_data,
                      TPML_DIGEST_VALUES* digests,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(PCR_Read,
               void(const TPML_PCR_SELECTION& pcr_selection_in,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_ReadResponse& callback));
  MOCK_METHOD5(PCR_ReadSync,
               TPM_RC(const TPML_PCR_SELECTION& pcr_selection_in,
                      UINT32* pcr_update_counter,
                      TPML_PCR_SELECTION* pcr_selection_out,
                      TPML_DIGEST* pcr_values,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PCR_Allocate,
               void(const TPMI_RH_PLATFORM& auth_handle,
                    const std::string& auth_handle_name,
                    const TPML_PCR_SELECTION& pcr_allocation,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_AllocateResponse& callback));
  MOCK_METHOD8(PCR_AllocateSync,
               TPM_RC(const TPMI_RH_PLATFORM& auth_handle,
                      const std::string& auth_handle_name,
                      const TPML_PCR_SELECTION& pcr_allocation,
                      TPMI_YES_NO* allocation_success,
                      UINT32* max_pcr,
                      UINT32* size_needed,
                      UINT32* size_available,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(PCR_SetAuthPolicy,
               void(const TPMI_RH_PLATFORM& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_DH_PCR& pcr_num,
                    const std::string& pcr_num_name,
                    const TPM2B_DIGEST& auth_policy,
                    const TPMI_ALG_HASH& policy_digest,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_SetAuthPolicyResponse& callback));
  MOCK_METHOD7(PCR_SetAuthPolicySync,
               TPM_RC(const TPMI_RH_PLATFORM& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_DH_PCR& pcr_num,
                      const std::string& pcr_num_name,
                      const TPM2B_DIGEST& auth_policy,
                      const TPMI_ALG_HASH& policy_digest,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PCR_SetAuthValue,
               void(const TPMI_DH_PCR& pcr_handle,
                    const std::string& pcr_handle_name,
                    const TPM2B_DIGEST& auth,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_SetAuthValueResponse& callback));
  MOCK_METHOD4(PCR_SetAuthValueSync,
               TPM_RC(const TPMI_DH_PCR& pcr_handle,
                      const std::string& pcr_handle_name,
                      const TPM2B_DIGEST& auth,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PCR_Reset,
               void(const TPMI_DH_PCR& pcr_handle,
                    const std::string& pcr_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PCR_ResetResponse& callback));
  MOCK_METHOD3(PCR_ResetSync,
               TPM_RC(const TPMI_DH_PCR& pcr_handle,
                      const std::string& pcr_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  // Too many args to mock, forward to *Short version.
  void PolicySigned(const TPMI_DH_OBJECT& auth_object,
                    const std::string& auth_object_name,
                    const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_NONCE& nonce_tpm,
                    const TPM2B_DIGEST& cp_hash_a,
                    const TPM2B_NONCE& policy_ref,
                    const INT32& expiration,
                    const TPMT_SIGNATURE& auth,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicySignedResponse& callback) override;
  MOCK_METHOD9(PolicySignedShort,
               void(const TPMI_DH_OBJECT& auth_object,
                    const TPMI_SH_POLICY& policy_session,
                    const TPM2B_NONCE& nonce_tpm,
                    const TPM2B_DIGEST& cp_hash_a,
                    const TPM2B_NONCE& policy_ref,
                    const INT32& expiration,
                    const TPMT_SIGNATURE& auth,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicySignedResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC PolicySignedSync(
      const TPMI_DH_OBJECT& auth_object,
      const std::string& auth_object_name,
      const TPMI_SH_POLICY& policy_session,
      const std::string& policy_session_name,
      const TPM2B_NONCE& nonce_tpm,
      const TPM2B_DIGEST& cp_hash_a,
      const TPM2B_NONCE& policy_ref,
      const INT32& expiration,
      const TPMT_SIGNATURE& auth,
      TPM2B_TIMEOUT* timeout,
      TPMT_TK_AUTH* policy_ticket,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(PolicySignedSyncShort,
                TPM_RC(const TPMI_DH_OBJECT& auth_object,
                       const TPMI_SH_POLICY& policy_session,
                       const TPM2B_NONCE& nonce_tpm,
                       const TPM2B_DIGEST& cp_hash_a,
                       const TPM2B_NONCE& policy_ref,
                       const INT32& expiration,
                       const TPMT_SIGNATURE& auth,
                       TPM2B_TIMEOUT* timeout,
                       TPMT_TK_AUTH* policy_ticket,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD10(PolicySecret,
                void(const TPMI_DH_ENTITY& auth_handle,
                     const std::string& auth_handle_name,
                     const TPMI_SH_POLICY& policy_session,
                     const std::string& policy_session_name,
                     const TPM2B_NONCE& nonce_tpm,
                     const TPM2B_DIGEST& cp_hash_a,
                     const TPM2B_NONCE& policy_ref,
                     const INT32& expiration,
                     AuthorizationDelegate* authorization_delegate,
                     const PolicySecretResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC PolicySecretSync(
      const TPMI_DH_ENTITY& auth_handle,
      const std::string& auth_handle_name,
      const TPMI_SH_POLICY& policy_session,
      const std::string& policy_session_name,
      const TPM2B_NONCE& nonce_tpm,
      const TPM2B_DIGEST& cp_hash_a,
      const TPM2B_NONCE& policy_ref,
      const INT32& expiration,
      TPM2B_TIMEOUT* timeout,
      TPMT_TK_AUTH* policy_ticket,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD9(PolicySecretSyncShort,
               TPM_RC(const TPMI_DH_ENTITY& auth_handle,
                      const TPMI_SH_POLICY& policy_session,
                      const TPM2B_NONCE& nonce_tpm,
                      const TPM2B_DIGEST& cp_hash_a,
                      const TPM2B_NONCE& policy_ref,
                      const INT32& expiration,
                      TPM2B_TIMEOUT* timeout,
                      TPMT_TK_AUTH* policy_ticket,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD9(PolicyTicket,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_TIMEOUT& timeout,
                    const TPM2B_DIGEST& cp_hash_a,
                    const TPM2B_NONCE& policy_ref,
                    const TPM2B_NAME& auth_name,
                    const TPMT_TK_AUTH& ticket,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyTicketResponse& callback));
  MOCK_METHOD8(PolicyTicketSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_TIMEOUT& timeout,
                      const TPM2B_DIGEST& cp_hash_a,
                      const TPM2B_NONCE& policy_ref,
                      const TPM2B_NAME& auth_name,
                      const TPMT_TK_AUTH& ticket,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyOR,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPML_DIGEST& p_hash_list,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyORResponse& callback));
  MOCK_METHOD4(PolicyORSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPML_DIGEST& p_hash_list,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(PolicyPCR,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_DIGEST& pcr_digest,
                    const TPML_PCR_SELECTION& pcrs,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyPCRResponse& callback));
  MOCK_METHOD5(PolicyPCRSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_DIGEST& pcr_digest,
                      const TPML_PCR_SELECTION& pcrs,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyLocality,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPMA_LOCALITY& locality,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyLocalityResponse& callback));
  MOCK_METHOD4(PolicyLocalitySync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPMA_LOCALITY& locality,
                      AuthorizationDelegate* authorization_delegate));
  // Too many args to mock, forward to *Short version.
  void PolicyNV(const TPMI_RH_NV_AUTH& auth_handle,
                const std::string& auth_handle_name,
                const TPMI_RH_NV_INDEX& nv_index,
                const std::string& nv_index_name,
                const TPMI_SH_POLICY& policy_session,
                const std::string& policy_session_name,
                const TPM2B_OPERAND& operand_b,
                const UINT16& offset,
                const TPM_EO& operation,
                AuthorizationDelegate* authorization_delegate,
                const PolicyNVResponse& callback) override;
  MOCK_METHOD8(PolicyNVShort,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const TPMI_SH_POLICY& policy_session,
                    const TPM2B_OPERAND& operand_b,
                    const UINT16& offset,
                    const TPM_EO& operation,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyNVResponse& callback));
  MOCK_METHOD10(PolicyNVSync,
                TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                       const std::string& auth_handle_name,
                       const TPMI_RH_NV_INDEX& nv_index,
                       const std::string& nv_index_name,
                       const TPMI_SH_POLICY& policy_session,
                       const std::string& policy_session_name,
                       const TPM2B_OPERAND& operand_b,
                       const UINT16& offset,
                       const TPM_EO& operation,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(PolicyCounterTimer,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_OPERAND& operand_b,
                    const UINT16& offset,
                    const TPM_EO& operation,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyCounterTimerResponse& callback));
  MOCK_METHOD6(PolicyCounterTimerSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_OPERAND& operand_b,
                      const UINT16& offset,
                      const TPM_EO& operation,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyCommandCode,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM_CC& code,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyCommandCodeResponse& callback));
  MOCK_METHOD4(PolicyCommandCodeSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM_CC& code,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PolicyPhysicalPresence,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyPhysicalPresenceResponse& callback));
  MOCK_METHOD3(PolicyPhysicalPresenceSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyCpHash,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_DIGEST& cp_hash_a,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyCpHashResponse& callback));
  MOCK_METHOD4(PolicyCpHashSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_DIGEST& cp_hash_a,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyNameHash,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_DIGEST& name_hash,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyNameHashResponse& callback));
  MOCK_METHOD4(PolicyNameHashSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_DIGEST& name_hash,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(PolicyDuplicationSelect,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_NAME& object_name,
                    const TPM2B_NAME& new_parent_name,
                    const TPMI_YES_NO& include_object,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyDuplicationSelectResponse& callback));
  MOCK_METHOD6(PolicyDuplicationSelectSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_NAME& object_name,
                      const TPM2B_NAME& new_parent_name,
                      const TPMI_YES_NO& include_object,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(PolicyAuthorize,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPM2B_DIGEST& approved_policy,
                    const TPM2B_NONCE& policy_ref,
                    const TPM2B_NAME& key_sign,
                    const TPMT_TK_VERIFIED& check_ticket,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyAuthorizeResponse& callback));
  MOCK_METHOD7(PolicyAuthorizeSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPM2B_DIGEST& approved_policy,
                      const TPM2B_NONCE& policy_ref,
                      const TPM2B_NAME& key_sign,
                      const TPMT_TK_VERIFIED& check_ticket,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PolicyAuthValue,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyAuthValueResponse& callback));
  MOCK_METHOD3(PolicyAuthValueSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PolicyPassword,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyPasswordResponse& callback));
  MOCK_METHOD3(PolicyPasswordSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(PolicyGetDigest,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyGetDigestResponse& callback));
  MOCK_METHOD4(PolicyGetDigestSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      TPM2B_DIGEST* policy_digest,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(PolicyNvWritten,
               void(const TPMI_SH_POLICY& policy_session,
                    const std::string& policy_session_name,
                    const TPMI_YES_NO& written_set,
                    AuthorizationDelegate* authorization_delegate,
                    const PolicyNvWrittenResponse& callback));
  MOCK_METHOD4(PolicyNvWrittenSync,
               TPM_RC(const TPMI_SH_POLICY& policy_session,
                      const std::string& policy_session_name,
                      const TPMI_YES_NO& written_set,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(CreatePrimary,
               void(const TPMI_RH_HIERARCHY& primary_handle,
                    const std::string& primary_handle_name,
                    const TPM2B_SENSITIVE_CREATE& in_sensitive,
                    const TPM2B_PUBLIC& in_public,
                    const TPM2B_DATA& outside_info,
                    const TPML_PCR_SELECTION& creation_pcr,
                    AuthorizationDelegate* authorization_delegate,
                    const CreatePrimaryResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC CreatePrimarySync(
      const TPMI_RH_HIERARCHY& primary_handle,
      const std::string& primary_handle_name,
      const TPM2B_SENSITIVE_CREATE& in_sensitive,
      const TPM2B_PUBLIC& in_public,
      const TPM2B_DATA& outside_info,
      const TPML_PCR_SELECTION& creation_pcr,
      TPM_HANDLE* object_handle,
      TPM2B_PUBLIC* out_public,
      TPM2B_CREATION_DATA* creation_data,
      TPM2B_DIGEST* creation_hash,
      TPMT_TK_CREATION* creation_ticket,
      TPM2B_NAME* name,
      AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(CreatePrimarySyncShort,
                TPM_RC(const TPMI_RH_HIERARCHY& primary_handle,
                       const TPM2B_PUBLIC& in_public,
                       const TPML_PCR_SELECTION& creation_pcr,
                       TPM_HANDLE* object_handle,
                       TPM2B_PUBLIC* out_public,
                       TPM2B_CREATION_DATA* creation_data,
                       TPM2B_DIGEST* creation_hash,
                       TPMT_TK_CREATION* creation_ticket,
                       TPM2B_NAME* name,
                       AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(HierarchyControl,
               void(const TPMI_RH_HIERARCHY& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_ENABLES& enable,
                    const TPMI_YES_NO& state,
                    AuthorizationDelegate* authorization_delegate,
                    const HierarchyControlResponse& callback));
  MOCK_METHOD5(HierarchyControlSync,
               TPM_RC(const TPMI_RH_HIERARCHY& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_ENABLES& enable,
                      const TPMI_YES_NO& state,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(SetPrimaryPolicy,
               void(const TPMI_RH_HIERARCHY& auth_handle,
                    const std::string& auth_handle_name,
                    const TPM2B_DIGEST& auth_policy,
                    const TPMI_ALG_HASH& hash_alg,
                    AuthorizationDelegate* authorization_delegate,
                    const SetPrimaryPolicyResponse& callback));
  MOCK_METHOD5(SetPrimaryPolicySync,
               TPM_RC(const TPMI_RH_HIERARCHY& auth_handle,
                      const std::string& auth_handle_name,
                      const TPM2B_DIGEST& auth_policy,
                      const TPMI_ALG_HASH& hash_alg,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(ChangePPS,
               void(const TPMI_RH_PLATFORM& auth_handle,
                    const std::string& auth_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ChangePPSResponse& callback));
  MOCK_METHOD3(ChangePPSSync,
               TPM_RC(const TPMI_RH_PLATFORM& auth_handle,
                      const std::string& auth_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(ChangeEPS,
               void(const TPMI_RH_PLATFORM& auth_handle,
                    const std::string& auth_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ChangeEPSResponse& callback));
  MOCK_METHOD3(ChangeEPSSync,
               TPM_RC(const TPMI_RH_PLATFORM& auth_handle,
                      const std::string& auth_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(Clear,
               void(const TPMI_RH_CLEAR& auth_handle,
                    const std::string& auth_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ClearResponse& callback));
  MOCK_METHOD3(ClearSync,
               TPM_RC(const TPMI_RH_CLEAR& auth_handle,
                      const std::string& auth_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(ClearControl,
               void(const TPMI_RH_CLEAR& auth,
                    const std::string& auth_name,
                    const TPMI_YES_NO& disable,
                    AuthorizationDelegate* authorization_delegate,
                    const ClearControlResponse& callback));
  MOCK_METHOD4(ClearControlSync,
               TPM_RC(const TPMI_RH_CLEAR& auth,
                      const std::string& auth_name,
                      const TPMI_YES_NO& disable,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(HierarchyChangeAuth,
               void(const TPMI_RH_HIERARCHY_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPM2B_AUTH& new_auth,
                    AuthorizationDelegate* authorization_delegate,
                    const HierarchyChangeAuthResponse& callback));
  MOCK_METHOD4(HierarchyChangeAuthSync,
               TPM_RC(const TPMI_RH_HIERARCHY_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPM2B_AUTH& new_auth,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(DictionaryAttackLockReset,
               void(const TPMI_RH_LOCKOUT& lock_handle,
                    const std::string& lock_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const DictionaryAttackLockResetResponse& callback));
  MOCK_METHOD3(DictionaryAttackLockResetSync,
               TPM_RC(const TPMI_RH_LOCKOUT& lock_handle,
                      const std::string& lock_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(DictionaryAttackParameters,
               void(const TPMI_RH_LOCKOUT& lock_handle,
                    const std::string& lock_handle_name,
                    const UINT32& new_max_tries,
                    const UINT32& new_recovery_time,
                    const UINT32& lockout_recovery,
                    AuthorizationDelegate* authorization_delegate,
                    const DictionaryAttackParametersResponse& callback));
  MOCK_METHOD6(DictionaryAttackParametersSync,
               TPM_RC(const TPMI_RH_LOCKOUT& lock_handle,
                      const std::string& lock_handle_name,
                      const UINT32& new_max_tries,
                      const UINT32& new_recovery_time,
                      const UINT32& lockout_recovery,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(PP_Commands,
               void(const TPMI_RH_PLATFORM& auth,
                    const std::string& auth_name,
                    const TPML_CC& set_list,
                    const TPML_CC& clear_list,
                    AuthorizationDelegate* authorization_delegate,
                    const PP_CommandsResponse& callback));
  MOCK_METHOD5(PP_CommandsSync,
               TPM_RC(const TPMI_RH_PLATFORM& auth,
                      const std::string& auth_name,
                      const TPML_CC& set_list,
                      const TPML_CC& clear_list,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(SetAlgorithmSet,
               void(const TPMI_RH_PLATFORM& auth_handle,
                    const std::string& auth_handle_name,
                    const UINT32& algorithm_set,
                    AuthorizationDelegate* authorization_delegate,
                    const SetAlgorithmSetResponse& callback));
  MOCK_METHOD4(SetAlgorithmSetSync,
               TPM_RC(const TPMI_RH_PLATFORM& auth_handle,
                      const std::string& auth_handle_name,
                      const UINT32& algorithm_set,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(FieldUpgradeStart,
               void(const TPMI_RH_PLATFORM& authorization,
                    const std::string& authorization_name,
                    const TPMI_DH_OBJECT& key_handle,
                    const std::string& key_handle_name,
                    const TPM2B_DIGEST& fu_digest,
                    const TPMT_SIGNATURE& manifest_signature,
                    AuthorizationDelegate* authorization_delegate,
                    const FieldUpgradeStartResponse& callback));
  MOCK_METHOD7(FieldUpgradeStartSync,
               TPM_RC(const TPMI_RH_PLATFORM& authorization,
                      const std::string& authorization_name,
                      const TPMI_DH_OBJECT& key_handle,
                      const std::string& key_handle_name,
                      const TPM2B_DIGEST& fu_digest,
                      const TPMT_SIGNATURE& manifest_signature,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(FieldUpgradeData,
               void(const TPM2B_MAX_BUFFER& fu_data,
                    AuthorizationDelegate* authorization_delegate,
                    const FieldUpgradeDataResponse& callback));
  MOCK_METHOD4(FieldUpgradeDataSync,
               TPM_RC(const TPM2B_MAX_BUFFER& fu_data,
                      TPMT_HA* next_digest,
                      TPMT_HA* first_digest,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(FirmwareRead,
               void(const UINT32& sequence_number,
                    AuthorizationDelegate* authorization_delegate,
                    const FirmwareReadResponse& callback));
  MOCK_METHOD3(FirmwareReadSync,
               TPM_RC(const UINT32& sequence_number,
                      TPM2B_MAX_BUFFER* fu_data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(ContextSave,
               void(const TPMI_DH_CONTEXT& save_handle,
                    const std::string& save_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const ContextSaveResponse& callback));
  MOCK_METHOD4(ContextSaveSync,
               TPM_RC(const TPMI_DH_CONTEXT& save_handle,
                      const std::string& save_handle_name,
                      TPMS_CONTEXT* context,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(ContextLoad,
               void(const TPMS_CONTEXT& context,
                    AuthorizationDelegate* authorization_delegate,
                    const ContextLoadResponse& callback));
  MOCK_METHOD3(ContextLoadSync,
               TPM_RC(const TPMS_CONTEXT& context,
                      TPMI_DH_CONTEXT* loaded_handle,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(FlushContext,
               void(const TPMI_DH_CONTEXT& flush_handle,
                    AuthorizationDelegate* authorization_delegate,
                    const FlushContextResponse& callback));
  MOCK_METHOD2(FlushContextSync,
               TPM_RC(const TPMI_DH_CONTEXT& flush_handle,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(EvictControl,
               void(const TPMI_RH_PROVISION& auth,
                    const std::string& auth_name,
                    const TPMI_DH_OBJECT& object_handle,
                    const std::string& object_handle_name,
                    const TPMI_DH_PERSISTENT& persistent_handle,
                    AuthorizationDelegate* authorization_delegate,
                    const EvictControlResponse& callback));
  MOCK_METHOD6(EvictControlSync,
               TPM_RC(const TPMI_RH_PROVISION& auth,
                      const std::string& auth_name,
                      const TPMI_DH_OBJECT& object_handle,
                      const std::string& object_handle_name,
                      const TPMI_DH_PERSISTENT& persistent_handle,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD2(ReadClock,
               void(AuthorizationDelegate* authorization_delegate,
                    const ReadClockResponse& callback));
  MOCK_METHOD2(ReadClockSync,
               TPM_RC(TPMS_TIME_INFO* current_time,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(ClockSet,
               void(const TPMI_RH_PROVISION& auth,
                    const std::string& auth_name,
                    const UINT64& new_time,
                    AuthorizationDelegate* authorization_delegate,
                    const ClockSetResponse& callback));
  MOCK_METHOD4(ClockSetSync,
               TPM_RC(const TPMI_RH_PROVISION& auth,
                      const std::string& auth_name,
                      const UINT64& new_time,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(ClockRateAdjust,
               void(const TPMI_RH_PROVISION& auth,
                    const std::string& auth_name,
                    const TPM_CLOCK_ADJUST& rate_adjust,
                    AuthorizationDelegate* authorization_delegate,
                    const ClockRateAdjustResponse& callback));
  MOCK_METHOD4(ClockRateAdjustSync,
               TPM_RC(const TPMI_RH_PROVISION& auth,
                      const std::string& auth_name,
                      const TPM_CLOCK_ADJUST& rate_adjust,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(GetCapability,
               void(const TPM_CAP& capability,
                    const UINT32& property,
                    const UINT32& property_count,
                    AuthorizationDelegate* authorization_delegate,
                    const GetCapabilityResponse& callback));
  MOCK_METHOD6(GetCapabilitySync,
               TPM_RC(const TPM_CAP& capability,
                      const UINT32& property,
                      const UINT32& property_count,
                      TPMI_YES_NO* more_data,
                      TPMS_CAPABILITY_DATA* capability_data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD3(TestParms,
               void(const TPMT_PUBLIC_PARMS& parameters,
                    AuthorizationDelegate* authorization_delegate,
                    const TestParmsResponse& callback));
  MOCK_METHOD2(TestParmsSync,
               TPM_RC(const TPMT_PUBLIC_PARMS& parameters,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_DefineSpace,
               void(const TPMI_RH_PROVISION& auth_handle,
                    const std::string& auth_handle_name,
                    const TPM2B_AUTH& auth,
                    const TPM2B_NV_PUBLIC& public_info,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_DefineSpaceResponse& callback));
  MOCK_METHOD5(NV_DefineSpaceSync,
               TPM_RC(const TPMI_RH_PROVISION& auth_handle,
                      const std::string& auth_handle_name,
                      const TPM2B_AUTH& auth,
                      const TPM2B_NV_PUBLIC& public_info,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_UndefineSpace,
               void(const TPMI_RH_PROVISION& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_UndefineSpaceResponse& callback));
  MOCK_METHOD5(NV_UndefineSpaceSync,
               TPM_RC(const TPMI_RH_PROVISION& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_UndefineSpaceSpecial,
               void(const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const TPMI_RH_PLATFORM& platform,
                    const std::string& platform_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_UndefineSpaceSpecialResponse& callback));
  MOCK_METHOD5(NV_UndefineSpaceSpecialSync,
               TPM_RC(const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const TPMI_RH_PLATFORM& platform,
                      const std::string& platform_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(NV_ReadPublic,
               void(const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_ReadPublicResponse& callback));
  MOCK_METHOD5(NV_ReadPublicSync,
               TPM_RC(const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      TPM2B_NV_PUBLIC* nv_public,
                      TPM2B_NAME* nv_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(NV_Write,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const TPM2B_MAX_NV_BUFFER& data,
                    const UINT16& offset,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_WriteResponse& callback));
  MOCK_METHOD7(NV_WriteSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const TPM2B_MAX_NV_BUFFER& data,
                      const UINT16& offset,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_Increment,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_IncrementResponse& callback));
  MOCK_METHOD5(NV_IncrementSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(NV_Extend,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const TPM2B_MAX_NV_BUFFER& data,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_ExtendResponse& callback));
  MOCK_METHOD6(NV_ExtendSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const TPM2B_MAX_NV_BUFFER& data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD7(NV_SetBits,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const UINT64& bits,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_SetBitsResponse& callback));
  MOCK_METHOD6(NV_SetBitsSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const UINT64& bits,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_WriteLock,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_WriteLockResponse& callback));
  MOCK_METHOD5(NV_WriteLockSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD4(NV_GlobalWriteLock,
               void(const TPMI_RH_PROVISION& auth_handle,
                    const std::string& auth_handle_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_GlobalWriteLockResponse& callback));
  MOCK_METHOD3(NV_GlobalWriteLockSync,
               TPM_RC(const TPMI_RH_PROVISION& auth_handle,
                      const std::string& auth_handle_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD8(NV_Read,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const UINT16& size,
                    const UINT16& offset,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_ReadResponse& callback));
  MOCK_METHOD8(NV_ReadSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const UINT16& size,
                      const UINT16& offset,
                      TPM2B_MAX_NV_BUFFER* data,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD6(NV_ReadLock,
               void(const TPMI_RH_NV_AUTH& auth_handle,
                    const std::string& auth_handle_name,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_ReadLockResponse& callback));
  MOCK_METHOD5(NV_ReadLockSync,
               TPM_RC(const TPMI_RH_NV_AUTH& auth_handle,
                      const std::string& auth_handle_name,
                      const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      AuthorizationDelegate* authorization_delegate));
  MOCK_METHOD5(NV_ChangeAuth,
               void(const TPMI_RH_NV_INDEX& nv_index,
                    const std::string& nv_index_name,
                    const TPM2B_AUTH& new_auth,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_ChangeAuthResponse& callback));
  MOCK_METHOD4(NV_ChangeAuthSync,
               TPM_RC(const TPMI_RH_NV_INDEX& nv_index,
                      const std::string& nv_index_name,
                      const TPM2B_AUTH& new_auth,
                      AuthorizationDelegate* authorization_delegate));
  // Too many args to mock, forward to *Short version.
  void NV_Certify(const TPMI_DH_OBJECT& sign_handle,
                  const std::string& sign_handle_name,
                  const TPMI_RH_NV_AUTH& auth_handle,
                  const std::string& auth_handle_name,
                  const TPMI_RH_NV_INDEX& nv_index,
                  const std::string& nv_index_name,
                  const TPM2B_DATA& qualifying_data,
                  const TPMT_SIG_SCHEME& in_scheme,
                  const UINT16& size,
                  const UINT16& offset,
                  AuthorizationDelegate* authorization_delegate,
                  const NV_CertifyResponse& callback) override;
  MOCK_METHOD9(NV_CertifyShort,
               void(const TPMI_DH_OBJECT& sign_handle,
                    const TPMI_RH_NV_AUTH& auth_handle,
                    const TPMI_RH_NV_INDEX& nv_index,
                    const TPM2B_DATA& qualifying_data,
                    const TPMT_SIG_SCHEME& in_scheme,
                    const UINT16& size,
                    const UINT16& offset,
                    AuthorizationDelegate* authorization_delegate,
                    const NV_CertifyResponse& callback));
  // Too many args to mock, forward to *Short version.
  TPM_RC NV_CertifySync(const TPMI_DH_OBJECT& sign_handle,
                        const std::string& sign_handle_name,
                        const TPMI_RH_NV_AUTH& auth_handle,
                        const std::string& auth_handle_name,
                        const TPMI_RH_NV_INDEX& nv_index,
                        const std::string& nv_index_name,
                        const TPM2B_DATA& qualifying_data,
                        const TPMT_SIG_SCHEME& in_scheme,
                        const UINT16& size,
                        const UINT16& offset,
                        TPM2B_ATTEST* certify_info,
                        TPMT_SIGNATURE* signature,
                        AuthorizationDelegate* authorization_delegate) override;
  MOCK_METHOD10(NV_CertifySyncShort,
                TPM_RC(const TPMI_DH_OBJECT& sign_handle,
                       const TPMI_RH_NV_AUTH& auth_handle,
                       const TPMI_RH_NV_INDEX& nv_index,
                       const TPM2B_DATA& qualifying_data,
                       const TPMT_SIG_SCHEME& in_scheme,
                       const UINT16& size,
                       const UINT16& offset,
                       TPM2B_ATTEST* certify_info,
                       TPMT_SIGNATURE* signature,
                       AuthorizationDelegate* authorization_delegate));
};

}  // namespace trunks

#endif  // TRUNKS_MOCK_TPM_H_
