| // |
| // 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 |