blob: b08c6be50f67a90836a7627740702a77fe29d65e [file] [log] [blame]
// 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_H_
#define LIBTPMCRYPTO_TPM_H_
#include <stddef.h>
#include <memory>
#include <string>
#include <base/compiler_specific.h>
#include <base/macros.h>
#include <brillo/brillo_export.h>
#include <brillo/secure_blob.h>
namespace tpmcrypto {
class BRILLO_EXPORT Tpm {
public:
virtual ~Tpm() = default;
// Seals a secret to PCR0 with the SRK.
//
// Parameters
// value - The value to be sealed.
// sealed_value - The sealed value.
//
// Returns true on success.
virtual bool SealToPCR0(const brillo::SecureBlob& value,
brillo::SecureBlob* sealed_value)
WARN_UNUSED_RESULT = 0;
// Unseals a secret previously sealed with the SRK.
//
// Parameters
// sealed_value - The sealed value.
// value - The original value.
//
// Returns true on success.
virtual bool Unseal(const brillo::SecureBlob& sealed_value,
brillo::SecureBlob* value) WARN_UNUSED_RESULT = 0;
// Gets the attributes of an index in the NVRAM.
//
// Parameters
// index - The index in the NVRAM area.
// attributes - The output attributs of the NVRAM aread.
//
// Returns true on success;
virtual bool GetNVAttributes(uint32_t index, uint32_t* attributes) = 0;
// Reads the content of an NVRAM without authorization.
//
// Parameters
// index - The index in the NVRAM area.
// offset - The offset to read the data from.
// size - The size of the data in the NVRAM read.
// data - The output data read from the NVRAM area.
//
// Returns true on success;
virtual bool NVReadNoAuth(uint32_t index,
uint32_t offset,
size_t size,
std::string* data) = 0;
protected:
Tpm() = default;
DISALLOW_COPY_AND_ASSIGN(Tpm);
};
BRILLO_EXPORT std::unique_ptr<Tpm> CreateTpmInstance();
} // namespace tpmcrypto
#endif // LIBTPMCRYPTO_TPM_H_