// // 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. // #include "trunks/mock_tpm.h" #include "trunks/tpm_utility.h" using testing::_; using testing::DoAll; using testing::Return; using testing::SetArgPointee; namespace trunks { MockTpm::MockTpm() : Tpm(nullptr) { ON_CALL(*this, PCR_AllocateSync(_, _, _, _, _, _, _, _)) .WillByDefault(DoAll(SetArgPointee<3>(YES), Return(TPM_RC_SUCCESS))); } MockTpm::~MockTpm() {} void MockTpm::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) { StartAuthSessionShort(tpm_key, bind, nonce_caller, encrypted_salt, session_type, symmetric, auth_hash, authorization_delegate, callback); } TPM_RC MockTpm::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) { return StartAuthSessionSyncShort( tpm_key, bind, nonce_caller, encrypted_salt, session_type, symmetric, auth_hash, session_handle, nonce_tpm, authorization_delegate); } TPM_RC MockTpm::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) { return CreateSyncShort(parent_handle, in_sensitive, in_public, creation_pcr, out_private, out_public, creation_data, creation_hash, creation_ticket, authorization_delegate); } TPM_RC MockTpm::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) { return CertifyCreationSyncShort( sign_handle, object_handle, qualifying_data, creation_hash, in_scheme, creation_ticket, certify_info, signature, authorization_delegate); } TPM_RC MockTpm::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) { return GetSessionAuditDigestSyncShort( privacy_admin_handle, sign_handle, session_handle, qualifying_data, in_scheme, audit_info, signature, authorization_delegate); } TPM_RC MockTpm::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) { return CommitSyncShort(sign_handle, param_size, p1, y2, param_size_out, k, l, e, counter, authorization_delegate); } void MockTpm::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) { PolicySignedShort(auth_object, policy_session, nonce_tpm, cp_hash_a, policy_ref, expiration, auth, authorization_delegate, callback); } TPM_RC MockTpm::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) { return PolicySignedSyncShort(auth_object, policy_session, nonce_tpm, cp_hash_a, policy_ref, expiration, auth, timeout, policy_ticket, authorization_delegate); } TPM_RC MockTpm::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) { return PolicySecretSyncShort(auth_handle, policy_session, nonce_tpm, cp_hash_a, policy_ref, expiration, timeout, policy_ticket, authorization_delegate); } void MockTpm::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) { PolicyNVShort(auth_handle, nv_index, policy_session, operand_b, offset, operation, authorization_delegate, callback); } TPM_RC MockTpm::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) { return CreatePrimarySyncShort(primary_handle, in_public, creation_pcr, object_handle, out_public, creation_data, creation_hash, creation_ticket, name, authorization_delegate); } void MockTpm::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) { NV_CertifyShort(sign_handle, auth_handle, nv_index, qualifying_data, in_scheme, size, offset, authorization_delegate, callback); } TPM_RC MockTpm::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) { return NV_CertifySyncShort(sign_handle, auth_handle, nv_index, qualifying_data, in_scheme, size, offset, certify_info, signature, authorization_delegate); } } // namespace trunks