blob: c0966bc7b58450625beb50f6b38d048c53ba1bfb [file] [log] [blame]
// Copyright (c) 2009-2010 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.
// TpmInit - public interface class for initializing the TPM
#include <base/basictypes.h>
#include <base/scoped_ptr.h>
#include <chromeos/utility.h>
#include "tpm.h"
#ifndef CRYPTOHOME_TPM_INIT_H_
#define CRYPTOHOME_TPM_INIT_H_
namespace cryptohome {
class TpmInitTask;
class TpmInit {
// Friend class TpmInitTask as it is a glue class to allow ThreadMain to be
// called on a separate thread without inheriting from
// PlatformThread::Delegate
friend class TpmInitTask;
public:
class TpmInitCallback {
public:
virtual void InitializeTpmComplete(bool status, bool took_ownership) = 0;
};
// Default constructor
TpmInit();
virtual ~TpmInit();
virtual void Init(TpmInitCallback* notify_callback);
// Gets random data from the TPM
//
// Parameters
// length - The number of bytes to get
// data (OUT) - Receives the random bytes
virtual bool GetRandomData(int length, chromeos::Blob* data);
// Starts asynchronous initialization of the TPM
virtual bool StartInitializeTpm();
// Returns true if the TPM is initialized and ready for use
virtual bool IsTpmReady();
// Returns true if the TPM is enabled
virtual bool IsTpmEnabled();
// Returns true if the TPM is owned
virtual bool IsTpmOwned();
// Returns true if the TPM is being owned
virtual bool IsTpmBeingOwned();
// Returns true if initialization has been called
virtual bool HasInitializeBeenCalled();
// Gets the TPM password if the TPM initialization took ownership
//
// Parameters
// password (OUT) - The owner password used for the TPM
virtual bool GetTpmPassword(chromeos::Blob* password);
// Clears the TPM password from memory and disk
virtual void ClearStoredTpmPassword();
// Returns the number of milliseconds it took to initialize the TPM
virtual long GetInitializationMillis();
virtual void set_tpm(Tpm* value);
virtual Tpm* get_tpm();
private:
virtual void ThreadMain();
// The background task for initializing the TPM, implemented as a
// PlatformThread::Delegate
scoped_ptr<TpmInitTask> tpm_init_task_;
TpmInitCallback* notify_callback_;
bool initialize_called_;
bool task_done_;
bool initialize_took_ownership_;
long initialization_time_;
DISALLOW_COPY_AND_ASSIGN(TpmInit);
};
} // namespace cryptohome
#endif // CRYPTOHOME_TPM_INIT_H_