// 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::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:
  // 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::SecureBlob* sealed_value);
  bool UnsealData(trunks::AuthorizationDelegate* policy_delegate,
                  const brillo::SecureBlob& 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_
