// 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 <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::Blob* sealed_value) override;

  bool Unseal(const brillo::Blob& sealed_value,
              brillo::SecureBlob* value) 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_
