blob: dbae908d51eb0e8d5f4f4f8e43c6965ae8a4b97f [file] [log] [blame]
/* 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: test_tddl.c 364 2010-02-11 10:24:45Z mast $
*/
#include <stdio.h>
#include <tddl.h>
const char *get_error(TSS_RESULT res)
{
switch (res) {
case TDDL_SUCCESS:
return "success";
case TDDL_E_FAIL:
return "operation failed";
case TDDL_E_BAD_PARAMETER:
return "bad patameter";
case TDDL_E_TIMEOUT:
return "timeout";
case TDDL_E_ALREADY_OPENED:
return "already opened";
case TDDL_E_ALREADY_CLOSED:
return "already closed";
case TDDL_E_INSUFFICIENT_BUFFER:
return "insufficient buffer";
case TDDL_E_COMMAND_COMPLETED:
return "comand completed";
case TDDL_E_COMMAND_ABORTED:
return "command aborted";
case TDDL_E_IOERROR:
return "IO error";
case TDDL_E_BADTAG:
return "bad tag";
case TDDL_E_COMPONENT_NOT_FOUND:
return "component not found";
default:
return "unknown error";
}
}
const char *get_status(UINT32 status)
{
switch (status) {
case TDDL_DRIVER_OK: return "DRIVER OK";
case TDDL_DRIVER_FAILED: return "DRIVER FAILED";
case TDDL_DRIVER_NOT_OPENED: return "DRIVER NOT OPENED";
case TDDL_DEVICE_OK: return "DEVICE OK";
case TDDL_DEVICE_UNRECOVERABLE: return "DEVICE UNRECOVERABLE";
case TDDL_DEVICE_RECOVERABLE: return "DEVICE RECOVERABLE";
case TDDL_DEVICE_NOT_FOUND: return "DEVICE NOT FOUND";
default: return "";
}
}
int main()
{
TSS_RESULT res;
UINT32 status;
BYTE buf[256];
UINT32 buf_size = sizeof(buf);
BYTE reset[] = {0, 193, 0, 0, 0, 10, 0, 0, 0, 90};
unsigned int i;
res = Tddli_Open();
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_Open() failed: %s (%04x)\n", get_error(res), res);
return -1;
}
/* get driver and device status */
res = Tddli_GetStatus(TDDL_DRIVER_STATUS, &status);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetStatus() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
printf("Driver status: %s\n", get_status(status));
res = Tddli_GetStatus(TDDL_DEVICE_STATUS, &status);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetStatus() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
printf("Device status: %s\n", get_status(status));
/* get version */
buf_size = sizeof(buf);
res = Tddli_GetCapability(TDDL_CAP_VERSION, TDDL_CAP_VER_DRV, buf, &buf_size);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetCapability() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
printf("DRV version: %d.%d.%d.%d\n", buf[0], buf[1], buf[2], buf[3]);
buf_size = sizeof(buf);
res = Tddli_GetCapability(TDDL_CAP_VERSION, TDDL_CAP_VER_FW, buf, &buf_size);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetCapability() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
printf("TPM Version: %d.%d.%d.%d\n", buf[0], buf[1], buf[2], buf[3]);
/* get properties */
buf_size = sizeof(buf);
res = Tddli_GetCapability(TDDL_CAP_PROPERTY, TDDL_CAP_PROP_MANUFACTURER, buf, &buf_size);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetCapability() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
buf[buf_size] = 0;
printf("Manufacturer: %s\n", buf);
buf_size = sizeof(buf);
res = Tddli_GetCapability(TDDL_CAP_PROPERTY, TDDL_CAP_PROP_MODULE_TYPE, buf, &buf_size);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_GetCapability() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
buf[buf_size] = 0;
printf("Module type: %s\n", buf);
/* reset tpm */
printf("Transmit: ");
for (i = 0; i < sizeof(reset); i++) printf("%02x ", reset[i]);
printf("\n");
buf_size = sizeof(buf);
res = Tddli_TransmitData(reset, sizeof(reset), buf, &buf_size);
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_TransmitData() failed: %s (%04x)\n", get_error(res), res);
Tddli_Close();
return -1;
}
printf("Result: ");
for (i = 0; i < buf_size; i++) printf("%02x ", buf[i]);
printf("\n");
res = Tddli_Close();
if (res != TDDL_SUCCESS) {
printf("Error: Tddli_Close() failed: %s (%04x)\n", get_error(res), res);
return -1;
}
return 0;
}