/* Software-based Trusted Platform Module (TPM) Emulator
 * Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net>
 *
 * This module is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 *
 * This module is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * $Id: tpm_emulator.h 426 2010-02-22 17:11:58Z mast $
 */

#ifndef _TPM_EMULATOR_H_
#define _TPM_EMULATOR_H_

#include "config.h"
#include "tpm_emulator_extern.h"

#define TPM_MANUFACTURER 0x4554485A /* 'ETHZ' */        

/**
 * configuration flags
 */
#define TPM_CONF_STRONG_PERSISTENCE            0x01
#define TPM_CONF_GENERATE_EK                   0x02
#define TPM_CONF_GENERATE_SEED_DAA             0x04
#define TPM_CONF_USE_INTERNAL_PRNG             0x08
#define TPM_CONF_ALLOW_PRNG_STATE_SETTING      0x10
#define TPM_CONF_KEEP_PUBEK_READABLE           0x20

/**
 * tpm_emulator_init - initialises and starts the TPM emulator
 * @startup: [in] startup mode
 * @conf: [in] tpm configuration flags
 */
void tpm_emulator_init(uint32_t startup, uint32_t conf);

/**
 * tpm_emulator_shutdown - shuts the TPM emulator down
 */
void tpm_emulator_shutdown(void);

/**
 * tpm_handle_command - handles (i.e., executes) TPM commands
 * @in: [in] incoming TPM command
 * @in_size: [in] total number of input bytes
 * @out: [inout] outgoing TPM result
 * @out_size: [inout] total number of output bytes
 * @Returns: 0 on success, -1 otherwise
 *
 * Description: Handles (i.e., executes) TPM commands. The parameters
 * out and out_size determine the output buffer and its capacity,
 * respectively. If out is NULL, the required memory is allocated
 * internally and has to be released by means of tpm_free() after
 * its usage. In case of an error, all internally allocated memory
 * is released and the the state of out and out_size is unspecified.
 */ 
int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size);

#endif /* _TPM_EMULATOR_H_ */

