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