// Copyright 2018 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 LIBTPMCRYPTO_TPM1_IMPL_H_
#define LIBTPMCRYPTO_TPM1_IMPL_H_

#include "libtpmcrypto/tpm.h"

#include <string>

#include <trousers/tss.h>

namespace brillo {
class SecureBlob;
}  // namespace brillo

namespace tpmcrypto {

class Tpm1Impl : public Tpm {
 public:
  Tpm1Impl();
  ~Tpm1Impl() override;

  bool SealToPCR0(const brillo::SecureBlob& value,
                  brillo::SecureBlob* sealed_value) override;

  bool Unseal(const brillo::SecureBlob& sealed_value,
              brillo::SecureBlob* value) override;

  bool GetNVAttributes(uint32_t index, uint32_t* attributes) override;
  bool NVReadNoAuth(uint32_t index,
                    uint32_t offset,
                    size_t size,
                    std::string* data) override;

 private:
  // Tries to connect to the TPM
  TSS_HCONTEXT ConnectContext();

  // Connects to the TPM and return its context at |context_handle|.
  bool OpenAndConnectTpm(TSS_HCONTEXT* context_handle, TSS_RESULT* result);

  // Gets a handle to the TPM from the specified context
  //
  // Parameters
  //   context_handle - The context handle for the TPM session
  //   tpm_handle (OUT) - The handle for the TPM on success
  bool GetTpm(TSS_HCONTEXT context_handle, TSS_HTPM* tpm_handle);

  // Populates |context_handle| with a valid TSS_HCONTEXT and |tpm_handle| with
  // its matching TPM object iff the context can be created and a TPM object
  // exists in the TSS.
  bool ConnectContextAsUser(TSS_HCONTEXT* context_handle, TSS_HTPM* tpm_handle);

  // Gets a handle to the SRK.
  bool LoadSrk(TSS_HCONTEXT context_handle,
               TSS_HKEY* srk_handle,
               TSS_RESULT* result) const;

  DISALLOW_COPY_AND_ASSIGN(Tpm1Impl);
};

}  // namespace tpmcrypto

#endif  // LIBTPMCRYPTO_TPM1_IMPL_H_
