// Copyright 2021 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 CRYPTOHOME_CRYPTOHOME_KEY_LOADER_H_
#define CRYPTOHOME_CRYPTOHOME_KEY_LOADER_H_

#include <memory>

#include <base/files/file_path.h>
#include <brillo/secure_blob.h>
#include <libhwsec/status.h>

#include "cryptohome/platform.h"
#include "cryptohome/tpm.h"

namespace cryptohome {

class CryptohomeKeyLoader {
 public:
  CryptohomeKeyLoader(Tpm* tpm, Platform* platform, const base::FilePath& path);
  CryptohomeKeyLoader(const CryptohomeKeyLoader&) = delete;
  CryptohomeKeyLoader& operator=(const CryptohomeKeyLoader&) = delete;

  virtual ~CryptohomeKeyLoader() = default;

  virtual bool HasCryptohomeKey();

  virtual TpmKeyHandle GetCryptohomeKey();

  virtual bool ReloadCryptohomeKey();

  virtual void Init();

 protected:
  Tpm* GetTpm() { return tpm_; }

 private:
  virtual bool CreateCryptohomeKey(brillo::SecureBlob* wrapped_key) = 0;
  bool SaveCryptohomeKey(const brillo::SecureBlob& wrapped_key);

  hwsec::Status LoadCryptohomeKey(ScopedKeyHandle* key_handle);

  bool LoadOrCreateCryptohomeKey(ScopedKeyHandle* key_handle);

  Tpm* tpm_ = nullptr;
  Platform* platform_ = nullptr;
  const base::FilePath cryptohome_key_path_;
  ScopedKeyHandle cryptohome_key_;
};

}  // namespace cryptohome

#endif  // CRYPTOHOME_CRYPTOHOME_KEY_LOADER_H_
