// Copyright 2014 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 TRUNKS_TPM_STATE_H_
#define TRUNKS_TPM_STATE_H_

#include <string>

#include <base/macros.h>

#include "trunks/tpm_generated.h"
#include "trunks/trunks_export.h"

namespace trunks {

// TpmState is an interface which provides access to TPM state information.
class TRUNKS_EXPORT TpmState {
 public:
  TpmState() {}
  TpmState(const TpmState&) = delete;
  TpmState& operator=(const TpmState&) = delete;

  virtual ~TpmState() {}

  // Initializes based on the current TPM state. This method must be called once
  // before any other method. It may be called multiple times to refresh the
  // state information.
  virtual TPM_RC Initialize() = 0;

  // Returns true iff TPMA_PERMANENT:ownerAuthSet is set.
  virtual bool IsOwnerPasswordSet() = 0;

  // Returns true iff TPMA_PERMANENT:endorsementAuthSet is set.
  virtual bool IsEndorsementPasswordSet() = 0;

  // Returns true iff TPMA_PERMANENT:lockoutAuthSet is set.
  virtual bool IsLockoutPasswordSet() = 0;

  // Returns true iff owner, endorsement and lockout passwords are set.
  virtual bool IsOwned() = 0;

  // Returns true iff TPMA_PERMANENT:inLockout is set.
  virtual bool IsInLockout() = 0;

  // Returns true iff TPMA_STARTUP_CLEAR:phEnable is set.
  virtual bool IsPlatformHierarchyEnabled() = 0;

  // Returns true iff TPMA_STARTUP_CLEAR:shEnable is set.
  virtual bool IsStorageHierarchyEnabled() = 0;

  // Returns true iff TPMA_STARTUP_CLEAR:ehEnable is set.
  virtual bool IsEndorsementHierarchyEnabled() = 0;

  // Returns true iff shEnable and ehEnable are set and phEnable is clear.
  virtual bool IsEnabled() = 0;

  // Returns true iff TPMA_STARTUP_CLEAR:orderly is set.
  virtual bool WasShutdownOrderly() = 0;

  // Returns true iff the TPM supports RSA-2048 keys.
  virtual bool IsRSASupported() = 0;

  // Returns true iff the TPM supports the ECC NIST P-256 curve.
  virtual bool IsECCSupported() = 0;

  // Returns the current value of the Lockout counter.
  virtual uint32_t GetLockoutCounter() = 0;

  // Returns the maximum lockout failures allowed before the TPM goes into
  // lockout.
  virtual uint32_t GetLockoutThreshold() = 0;

  // Returns the number of seconds before the lockout counter will decrement.
  virtual uint32_t GetLockoutInterval() = 0;

  // Returns the number of seconds after a LockoutAuth failure before
  // LockoutAuth can be used again.
  virtual uint32_t GetLockoutRecovery() = 0;

  // Returns the maximum size, in bytes, of an NV index data area.
  virtual uint32_t GetMaxNVSize() = 0;

  // Returns the TPM family value. This is a 4-character string encoded in an
  // uint32_t, e.g. 0x322E3000 for "2.0".
  virtual uint32_t GetTpmFamily() = 0;

  // Returns the specification level implemented by the TPM.
  virtual uint32_t GetSpecificationLevel() = 0;

  // Returns the specification revision implemented by the TPM.
  virtual uint32_t GetSpecificationRevision() = 0;

  // Returns the manufacturer vendor ID for the TPM.
  virtual uint32_t GetManufacturer() = 0;

  // Returns the manufacturer-determined TPM model number.
  virtual uint32_t GetTpmModel() = 0;

  // Returns the version number of the firmware running on the TPM.
  virtual uint64_t GetFirmwareVersion() = 0;

  // Returns the vendor ID string.
  virtual std::string GetVendorIDString() = 0;

  // Gets the |value| of any |property|. |value| may be NULL. Returns false if
  // a value is not available for the property.
  virtual bool GetTpmProperty(TPM_PT property, uint32_t* value) = 0;

  // Gets |algorithm| |properties|. |properties| may be NULL. Returns false if
  // properties are not available for the algorithm.
  virtual bool GetAlgorithmProperties(TPM_ALG_ID algorithm,
                                      TPMA_ALGORITHM* properties) = 0;
};

}  // namespace trunks

#endif  // TRUNKS_TPM_STATE_H_
