// Copyright 2019 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.

#ifndef TPM_SOFTCLEAR_UTILS_TPM_IMPL_H_
#define TPM_SOFTCLEAR_UTILS_TPM_IMPL_H_

#include "tpm_softclear_utils/tpm.h"

#include <optional>
#include <string>

namespace tpm_softclear_utils {

// Utility class for soft-clearing TPM 1.2.
class TpmImpl : public Tpm {
 public:
  TpmImpl() = default;
  TpmImpl(const TpmImpl&) = delete;
  TpmImpl& operator=(const TpmImpl&) = delete;

  ~TpmImpl() override = default;

  // Not used by TPM 1.2.
  bool Initialize() override { return true; }

  // Gets the owner password from an on-disk file and returns it. In case of an
  // error, returns an empty Optional object.
  std::optional<std::string> GetAuthForOwnerReset() override;

  // This function does a bunch of things:
  //   1. changing the owner password from |auth_for_owner_reset| to the default
  //      well-known value,
  //   2. removing all owner-defined NV space, except for those write-locked,
  //   3. unloading all keys, and
  //   4. resetting the dictionary attack counter.
  //
  // Returns if the TPM is soft-cleared successfully.
  //
  // Note that this function neither fully clears the owner hierarchy nor
  // brings the TPM back to the unowned state. It just resets as much as it can
  // in the owner hierarchy.
  bool SoftClearOwner(const std::string& auth_for_owner_reset) override;

 private:
  // Changes TPM's owner password from |owner_auth| to the default one. Returns
  // if the operation succeeds.
  bool ResetOwnerPassword(const std::string& owner_auth);

  // Removes all owner-defined NV spaces, except for those write-locked. This
  // function uses the default owner password for authentication and should only
  // be called after ResetOwnerPassword().
  //
  // Note: this function doesn't rollback changes it already made if it failed
  // to remove some NV space.
  //
  // Returns if all removable spaces are removed.
  bool RemoveNvSpace();

  // Lists all loaded keys in the owner hierarchy and unloads them. This
  // function uses the default owner password for authentication and should only
  // be called after ResetOwnerPassword().
  //
  // Note: this function doesn't rollback changes it already made if it failed
  // to unload some key.
  //
  // Returns if all keys are unloaded.
  bool UnloadKeys();

  // Resets the DA counter. This function uses the default owner password for
  // authentication and should only be called after ResetOwnerPassword().
  //
  // Returns if the DA counter is reset successfully.
  bool ResetDictionaryAttackCounter();
};

}  // namespace tpm_softclear_utils

#endif  // TPM_SOFTCLEAR_UTILS_TPM_IMPL_H_
