// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cryptohome/mock_tpm.h"

#include <string>

#include <libhwsec-foundation/error/testing_helper.h>

using hwsec::TPMErrorBase;
using hwsec_foundation::error::testing::ReturnError;
using testing::_;
using testing::DoAll;
using testing::Invoke;
using testing::Return;
using testing::SetArgPointee;

namespace cryptohome {

MockTpm::MockTpm() {
  ON_CALL(*this, GetVersion()).WillByDefault(Return(TpmVersion::TPM_UNKNOWN));
  ON_CALL(*this, EncryptBlob(_, _, _, _))
      .WillByDefault(Invoke(this, &MockTpm::Xor));
  ON_CALL(*this, DecryptBlob(_, _, _, _, _))
      .WillByDefault(Invoke(this, &MockTpm::XorDecrypt));
  ON_CALL(*this, GetPublicKeyHash(_, _))
      .WillByDefault(ReturnError<TPMErrorBase>());
  ON_CALL(*this, GetRandomDataBlob(_, _))
      .WillByDefault(Invoke(this, &MockTpm::FakeGetRandomDataBlob));
  ON_CALL(*this, GetRandomDataSecureBlob(_, _))
      .WillByDefault(Invoke(this, &MockTpm::FakeGetRandomDataSecureBlob));
  ON_CALL(*this, GetAlertsData(_)).WillByDefault(ReturnError<TPMErrorBase>());
  ON_CALL(*this, CreateDelegate(_, _, _, _, _)).WillByDefault(Return(true));
  ON_CALL(*this, Sign(_, _, _, _)).WillByDefault(Return(true));
  ON_CALL(*this, CreatePCRBoundKey(_, _, _, _, _)).WillByDefault(Return(true));
  ON_CALL(*this, VerifyPCRBoundKey(_, _, _)).WillByDefault(Return(true));
  ON_CALL(*this, ExtendPCR(_, _))
      .WillByDefault(Invoke(this, &MockTpm::FakeExtendPCR));
  ON_CALL(*this, ReadPCR(_, _))
      .WillByDefault(Invoke(this, &MockTpm::FakeReadPCR));
  ON_CALL(*this, GetRsuDeviceId(_)).WillByDefault(Return(true));
  ON_CALL(*this, GetLECredentialBackend()).WillByDefault(Return(nullptr));
  ON_CALL(*this, GetDelegate(_, _, _)).WillByDefault(Return(true));
  ON_CALL(*this, PreloadSealedData(_, _))
      .WillByDefault(ReturnError<TPMErrorBase>());
  ON_CALL(*this, UnsealWithAuthorization(_, _, _, _, _))
      .WillByDefault(ReturnError<TPMErrorBase>());
  ON_CALL(*this, GetAuthValue(_, _, _))
      .WillByDefault(ReturnError<TPMErrorBase>());
  ON_CALL(*this, GetEccAuthValue(_, _, _))
      .WillByDefault(ReturnError<TPMErrorBase>());
}

MockTpm::~MockTpm() {}

}  // namespace cryptohome
