// 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_TPM2_IMPL_H_
#define LIBTPMCRYPTO_TPM2_IMPL_H_

#include <limits>
#include <map>
#include <memory>
#include <string>
#include <utility>

#include <base/threading/platform_thread.h>
#include <trunks/trunks_factory.h>
#include <trunks/trunks_factory_impl.h>

#include "libtpmcrypto/tpm.h"

namespace brillo {
class SecureBlob;
}  // namespace brillo

namespace tpmcrypto {

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

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

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

 private:
  // If already initialized this returns true, otherwise attempts to
  // initialize and returns whether initialization was successful.
  bool EnsureInitialized() WARN_UNUSED_RESULT;
  bool CreatePcr0PolicyDigest(std::string* policy_digest);
  bool CreateHmacSession(std::unique_ptr<trunks::HmacSession>* hmac_session);
  bool CreatePolicySessionForPCR0(
      std::unique_ptr<trunks::PolicySession>* policy_session);
  bool SealData(trunks::AuthorizationDelegate* session_delegate,
                const std::string& policy_digest,
                const brillo::SecureBlob& value,
                brillo::Blob* sealed_value);
  bool UnsealData(trunks::AuthorizationDelegate* policy_delegate,
                  const brillo::Blob& sealed_value,
                  brillo::SecureBlob* value);

  bool is_initialized_ = false;
  std::unique_ptr<trunks::TrunksFactoryImpl> factory_impl_;
  std::unique_ptr<trunks::TpmUtility> tpm_utility_;

  DISALLOW_COPY_AND_ASSIGN(Tpm2Impl);
};

}  // namespace tpmcrypto

#endif  // LIBTPMCRYPTO_TPM2_IMPL_H_
