tpm_utility.h revision 03d54dfbcbdd04384e8c0419b7c45282664a2c1a
1c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Copyright 2014 The Chromium OS Authors. All rights reserved.
2c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// Use of this source code is governed by a BSD-style license that can be
3c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn// found in the LICENSE file.
4c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
5c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#ifndef TRUNKS_TPM_UTILITY_H_
6c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#define TRUNKS_TPM_UTILITY_H_
7c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
8e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi#include <string>
9e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi
10c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <base/macros.h>
11c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include <chromeos/chromeos_export.h>
12c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
13c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#include "trunks/tpm_generated.h"
14c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
15c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnnamespace trunks {
16c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
1703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn// An interface which provides convenient methods for common TPM operations.
18c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahnclass CHROMEOS_EXPORT TpmUtility {
19c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn public:
20c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  TpmUtility() {}
21c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  virtual ~TpmUtility() {}
22c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
2303d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  // Synchronously performs a TPM startup sequence and self tests. Typically
2403d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  // this is done by the platform firmware. Returns the result of the startup
2503d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  // and self-tests or, if already started, just the result of the self-tests.
2603d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  virtual TPM_RC Startup() = 0;
2703d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn
2803d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  // Synchronously prepares a TPM for use by Chromium OS. Typically this is done
2903d54dfbcbdd04384e8c0419b7c45282664a2c1aDarren Krahn  // by the platform firmware and, in that case, this method has no effect.
30c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  virtual TPM_RC InitializeTpm() = 0;
31c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
32e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi  // Stir the tpm random generation module with some random entropy data.
33e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi  virtual TPM_RC StirRandom(const std::string& entropy_data) = 0;
34e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi
35e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi  // This method returns |num_bytes| of random data generated by the tpm.
36e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi  virtual TPM_RC GenerateRandom(int num_bytes, std::string* random_data) = 0;
37e31034f28641c9bc3e5576cab6d2c7d918bb427cUtkarsh Sanghi
38c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn private:
39c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn  DISALLOW_COPY_AND_ASSIGN(TpmUtility);
40c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn};
41c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
42c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn}  // namespace trunks
43c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn
44c364caa9d091baae8eeb9144a6abf69e1fcabb39Darren Krahn#endif  // TRUNKS_TPM_UTILITY_H_
45