// 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_TPM_CRYPTO_IMPL_H_
#define LIBTPMCRYPTO_TPM_CRYPTO_IMPL_H_

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

#include "libtpmcrypto/tpm.h"
#include "libtpmcrypto/tpm_crypto.h"

namespace tpmcrypto {

class TpmCryptoImpl : public TpmCrypto {
 public:
  using RandBytesFn = std::function<int(uint8_t*, int)>;

  TpmCryptoImpl();
  explicit TpmCryptoImpl(std::unique_ptr<Tpm> tpm);
  TpmCryptoImpl(std::unique_ptr<Tpm> tpm, RandBytesFn rand_bytes_fn);
  ~TpmCryptoImpl() override;

  bool Encrypt(const brillo::SecureBlob& data,
               std::string* encrypted_data) override WARN_UNUSED_RESULT;

  bool Decrypt(const std::string& encrypted_data,
               brillo::SecureBlob* data) override WARN_UNUSED_RESULT;

 private:
  // Creates a randomly generated aes key and seals it to the TPM's PCR0.
  bool CreateSealedKey(brillo::SecureBlob* aes_key,
                       brillo::SecureBlob* sealed_key)
      const WARN_UNUSED_RESULT;

  // Encrypts the given data using the aes_key. Sealed key is necessary to
  // wrap into the returned data to allow for decryption.
  bool EncryptData(const brillo::SecureBlob& data,
                   const brillo::SecureBlob& aes_key,
                   const brillo::SecureBlob& sealed_key,
                   std::string* encrypted_data)
      const WARN_UNUSED_RESULT;

  // Gets random bytes and returns them in a SecureBlob.
  bool GetRandomDataSecureBlob(size_t length, brillo::SecureBlob* data)
      const WARN_UNUSED_RESULT;

  // The TPM implementation
  std::unique_ptr<Tpm> tpm_;
  RandBytesFn rand_bytes_fn_;

  DISALLOW_COPY_AND_ASSIGN(TpmCryptoImpl);
};

}  // namespace tpmcrypto

#endif  // LIBTPMCRYPTO_TPM_CRYPTO_IMPL_H_
