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