blob: da5532b67e8b44f2b2f5ddd3ca665a8a4a0dcb6f [file] [log] [blame] [edit]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef VTPM_BACKENDS_NV_SPACE_MANAGER_H_
#define VTPM_BACKENDS_NV_SPACE_MANAGER_H_
#include <string>
#include <vector>
#include <trunks/tpm_generated.h>
namespace vtpm {
// `NvSpaceManager` manages the authorization, attributes, and data of one or
// more NV spaces.
class NvSpaceManager {
public:
virtual ~NvSpaceManager() = default;
// Verifies the password for `nv_index`, and set `data` if the password
// matches. The password authorization is by design directly defined by
// implementation.
virtual trunks::TPM_RC Read(trunks::TPM_NV_INDEX nv_index,
const std::string& password,
std::string& nv_data) = 0;
// Sets the data size of `nv_index` to `data_size` and returns
// `TPM_RC_SUCCESS` in a successful case. Otherwise, returns a certain error
// code.
virtual trunks::TPM_RC GetDataSize(trunks::TPM_NV_INDEX nv_index,
trunks::UINT16& data_size) = 0;
// Sets the data size of `nv_index` to `attributes` and returns
// `TPM_RC_SUCCESS` in a successful case. Otherwise, returns a certain error
// code.
virtual trunks::TPM_RC GetAttributes(trunks::TPM_NV_INDEX nv_index,
trunks::TPMA_NV& attributes) = 0;
// Sets the name algorithm of `nv_index` to `algorithm` and returns
// `TPM_RC_SUCCESS` in a successful case. Otherwise, returns a certain error
// code.
virtual trunks::TPM_RC GetNameAlgorithm(trunks::TPM_NV_INDEX nv_index,
trunks::TPMI_ALG_HASH& algorithm) = 0;
// List the managed TPM NV index handles.
virtual trunks::TPM_RC ListHandles(
std::vector<trunks::TPM_HANDLE>& handles) = 0;
};
} // namespace vtpm
#endif // VTPM_BACKENDS_NV_SPACE_MANAGER_H_