blob: fc74890eb04d85cace49e1b382e53fe04b515387 [file] [log] [blame]
// Copyright 2014 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 TRUNKS_TPM_UTILITY_H_
#define TRUNKS_TPM_UTILITY_H_
#include <string>
#include <base/macros.h>
#include <chromeos/chromeos_export.h>
#include "trunks/tpm_generated.h"
namespace trunks {
// An interface which provides convenient methods for common TPM operations.
class CHROMEOS_EXPORT TpmUtility {
public:
TpmUtility() {}
virtual ~TpmUtility() {}
// Synchronously performs a TPM startup sequence and self tests. Typically
// this is done by the platform firmware. Returns the result of the startup
// and self-tests or, if already started, just the result of the self-tests.
virtual TPM_RC Startup() = 0;
// Synchronously prepares a TPM for use by Chromium OS. Typically this is done
// by the platform firmware and, in that case, this method has no effect.
virtual TPM_RC InitializeTpm() = 0;
// Stir the tpm random generation module with some random entropy data.
virtual TPM_RC StirRandom(const std::string& entropy_data) = 0;
// This method returns |num_bytes| of random data generated by the tpm.
virtual TPM_RC GenerateRandom(int num_bytes, std::string* random_data) = 0;
// This method extends the pcr specified by |pcr_index| with the SHA256
// hash of |extend_data|. The exact action performed is
// TPM2_PCR_Extend(Sha256(extend_data));
virtual TPM_RC ExtendPCR(int pcr_index, const std::string& extend_data) = 0;
// This method reads the pcr specified by |pcr_index| and returns its value
// in |pcr_value|. NOTE: it assumes we are using SHA256 as our hash alg.
virtual TPM_RC ReadPCR(int pcr_index, std::string* pcr_value) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(TpmUtility);
};
} // namespace trunks
#endif // TRUNKS_TPM_UTILITY_H_